Message ID | 4B20BDD0.5060901@redhat.com |
---|---|
State | New |
Headers | show |
On Thu, Dec 10, 2009 at 10:22:24AM +0100, Gerd Hoffmann wrote: > On 12/09/09 17:56, Daniel P. Berrange wrote: > >There's a small bug in SCSI drive hotplug where QEMU is not assigning > >unique block device names when you leave the name unspecified > > > >$ /home/berrange/usr/qemu-0.12/bin/qemu -vnc :1 -monitor stdio -device lsi > >QEMU 0.11.91 monitor - type 'help' for more information > >(qemu) drive_add 0:0:4 file=/home/berrange/mcdboot.img,if=scsi > >OK bus 0, unit 0 > >(qemu) drive_add 0:0:4 file=/home/berrange/mcdboot.img,if=scsi > >OK bus 0, unit 1 > >(qemu) drive_add 0:0:4 file=/home/berrange/mcdboot.img,if=scsi > >OK bus 0, unit 2 > >(qemu) drive_add 0:0:4 file=/home/berrange/mcdboot.img,if=scsi > >OK bus 0, unit 3 > >(qemu) info block > >ide1-cd0: type=cdrom removable=1 locked=0 [not inserted] > >floppy0: type=floppy removable=1 locked=0 [not inserted] > >sd0: type=floppy removable=1 locked=0 [not inserted] > >scsi0-hd0: type=hd removable=0 file=/home/berrange/mcdboot.img ro=1 > >drv=raw encrypted=0 > >scsi0-hd0: type=hd removable=0 file=/home/berrange/mcdboot.img ro=1 > >drv=raw encrypted=0 > >scsi0-hd0: type=hd removable=0 file=/home/berrange/mcdboot.img ro=1 > >drv=raw encrypted=0 > >scsi0-hd0: type=hd removable=0 file=/home/berrange/mcdboot.img ro=1 > >drv=raw encrypted=0 > >(qemu) > > > >Notice they are all 'scsi0-hd0', instead of scsi0-hd1, scsi0-hd2, etc > > Fix attached. > > Note that the whole auto-naming only works reliable if you limit > yourself to a single scsi bus (in any qemu version out there). I > strongly recommend to simply name the drives yourself using id=<name>. > Works in 0.12 and IIRC in 0.11 too. Yes we are going to start explicitly naming all the QEMU devices that libvirt creates. I just want this fix for existing released libvirt which doesn't name devices. Regards, Daniel
diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c index 7e5c51d..9e8e6ed 100644 --- a/hw/pci-hotplug.c +++ b/hw/pci-hotplug.c @@ -93,6 +93,7 @@ static int scsi_hot_add(DeviceState *adapter, DriveInfo *dinfo, int printinfo) */ dinfo->unit = qemu_opt_get_number(dinfo->opts, "unit", -1); scsidev = scsi_bus_legacy_add_drive(scsibus, dinfo, dinfo->unit); + dinfo->unit = scsidev->id; if (printinfo) qemu_error("OK bus %d, unit %d\n", scsibus->busnr, scsidev->id);