Commit deb6ccb0 authored by Eric Blake's avatar Eric Blake
Browse files

nbd: Allow description when creating NBD blockdev



Allow blockdevs to match the feature already present in qemu-nbd -D.
Enhance iotest 223 to cover it.

Signed-off-by: default avatarEric Blake <eblake@redhat.com>
Reviewed-by: default avatarMaxim Levitsky <mlevitsk@redhat.com>
Reviewed-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Message-Id: <20191114024635.11363-5-eblake@redhat.com>
parent 7bd9d0a9
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -144,6 +144,7 @@ void qmp_nbd_server_start(SocketAddressLegacy *addr,
}

void qmp_nbd_server_add(const char *device, bool has_name, const char *name,
                        bool has_description, const char *description,
                        bool has_writable, bool writable,
                        bool has_bitmap, const char *bitmap, Error **errp)
{
@@ -167,6 +168,11 @@ void qmp_nbd_server_add(const char *device, bool has_name, const char *name,
        return;
    }

    if (has_description && strlen(description) > NBD_MAX_STRING_SIZE) {
        error_setg(errp, "description '%s' too long", description);
        return;
    }

    if (nbd_export_find(name)) {
        error_setg(errp, "NBD server already has export named '%s'", name);
        return;
@@ -195,7 +201,8 @@ void qmp_nbd_server_add(const char *device, bool has_name, const char *name,
        writable = false;
    }

    exp = nbd_export_new(bs, 0, len, name, NULL, bitmap, !writable, !writable,
    exp = nbd_export_new(bs, 0, len, name, description, bitmap,
                         !writable, !writable,
                         NULL, false, on_eject_blk, errp);
    if (!exp) {
        goto out;
+2 −2
Original line number Diff line number Diff line
@@ -2351,7 +2351,7 @@ void hmp_nbd_server_start(Monitor *mon, const QDict *qdict)
            continue;
        }

        qmp_nbd_server_add(info->value->device, false, NULL,
        qmp_nbd_server_add(info->value->device, false, NULL, false, NULL,
                           true, writable, false, NULL, &local_err);

        if (local_err != NULL) {
@@ -2373,7 +2373,7 @@ void hmp_nbd_server_add(Monitor *mon, const QDict *qdict)
    bool writable = qdict_get_try_bool(qdict, "writable", false);
    Error *local_err = NULL;

    qmp_nbd_server_add(device, !!name, name, true, writable,
    qmp_nbd_server_add(device, !!name, name, false, NULL, true, writable,
                       false, NULL, &local_err);
    hmp_handle_error(mon, local_err);
}
+6 −3
Original line number Diff line number Diff line
@@ -250,9 +250,12 @@
# @name: Export name. If unspecified, the @device parameter is used as the
#        export name. (Since 2.12)
#
# @description: Free-form description of the export, up to 4096 bytes.
#               (Since 5.0)
#
# @writable: Whether clients should be able to write to the device via the
#     NBD connection (default false).

#
# @bitmap: Also export the dirty bitmap reachable from @device, so the
#          NBD client can use NBD_OPT_SET_META_CONTEXT with
#          "qemu:dirty-bitmap:NAME" to inspect the bitmap. (since 4.0)
@@ -263,8 +266,8 @@
# Since: 1.3.0
##
{ 'command': 'nbd-server-add',
  'data': {'device': 'str', '*name': 'str', '*writable': 'bool',
           '*bitmap': 'str' } }
  'data': {'device': 'str', '*name': 'str', '*description': 'str',
           '*writable': 'bool', '*bitmap': 'str' } }

##
# @NbdServerRemoveMode:
+1 −1
Original line number Diff line number Diff line
@@ -153,7 +153,7 @@ _send_qemu_cmd $QEMU_HANDLE '{"execute":"nbd-server-add",
  "bitmap":"b3"}}' "error" # Missing bitmap
_send_qemu_cmd $QEMU_HANDLE '{"execute":"nbd-server-add",
  "arguments":{"device":"n", "name":"n2", "writable":true,
  "bitmap":"b2"}}' "return"
  "description":"some text", "bitmap":"b2"}}' "return"
$QEMU_NBD_PROG -L -k "$SOCK_DIR/nbd"

echo
+4 −2
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@ exports available: 0
{"error": {"class": "GenericError", "desc": "Enabled bitmap 'b2' incompatible with readonly export"}}
{"execute":"nbd-server-add", "arguments":{"device":"n", "name":"n2", "bitmap":"b3"}}
{"error": {"class": "GenericError", "desc": "Bitmap 'b3' is not found"}}
{"execute":"nbd-server-add", "arguments":{"device":"n", "name":"n2", "writable":true, "bitmap":"b2"}}
{"execute":"nbd-server-add", "arguments":{"device":"n", "name":"n2", "writable":true, "description":"some text", "bitmap":"b2"}}
{"return": {}}
exports available: 2
 export: 'n'
@@ -63,6 +63,7 @@ exports available: 2
   base:allocation
   qemu:dirty-bitmap:b
 export: 'n2'
  description: some text
  size:  4194304
  flags: 0xced ( flush fua trim zeroes df cache fast-zero )
  min block: 1
@@ -130,7 +131,7 @@ exports available: 0
{"error": {"class": "GenericError", "desc": "Enabled bitmap 'b2' incompatible with readonly export"}}
{"execute":"nbd-server-add", "arguments":{"device":"n", "name":"n2", "bitmap":"b3"}}
{"error": {"class": "GenericError", "desc": "Bitmap 'b3' is not found"}}
{"execute":"nbd-server-add", "arguments":{"device":"n", "name":"n2", "writable":true, "bitmap":"b2"}}
{"execute":"nbd-server-add", "arguments":{"device":"n", "name":"n2", "writable":true, "description":"some text", "bitmap":"b2"}}
{"return": {}}
exports available: 2
 export: 'n'
@@ -143,6 +144,7 @@ exports available: 2
   base:allocation
   qemu:dirty-bitmap:b
 export: 'n2'
  description: some text
  size:  4194304
  flags: 0xced ( flush fua trim zeroes df cache fast-zero )
  min block: 1