[libvirt] [PATCH 1/7] qemu: hotplug: Properly handle errors in qemuDomainWaitForDeviceRemoval

Cole Robinson crobinso at redhat.com
Tue Apr 12 23:14:12 UTC 2016


On 04/05/2016 11:09 AM, Peter Krempa wrote:
> Callers ignore if this function returns -1 and continue as though the
> DEVICE_DELETED event was not received. Since we can't be sure that the
> event was not received we should behave as if the event was not
> supported and remove the device definition right away. The error
> fortunately won't really happen here.
> ---
>  src/qemu/qemu_hotplug.c | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
> index 48bea6a..6c619e9 100644
> --- a/src/qemu/qemu_hotplug.c
> +++ b/src/qemu/qemu_hotplug.c
> @@ -3351,8 +3351,8 @@ qemuDomainResetDeviceRemoval(virDomainObjPtr vm)
>  }
> 
>  /* Returns:
> - *  -1 on error
> - *   0 when DEVICE_DELETED event is unsupported
> + *   0 when DEVICE_DELETED event is unsupported, or we failed to reliably wait
> + *   for the event
>   *   1 when DEVICE_DELETED arrived before the timeout and the caller is
>   *     responsible for finishing the removal
>   *   2 device removal did not finish in qemuDomainRemoveDeviceWaitTime
> @@ -3367,7 +3367,7 @@ qemuDomainWaitForDeviceRemoval(virDomainObjPtr vm)
>          return 0;
> 
>      if (virTimeMillisNow(&until) < 0)
> -        return -1;
> +        return 0;
>      until += qemuDomainRemoveDeviceWaitTime;
> 
>      while (priv->unpluggingDevice) {
> @@ -3376,9 +3376,9 @@ qemuDomainWaitForDeviceRemoval(virDomainObjPtr vm)
>              if (errno == ETIMEDOUT) {
>                  return 2;
>              } else {
> -                virReportSystemError(errno, "%s",
> -                                     _("Unable to wait on unplug condition"));
> -                return -1;
> +                VIR_WARN("Failed to wait on unplug condition for domain '%s' "
> +                         "device '%s'", vm->def->name, priv->unpluggingDevice);
> +                return 0;
>              }
>          }
>      }
> 

Makes sense, and I verified every caller is just checking the return value ==
1. ACK

- Cole




More information about the libvir-list mailing list