[1.5/15] nbd-server: Call blk_set_allow_aio_context_change()
diff mbox series

Message ID 20190524085711.17834-1-kwolf@redhat.com
State New
Headers show
Series
  • Untitled series #122185
Related show

Commit Message

Kevin Wolf May 24, 2019, 8:57 a.m. UTC
The NBD server uses an AioContext notifier, so it can tolerate that its
BlockBackend is switched to a different AioContext. Before we start
actually calling bdrv_try_set_aio_context(), which checks for
consistency, outside of test cases, we need to make sure that the NBD
server actually allows this.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 nbd/server.c               |  1 +
 tests/qemu-iotests/240     | 21 +++++++++++++++++++++
 tests/qemu-iotests/240.out | 13 +++++++++++++
 3 files changed, 35 insertions(+)

Comments

Eric Blake May 24, 2019, 12:27 p.m. UTC | #1
On 5/24/19 3:57 AM, Kevin Wolf wrote:
> The NBD server uses an AioContext notifier, so it can tolerate that its
> BlockBackend is switched to a different AioContext. Before we start
> actually calling bdrv_try_set_aio_context(), which checks for
> consistency, outside of test cases, we need to make sure that the NBD
> server actually allows this.
> 
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
>  nbd/server.c               |  1 +
>  tests/qemu-iotests/240     | 21 +++++++++++++++++++++
>  tests/qemu-iotests/240.out | 13 +++++++++++++
>  3 files changed, 35 insertions(+)
> 

Reviewed-by: Eric Blake <eblake@redhat.com>

Patch
diff mbox series

diff --git a/nbd/server.c b/nbd/server.c
index e21bd501dc..d1375350bc 100644
--- a/nbd/server.c
+++ b/nbd/server.c
@@ -1491,6 +1491,7 @@  NBDExport *nbd_export_new(BlockDriverState *bs, uint64_t dev_offset,
         goto fail;
     }
     blk_set_enable_write_cache(blk, !writethrough);
+    blk_set_allow_aio_context_change(blk, true);
 
     exp->refcount = 1;
     QTAILQ_INIT(&exp->clients);
diff --git a/tests/qemu-iotests/240 b/tests/qemu-iotests/240
index b4cf95096d..5be6b9c0f7 100755
--- a/tests/qemu-iotests/240
+++ b/tests/qemu-iotests/240
@@ -27,6 +27,12 @@  echo "QA output created by $seq"
 
 status=1	# failure is the default!
 
+_cleanup()
+{
+    rm -f "$TEST_DIR/nbd"
+}
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
 # get standard environment, filters and checks
 . ./common.rc
 . ./common.filter
@@ -122,6 +128,21 @@  run_qemu <<EOF
 { "execute": "quit"}
 EOF
 
+echo
+echo === Attach a SCSI disks using the same block device as a NBD server ===
+echo
+
+run_qemu <<EOF
+{ "execute": "qmp_capabilities" }
+{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": "hd0", "read-only": true}}
+{ "execute": "nbd-server-start", "arguments": {"addr":{"type":"unix","data":{"path":"$TEST_DIR/nbd"}}}}
+{ "execute": "nbd-server-add", "arguments": {"device":"hd0"}}
+{ "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}
+{ "execute": "device_add", "arguments": {"id": "scsi0", "driver": "${virtio_scsi}", "iothread": "iothread0"}}
+{ "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver": "scsi-hd", "drive": "hd0", "bus": "scsi0.0"}}
+{ "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 d76392966c..84e0a43ce5 100644
--- a/tests/qemu-iotests/240.out
+++ b/tests/qemu-iotests/240.out
@@ -51,4 +51,17 @@  QMP_VERSION
 {"return": {}}
 {"return": {}}
 {"return": {}}
+
+=== Attach a SCSI disks using the same block device as a NBD server ===
+
+Testing:
+QMP_VERSION
+{"return": {}}
+{"return": {}}
+{"return": {}}
+{"return": {}}
+{"return": {}}
+{"return": {}}
+{"return": {}}
+{"return": {}}
 *** done