On Tue, Jul 28, 2015 at 04:25:13PM +0800, zhang bo wrote: > static int > qemuDomainDetachVirtioDiskDevice(virQEMUDriverPtr driver, > virDomainObjPtr vm, > virDomainDiskDefPtr detach) > { > ....... > > rc = qemuDomainWaitForDeviceRemoval(vm); > if (rc == 0 || rc == 1) > ret = qemuDomainRemoveDiskDevice(driver, vm, detach); > else > ret = 0; /*the return value of 2 is dismissed here, which refers to ETIMEOUT.*/ > ........ > } > > ------------------------------------ > > If it timeouts when qemu tries to del the device, the return value would be modified from 2 to 0 in > function qemuDomainDetachVirtioDiskDevice(), which means that, the users would be misleaded that > the device has been deleted, however, the device maybe probably failed to be detached after timeout and > still in use. > This is intentional and documented: http://libvirt.org/html/libvirt-libvirt-domain.html#virDomainDetachDeviceFlags Unplugging a disk requires guest cooperation, so the best we can do is ask qemu to unplug it and wait for a while. > That is to say, the function qemuDomainDetachVirtioDiskDevice()'s return value is ambiguous when it's 0, > maybe successful, or timeout. Will it be better to pass ETIMEOUT to user? or any other advises? for example, > let users themselves dumpxml the guest to check whether the device has been actually detached or not? Either dump the XML, or wait for the VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED event, as the API documentation suggests. Jan
Attachment:
signature.asc
Description: Digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list