diff mbox series

[v3,2/8] nbd: Forbid nbd-server-stop when server is not running

Message ID 20190111194720.15671-3-eblake@redhat.com
State New
Headers show
Series Promote x-nbd-server-add-bitmap to stable | expand

Commit Message

Eric Blake Jan. 11, 2019, 7:47 p.m. UTC
Since we already forbid other nbd-server commands when not
in the right state, it is unlikely that any caller was relying
on a second stop to behave as a silent no-op.  Update iotest
223 to show the improved behavior.

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

---
v3: new patch
---
 blockdev-nbd.c             | 5 +++++
 tests/qemu-iotests/223     | 2 +-
 tests/qemu-iotests/223.out | 2 +-
 3 files changed, 7 insertions(+), 2 deletions(-)

Comments

Vladimir Sementsov-Ogievskiy Jan. 14, 2019, 8:39 a.m. UTC | #1
11.01.2019 22:47, Eric Blake wrote:
> Since we already forbid other nbd-server commands when not
> in the right state, it is unlikely that any caller was relying
> on a second stop to behave as a silent no-op.  Update iotest
> 223 to show the improved behavior.
> 
> Signed-off-by: Eric Blake <eblake@redhat.com>


Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>

> 
> ---
> v3: new patch
> ---
>   blockdev-nbd.c             | 5 +++++
>   tests/qemu-iotests/223     | 2 +-
>   tests/qemu-iotests/223.out | 2 +-
>   3 files changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/blockdev-nbd.c b/blockdev-nbd.c
> index 1d170c80b82..ca584919194 100644
> --- a/blockdev-nbd.c
> +++ b/blockdev-nbd.c
> @@ -214,6 +214,11 @@ void qmp_nbd_server_remove(const char *name,
> 
>   void qmp_nbd_server_stop(Error **errp)
>   {
> +    if (!nbd_server) {
> +        error_setg(errp, "NBD server not running");
> +        return;
> +    }

yes, exactly like in qmp_nbd_server_remove

> +
>       nbd_export_close_all();
> 
>       nbd_server_free(nbd_server);
> diff --git a/tests/qemu-iotests/223 b/tests/qemu-iotests/223
> index 61b46a2f066..a4016091b21 100755
> --- a/tests/qemu-iotests/223
> +++ b/tests/qemu-iotests/223
> @@ -172,7 +172,7 @@ _send_qemu_cmd $QEMU_HANDLE '{"execute":"nbd-server-remove",
>   _send_qemu_cmd $QEMU_HANDLE '{"execute":"nbd-server-remove",
>     "arguments":{"name":"n2"}}' "error" # Attempt duplicate clean
>   _send_qemu_cmd $QEMU_HANDLE '{"execute":"nbd-server-stop"}' "return"
> -_send_qemu_cmd $QEMU_HANDLE '{"execute":"nbd-server-stop"}' "return" # Oops
> +_send_qemu_cmd $QEMU_HANDLE '{"execute":"nbd-server-stop"}' "error" # Again

hm, interesting, but looks like the latest "return" or "error" is an extra thing,
we can use "}" for all qmp commands, and it worth adding _send_qmp_cmd wrapper..
But, of course, it's not about these series.

>   _send_qemu_cmd $QEMU_HANDLE '{"execute":"quit"}' "return"
> 
>   # success, all done
> diff --git a/tests/qemu-iotests/223.out b/tests/qemu-iotests/223.out
> index e6ede0591cd..8a4d63a4fc2 100644
> --- a/tests/qemu-iotests/223.out
> +++ b/tests/qemu-iotests/223.out
> @@ -69,6 +69,6 @@ read 2097152/2097152 bytes at offset 2097152
>   {"return": {}}
>   {"error": {"class": "GenericError", "desc": "Export 'n2' is not found"}}
>   {"return": {}}
> -{"return": {}}
> +{"error": {"class": "GenericError", "desc": "NBD server not running"}}
>   {"return": {}}
>   *** done
>
diff mbox series

Patch

diff --git a/blockdev-nbd.c b/blockdev-nbd.c
index 1d170c80b82..ca584919194 100644
--- a/blockdev-nbd.c
+++ b/blockdev-nbd.c
@@ -214,6 +214,11 @@  void qmp_nbd_server_remove(const char *name,

 void qmp_nbd_server_stop(Error **errp)
 {
+    if (!nbd_server) {
+        error_setg(errp, "NBD server not running");
+        return;
+    }
+
     nbd_export_close_all();

     nbd_server_free(nbd_server);
diff --git a/tests/qemu-iotests/223 b/tests/qemu-iotests/223
index 61b46a2f066..a4016091b21 100755
--- a/tests/qemu-iotests/223
+++ b/tests/qemu-iotests/223
@@ -172,7 +172,7 @@  _send_qemu_cmd $QEMU_HANDLE '{"execute":"nbd-server-remove",
 _send_qemu_cmd $QEMU_HANDLE '{"execute":"nbd-server-remove",
   "arguments":{"name":"n2"}}' "error" # Attempt duplicate clean
 _send_qemu_cmd $QEMU_HANDLE '{"execute":"nbd-server-stop"}' "return"
-_send_qemu_cmd $QEMU_HANDLE '{"execute":"nbd-server-stop"}' "return" # Oops
+_send_qemu_cmd $QEMU_HANDLE '{"execute":"nbd-server-stop"}' "error" # Again
 _send_qemu_cmd $QEMU_HANDLE '{"execute":"quit"}' "return"

 # success, all done
diff --git a/tests/qemu-iotests/223.out b/tests/qemu-iotests/223.out
index e6ede0591cd..8a4d63a4fc2 100644
--- a/tests/qemu-iotests/223.out
+++ b/tests/qemu-iotests/223.out
@@ -69,6 +69,6 @@  read 2097152/2097152 bytes at offset 2097152
 {"return": {}}
 {"error": {"class": "GenericError", "desc": "Export 'n2' is not found"}}
 {"return": {}}
-{"return": {}}
+{"error": {"class": "GenericError", "desc": "NBD server not running"}}
 {"return": {}}
 *** done