From: Paolo Bonzini <pbonzini@redhat.com>
To: arei.gonglei@huawei.com, qemu-devel@nongnu.org
Cc: luonengjun@huawei.com, weidong.huang@huawei.com
Subject: Re: [Qemu-devel] [PATCH for-2.1] scsi: fix scsi disk symbol confusion in guest os
Date: Thu, 17 Jul 2014 15:45:16 +0200 [thread overview]
Message-ID: <53C7D36C.7020900@redhat.com> (raw)
In-Reply-To: <1405601734-12268-1-git-send-email-arei.gonglei@huawei.com>
Il 17/07/2014 14:55, arei.gonglei@huawei.com ha scritto:
> From: Gonglei <arei.gonglei@huawei.com>
>
> 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=raw, \
> 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=raw,\
> 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=raw,\
> 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 <arei.gonglei@huawei.com>
> ---
> 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; and this unfortunately disqualifies it already
from 2.1 since it's very late.
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. In the end, /dev/sd* is not stable and people
should use /dev/disk/* and/or partition labels instead.
Paolo
next prev parent reply other threads:[~2014-07-17 13:45 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-17 12:55 [Qemu-devel] [PATCH for-2.1] scsi: fix scsi disk symbol confusion in guest os arei.gonglei
2014-07-17 13:45 ` Paolo Bonzini [this message]
2014-07-18 1:32 ` Gonglei (Arei)
2014-07-18 2:01 ` Gonglei (Arei)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53C7D36C.7020900@redhat.com \
--to=pbonzini@redhat.com \
--cc=arei.gonglei@huawei.com \
--cc=luonengjun@huawei.com \
--cc=qemu-devel@nongnu.org \
--cc=weidong.huang@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.