blockdev-nbd: Boxed argument type for nbd-server-add
Move the arguments of nbd-server-add to a new struct BlockExportNbd and convert the command to 'boxed': true. This makes it easier to share code with the storage daemon. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20200224143008.13362-11-kwolf@redhat.com> Acked-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
eed8b69178
commit
c62d24e906
@ -148,10 +148,7 @@ void qmp_nbd_server_start(SocketAddressLegacy *addr,
|
|||||||
qapi_free_SocketAddress(addr_flat);
|
qapi_free_SocketAddress(addr_flat);
|
||||||
}
|
}
|
||||||
|
|
||||||
void qmp_nbd_server_add(const char *device, bool has_name, const char *name,
|
void qmp_nbd_server_add(BlockExportNbd *arg, Error **errp)
|
||||||
bool has_description, const char *description,
|
|
||||||
bool has_writable, bool writable,
|
|
||||||
bool has_bitmap, const char *bitmap, Error **errp)
|
|
||||||
{
|
{
|
||||||
BlockDriverState *bs = NULL;
|
BlockDriverState *bs = NULL;
|
||||||
BlockBackend *on_eject_blk;
|
BlockBackend *on_eject_blk;
|
||||||
@ -164,28 +161,28 @@ void qmp_nbd_server_add(const char *device, bool has_name, const char *name,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!has_name) {
|
if (!arg->has_name) {
|
||||||
name = device;
|
arg->name = arg->device;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strlen(name) > NBD_MAX_STRING_SIZE) {
|
if (strlen(arg->name) > NBD_MAX_STRING_SIZE) {
|
||||||
error_setg(errp, "export name '%s' too long", name);
|
error_setg(errp, "export name '%s' too long", arg->name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (has_description && strlen(description) > NBD_MAX_STRING_SIZE) {
|
if (arg->description && strlen(arg->description) > NBD_MAX_STRING_SIZE) {
|
||||||
error_setg(errp, "description '%s' too long", description);
|
error_setg(errp, "description '%s' too long", arg->description);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nbd_export_find(name)) {
|
if (nbd_export_find(arg->name)) {
|
||||||
error_setg(errp, "NBD server already has export named '%s'", name);
|
error_setg(errp, "NBD server already has export named '%s'", arg->name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
on_eject_blk = blk_by_name(device);
|
on_eject_blk = blk_by_name(arg->device);
|
||||||
|
|
||||||
bs = bdrv_lookup_bs(device, device, errp);
|
bs = bdrv_lookup_bs(arg->device, arg->device, errp);
|
||||||
if (!bs) {
|
if (!bs) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -199,15 +196,15 @@ void qmp_nbd_server_add(const char *device, bool has_name, const char *name,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!has_writable) {
|
if (!arg->has_writable) {
|
||||||
writable = false;
|
arg->writable = false;
|
||||||
}
|
}
|
||||||
if (bdrv_is_read_only(bs)) {
|
if (bdrv_is_read_only(bs)) {
|
||||||
writable = false;
|
arg->writable = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
exp = nbd_export_new(bs, 0, len, name, description, bitmap,
|
exp = nbd_export_new(bs, 0, len, arg->name, arg->description, arg->bitmap,
|
||||||
!writable, !writable,
|
!arg->writable, !arg->writable,
|
||||||
NULL, false, on_eject_blk, errp);
|
NULL, false, on_eject_blk, errp);
|
||||||
if (!exp) {
|
if (!exp) {
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -2341,6 +2341,7 @@ void hmp_nbd_server_start(Monitor *mon, const QDict *qdict)
|
|||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
BlockInfoList *block_list, *info;
|
BlockInfoList *block_list, *info;
|
||||||
SocketAddress *addr;
|
SocketAddress *addr;
|
||||||
|
BlockExportNbd export;
|
||||||
|
|
||||||
if (writable && !all) {
|
if (writable && !all) {
|
||||||
error_setg(&local_err, "-w only valid together with -a");
|
error_setg(&local_err, "-w only valid together with -a");
|
||||||
@ -2373,8 +2374,13 @@ void hmp_nbd_server_start(Monitor *mon, const QDict *qdict)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
qmp_nbd_server_add(info->value->device, false, NULL, false, NULL,
|
export = (BlockExportNbd) {
|
||||||
true, writable, false, NULL, &local_err);
|
.device = info->value->device,
|
||||||
|
.has_writable = true,
|
||||||
|
.writable = writable,
|
||||||
|
};
|
||||||
|
|
||||||
|
qmp_nbd_server_add(&export, &local_err);
|
||||||
|
|
||||||
if (local_err != NULL) {
|
if (local_err != NULL) {
|
||||||
qmp_nbd_server_stop(NULL);
|
qmp_nbd_server_stop(NULL);
|
||||||
@ -2395,8 +2401,15 @@ void hmp_nbd_server_add(Monitor *mon, const QDict *qdict)
|
|||||||
bool writable = qdict_get_try_bool(qdict, "writable", false);
|
bool writable = qdict_get_try_bool(qdict, "writable", false);
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
|
||||||
qmp_nbd_server_add(device, !!name, name, false, NULL, true, writable,
|
BlockExportNbd export = {
|
||||||
false, NULL, &local_err);
|
.device = (char *) device,
|
||||||
|
.has_name = !!name,
|
||||||
|
.name = (char *) name,
|
||||||
|
.has_writable = true,
|
||||||
|
.writable = writable,
|
||||||
|
};
|
||||||
|
|
||||||
|
qmp_nbd_server_add(&export, &local_err);
|
||||||
hmp_handle_error(mon, local_err);
|
hmp_handle_error(mon, local_err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5112,9 +5112,9 @@
|
|||||||
'*tls-authz': 'str'} }
|
'*tls-authz': 'str'} }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @nbd-server-add:
|
# @BlockExportNbd:
|
||||||
#
|
#
|
||||||
# Export a block node to QEMU's embedded NBD server.
|
# An NBD block export.
|
||||||
#
|
#
|
||||||
# @device: The device name or node name of the node to be exported
|
# @device: The device name or node name of the node to be exported
|
||||||
#
|
#
|
||||||
@ -5131,14 +5131,24 @@
|
|||||||
# NBD client can use NBD_OPT_SET_META_CONTEXT with
|
# NBD client can use NBD_OPT_SET_META_CONTEXT with
|
||||||
# "qemu:dirty-bitmap:NAME" to inspect the bitmap. (since 4.0)
|
# "qemu:dirty-bitmap:NAME" to inspect the bitmap. (since 4.0)
|
||||||
#
|
#
|
||||||
|
# Since: 5.0
|
||||||
|
##
|
||||||
|
{ 'struct': 'BlockExportNbd',
|
||||||
|
'data': {'device': 'str', '*name': 'str', '*description': 'str',
|
||||||
|
'*writable': 'bool', '*bitmap': 'str' } }
|
||||||
|
|
||||||
|
##
|
||||||
|
# @nbd-server-add:
|
||||||
|
#
|
||||||
|
# Export a block node to QEMU's embedded NBD server.
|
||||||
|
#
|
||||||
# Returns: error if the server is not running, or export with the same name
|
# Returns: error if the server is not running, or export with the same name
|
||||||
# already exists.
|
# already exists.
|
||||||
#
|
#
|
||||||
# Since: 1.3.0
|
# Since: 1.3.0
|
||||||
##
|
##
|
||||||
{ 'command': 'nbd-server-add',
|
{ 'command': 'nbd-server-add',
|
||||||
'data': {'device': 'str', '*name': 'str', '*description': 'str',
|
'data': 'BlockExportNbd', 'boxed': true }
|
||||||
'*writable': 'bool', '*bitmap': 'str' } }
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# @NbdServerRemoveMode:
|
# @NbdServerRemoveMode:
|
||||||
|
Loading…
Reference in New Issue
Block a user