qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH for-2.1] scsi: fix scsi disk symbol confusion in


From: Gonglei (Arei)
Subject: Re: [Qemu-devel] [PATCH for-2.1] scsi: fix scsi disk symbol confusion in guest os
Date: Fri, 18 Jul 2014 01:32:09 +0000

Hi,

> -----Original Message-----
> From: Paolo Bonzini [mailto:address@hidden
> Sent: Thursday, July 17, 2014 9:45 PM
> To: Gonglei (Arei); address@hidden
> Cc: Huangweidong (C); Luonengjun
> Subject: Re: [PATCH for-2.1] scsi: fix scsi disk symbol confusion in guest os
> 
> Il 17/07/2014 14:55, address@hidden ha scritto:
> > From: Gonglei <address@hidden>
> >
> > Assuming that we hotplug three virtio-scsi disk as follow steps:
> > 1. start vm with virtio-scsi as system disk (guest os: suse11 sp3 ).
> > 2. hotplug disk 1 (as lun2)
> >  -drive
> file=/Images/TestImg/kvm-disk-scsi_001,if=none,id=drive-scsi0-0-0-2,format=r
> aw, \
> >  cache=none,aio=native -device
> scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=2, \
> >  drive=drive-scsi0-0-0-2,id=scsi0-0-0-2
> > 2. hotplug disk 2 (as lun3)
> >  -drive
> file=/Images/TestImg/kvm-disk-scsi_002,if=none,id=drive-scsi0-0-0-3,format=r
> aw,\
> >  cache=none,aio=native -device
> scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=3,\
> >  drive=drive-scsi0-0-0-3,id=scsi0-0-0-3
> > 3. hotplug disk 3 (as lun4)
> >  -drive
> file=/Images/TestImg/kvm-disk-scsi_003,if=none,id=drive-scsi0-0-0-4,format=r
> aw,\
> >  cache=none,aio=native -device
> scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=4,\
> >  drive=drive-scsi0-0-0-4,id=scsi0-0-0-4
> >
> > We can see lun2 as sdb, lun3 as sdc, lun4 as sdd in the guest os.
> > But after rebootint the guest, the scsi disk symbol will changed,
> > lun2 change to sdd, lun3 as sdc, lun4 as sdb.
> >
> > Lun2 -> sdb   reboot    lun2 -> sdd
> > Lun3 -> sdc   ------>   lun3 -> sdc
> > Lun4 -> sdd             lun4 -> sdb
> >
> > In Linux os, the scsi_scan_host() will scan scsi host adapter's lun, 
> > firstly scan
> lun 0
> > and add into system, secondly send REPORT_LUNS command to qurey the
> other luns.
> >
> > In QEMU, the scsi_target_emulate_report_luns() emulate the REPORT_LUNS
> command.
> > The function will scan virtio-scsi-bus's children and report to guest os 
> > finally.
> >  QTAILQ_FOREACH(kid, &r->req.bus->qbus.children, sibling) {
> >
> > The step of attaching device in QEMU:
> >  qdev_device_add
> >    qdev_set_parent_bus
> >       bus_add_child
> >           QTAILQ_INSERT_HEAD(&bus->children, kid, sibling); // insert list
> head
> >
> > The latest hotplugged disk is at the head of bus->children list.
> >
> > Finally those cause the disk symbol confusion in the guest os.
> >
> > Fix the issue by QTAILQ_FOREACH_REVERSE replace QTAILQ_FOREACH in
> > scsi_target_emulate_report_luns(), which follow the FIFO principle for
> > scsi disks hotplugging.
> >
> > Signed-off-by: Gonglei <address@hidden>
> > ---
> >  hw/scsi/scsi-bus.c | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c
> > index 4341754..b6671ea 100644
> > --- a/hw/scsi/scsi-bus.c
> > +++ b/hw/scsi/scsi-bus.c
> > @@ -371,7 +371,8 @@ static bool
> scsi_target_emulate_report_luns(SCSITargetReq *r)
> >      memset(r->buf, 0, len);
> >      stl_be_p(&r->buf[0], n);
> >      i = found_lun0 ? 8 : 16;
> > -    QTAILQ_FOREACH(kid, &r->req.bus->qbus.children, sibling) {
> > +    QTAILQ_FOREACH_REVERSE(kid, &r->req.bus->qbus.children,
> > +                                   ChildrenHead, sibling) {
> >          DeviceState *qdev = kid->child;
> >          SCSIDevice *dev = SCSI_DEVICE(qdev);
> >
> >
> 
> This is a change to the guest ABI, so you would have to make it only for
> the latest machine type; 

Would you give me more details? Thanks.

> and this unfortunately disqualifies it already
> from 2.1 since it's very late.
> 
OK.

> Does this happen for cold-plugged disks too? If so, I wonder if this
> would cause more pain than it fixes, because it could break machines
> when you upgrade QEMU. 

No, it doesn't happen for cold-plugged disks.

> In the end, /dev/sd* is not stable and people
> should use /dev/disk/* and/or partition labels instead.
> 
Agree. 

But for general users, the /dev/sd* usually more commonly used. They 
can be used easily through easy mount command "/dev/sd* /mnt/sd* ".
So, this changes make sense for people IMHO.

Best regards,
-Gonglei



reply via email to

[Prev in Thread] Current Thread [Next in Thread]