On 11/29/2016 04:40 PM, Eric Farman wrote: > Consider the following XML snippets: > > $ cat scsicontroller.xml > <controller type='scsi' model='virtio-scsi' index='0'/> > $ cat scsihostdev.xml > <hostdev mode='subsystem' type='scsi'> > <source> > <adapter name='scsi_host0'/> > <address bus='0' target='8' unit='1074151456'/> > </source> > </hostdev> > > If we create a guest that includes the contents of scsihostdev.xml, > but forget the virtio-scsi controller described in scsicontroller.xml, > one is silently created for us. The same holds true when attaching > a hostdev before the matching virtio-scsi controller. > (See qemuDomainFindOrCreateSCSIDiskController for context.) > > Detaching the hostdev, followed by the controller, works well and the > guest behaves appropriately. > > If we detach the virtio-scsi controller device first, any associated > hostdevs are detached for us by the underlying virtio-scsi code (this > is fine, since the connection is broken). But all is not well, as the > guest is unable to receive new virtio-scsi devices (the attach commands > succeed, but devices never appear within the guest), nor even be > shutdown, after this point. > > While this is not libvirt's problem, we can prevent falling into this > scenario by checking if a controller is being used by any hostdev > devices. The same is already done for disk elements today. > > Applying this patch and then using the XML snippets from earlier: > > $ virsh detach-device guest_01 scsicontroller.xml > error: Failed to detach device from scsicontroller.xml > error: operation failed: device cannot be detached: device is busy > > $ virsh detach-device guest_01 scsihostdev.xml > Device detached successfully > > $ virsh detach-device guest_01 scsicontroller.xml > Device detached successfully > > Signed-off-by: Eric Farman <farman@xxxxxxxxxxxxxxxxxx> > Reviewed-by: Bjoern Walk <bwalk@xxxxxxxxxxxxxxxxxx> > Reviewed-by: Boris Fiuczynski <fiuczy@xxxxxxxxxxxxxxxxxx> > --- > src/qemu/qemu_hotplug.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > ACK, safe, and pushed. Thanks, John -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list