qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 3/3] virtio-scsi: Forbid devices with different


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH 3/3] virtio-scsi: Forbid devices with different iothreads sharing a blockdev
Date: Wed, 23 Jan 2019 10:46:54 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.3.1

On 22/01/19 16:53, Alberto Garcia wrote:
> This patch forbids attaching a disk to a SCSI device if its using a
> different AioContext. Test case included.
> 
> Signed-off-by: Alberto Garcia <address@hidden>

Should this be handled in common code?  However, everything else looks
good.  Thanks!

Paolo

> ---
>  hw/scsi/virtio-scsi.c      |  7 +++++++
>  tests/qemu-iotests/240     | 22 ++++++++++++++++++++++
>  tests/qemu-iotests/240.out | 20 ++++++++++++++++++++
>  3 files changed, 49 insertions(+)
> 
> diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c
> index e1f7b208c7..eb90288f47 100644
> --- a/hw/scsi/virtio-scsi.c
> +++ b/hw/scsi/virtio-scsi.c
> @@ -791,9 +791,16 @@ static void virtio_scsi_hotplug(HotplugHandler 
> *hotplug_dev, DeviceState *dev,
>      SCSIDevice *sd = SCSI_DEVICE(dev);
>  
>      if (s->ctx && !s->dataplane_fenced) {
> +        AioContext *ctx;
>          if (blk_op_is_blocked(sd->conf.blk, BLOCK_OP_TYPE_DATAPLANE, errp)) {
>              return;
>          }
> +        ctx = blk_get_aio_context(sd->conf.blk);
> +        if (ctx != s->ctx && ctx != qemu_get_aio_context()) {
> +            error_setg(errp, "Cannot attach a blockdev that is using "
> +                       "a different iothread");
> +            return;
> +        }
>          virtio_scsi_acquire(s);
>          blk_set_aio_context(sd->conf.blk, s->ctx);
>          virtio_scsi_release(s);
> diff --git a/tests/qemu-iotests/240 b/tests/qemu-iotests/240
> index 5d499c9a00..65cc3b39b1 100755
> --- a/tests/qemu-iotests/240
> +++ b/tests/qemu-iotests/240
> @@ -101,6 +101,28 @@ run_qemu <<EOF
>  { "execute": "quit"}
>  EOF
>  
> +echo
> +echo === Attach two SCSI disks using the same block device but different 
> iothreads ===
> +echo
> +
> +run_qemu <<EOF
> +{ "execute": "qmp_capabilities" }
> +{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": 
> "hd0", "read-only": true}}
> +{ "execute": "object-add", "arguments": {"qom-type": "iothread", "id": 
> "iothread0"}}
> +{ "execute": "object-add", "arguments": {"qom-type": "iothread", "id": 
> "iothread1"}}
> +{ "execute": "device_add", "arguments": {"id": "scsi0", "driver": 
> "${virtio_scsi}", "iothread": "iothread0"}}
> +{ "execute": "device_add", "arguments": {"id": "scsi1", "driver": 
> "${virtio_scsi}", "iothread": "iothread1"}}
> +{ "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver": 
> "scsi-hd", "drive": "hd0", "bus": "scsi0.0"}}
> +{ "execute": "device_add", "arguments": {"id": "scsi-hd1", "driver": 
> "scsi-hd", "drive": "hd0", "bus": "scsi1.0"}}
> +{ "execute": "device_del", "arguments": {"id": "scsi-hd0"}}
> +{ "execute": "device_add", "arguments": {"id": "scsi-hd1", "driver": 
> "scsi-hd", "drive": "hd0", "bus": "scsi1.0"}}
> +{ "execute": "device_del", "arguments": {"id": "scsi-hd1"}}
> +{ "execute": "device_del", "arguments": {"id": "scsi0"}}
> +{ "execute": "device_del", "arguments": {"id": "scsi1"}}
> +{ "execute": "blockdev-del", "arguments": {"node-name": "hd0"}}
> +{ "execute": "quit"}
> +EOF
> +
>  # success, all done
>  echo "*** done"
>  rm -f $seq.full
> diff --git a/tests/qemu-iotests/240.out b/tests/qemu-iotests/240.out
> index 701cb5c7d2..d76392966c 100644
> --- a/tests/qemu-iotests/240.out
> +++ b/tests/qemu-iotests/240.out
> @@ -31,4 +31,24 @@ QMP_VERSION
>  {"return": {}}
>  {"return": {}}
>  {"return": {}}
> +
> +=== Attach two SCSI disks using the same block device but different 
> iothreads ===
> +
> +Testing:
> +QMP_VERSION
> +{"return": {}}
> +{"return": {}}
> +{"return": {}}
> +{"return": {}}
> +{"return": {}}
> +{"return": {}}
> +{"return": {}}
> +{"error": {"class": "GenericError", "desc": "Cannot attach a blockdev that 
> is using a different iothread"}}
> +{"return": {}}
> +{"return": {}}
> +{"return": {}}
> +{"return": {}}
> +{"return": {}}
> +{"return": {}}
> +{"return": {}}
>  *** done
> 




reply via email to

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