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.
cheers,
Gerd
>From bd87046b51df2c15e5017e79155045a4e2b7f83b Mon Sep 17 00:00:00 2001
From: Gerd Hoffmann <kra...@redhat.com>
Date: Thu, 10 Dec 2009 10:13:59 +0100
Subject: [PATCH] scsi drive hotplug
---
hw/pci-hotplug.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
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);
--
1.6.5.2