vduse-blk: Add serial option
Add a 'serial' option to allow user to specify this value explicitly. And the default value is changed to an empty string as what we did in "hw/block/virtio-blk.c". Signed-off-by: Xie Yongji <xieyongji@bytedance.com> Message-Id: <20220614051532.92-6-xieyongji@bytedance.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
2866ddd121
commit
0862a087fd
@ -235,7 +235,7 @@ static int vduse_blk_exp_create(BlockExport *exp, BlockExportOptions *opts,
|
|||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
struct virtio_blk_config config = { 0 };
|
struct virtio_blk_config config = { 0 };
|
||||||
uint64_t features;
|
uint64_t features;
|
||||||
int i;
|
int i, ret;
|
||||||
|
|
||||||
if (vblk_opts->has_num_queues) {
|
if (vblk_opts->has_num_queues) {
|
||||||
num_queues = vblk_opts->num_queues;
|
num_queues = vblk_opts->num_queues;
|
||||||
@ -265,7 +265,8 @@ static int vduse_blk_exp_create(BlockExport *exp, BlockExportOptions *opts,
|
|||||||
}
|
}
|
||||||
vblk_exp->num_queues = num_queues;
|
vblk_exp->num_queues = num_queues;
|
||||||
vblk_exp->handler.blk = exp->blk;
|
vblk_exp->handler.blk = exp->blk;
|
||||||
vblk_exp->handler.serial = exp->id;
|
vblk_exp->handler.serial = g_strdup(vblk_opts->has_serial ?
|
||||||
|
vblk_opts->serial : "");
|
||||||
vblk_exp->handler.logical_block_size = logical_block_size;
|
vblk_exp->handler.logical_block_size = logical_block_size;
|
||||||
vblk_exp->handler.writable = opts->writable;
|
vblk_exp->handler.writable = opts->writable;
|
||||||
|
|
||||||
@ -306,16 +307,16 @@ static int vduse_blk_exp_create(BlockExport *exp, BlockExportOptions *opts,
|
|||||||
vblk_exp);
|
vblk_exp);
|
||||||
if (!vblk_exp->dev) {
|
if (!vblk_exp->dev) {
|
||||||
error_setg(errp, "failed to create vduse device");
|
error_setg(errp, "failed to create vduse device");
|
||||||
return -ENOMEM;
|
ret = -ENOMEM;
|
||||||
|
goto err_dev;
|
||||||
}
|
}
|
||||||
|
|
||||||
vblk_exp->recon_file = g_strdup_printf("%s/vduse-blk-%s",
|
vblk_exp->recon_file = g_strdup_printf("%s/vduse-blk-%s",
|
||||||
g_get_tmp_dir(), exp->id);
|
g_get_tmp_dir(), exp->id);
|
||||||
if (vduse_set_reconnect_log_file(vblk_exp->dev, vblk_exp->recon_file)) {
|
if (vduse_set_reconnect_log_file(vblk_exp->dev, vblk_exp->recon_file)) {
|
||||||
error_setg(errp, "failed to set reconnect log file");
|
error_setg(errp, "failed to set reconnect log file");
|
||||||
vduse_dev_destroy(vblk_exp->dev);
|
ret = -EINVAL;
|
||||||
g_free(vblk_exp->recon_file);
|
goto err;
|
||||||
return -EINVAL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < num_queues; i++) {
|
for (i = 0; i < num_queues; i++) {
|
||||||
@ -331,6 +332,12 @@ static int vduse_blk_exp_create(BlockExport *exp, BlockExportOptions *opts,
|
|||||||
blk_set_dev_ops(exp->blk, &vduse_block_ops, exp);
|
blk_set_dev_ops(exp->blk, &vduse_block_ops, exp);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
err:
|
||||||
|
vduse_dev_destroy(vblk_exp->dev);
|
||||||
|
g_free(vblk_exp->recon_file);
|
||||||
|
err_dev:
|
||||||
|
g_free(vblk_exp->handler.serial);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vduse_blk_exp_delete(BlockExport *exp)
|
static void vduse_blk_exp_delete(BlockExport *exp)
|
||||||
@ -346,6 +353,7 @@ static void vduse_blk_exp_delete(BlockExport *exp)
|
|||||||
unlink(vblk_exp->recon_file);
|
unlink(vblk_exp->recon_file);
|
||||||
}
|
}
|
||||||
g_free(vblk_exp->recon_file);
|
g_free(vblk_exp->recon_file);
|
||||||
|
g_free(vblk_exp->handler.serial);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vduse_blk_exp_request_shutdown(BlockExport *exp)
|
static void vduse_blk_exp_request_shutdown(BlockExport *exp)
|
||||||
|
@ -282,7 +282,7 @@ static int vu_blk_exp_create(BlockExport *exp, BlockExportOptions *opts,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
vexp->handler.blk = exp->blk;
|
vexp->handler.blk = exp->blk;
|
||||||
vexp->handler.serial = "vhost_user_blk";
|
vexp->handler.serial = g_strdup("vhost_user_blk");
|
||||||
vexp->handler.logical_block_size = logical_block_size;
|
vexp->handler.logical_block_size = logical_block_size;
|
||||||
vexp->handler.writable = opts->writable;
|
vexp->handler.writable = opts->writable;
|
||||||
|
|
||||||
@ -296,6 +296,7 @@ static int vu_blk_exp_create(BlockExport *exp, BlockExportOptions *opts,
|
|||||||
num_queues, &vu_blk_iface, errp)) {
|
num_queues, &vu_blk_iface, errp)) {
|
||||||
blk_remove_aio_context_notifier(exp->blk, blk_aio_attached,
|
blk_remove_aio_context_notifier(exp->blk, blk_aio_attached,
|
||||||
blk_aio_detach, vexp);
|
blk_aio_detach, vexp);
|
||||||
|
g_free(vexp->handler.serial);
|
||||||
return -EADDRNOTAVAIL;
|
return -EADDRNOTAVAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -308,6 +309,7 @@ static void vu_blk_exp_delete(BlockExport *exp)
|
|||||||
|
|
||||||
blk_remove_aio_context_notifier(exp->blk, blk_aio_attached, blk_aio_detach,
|
blk_remove_aio_context_notifier(exp->blk, blk_aio_attached, blk_aio_detach,
|
||||||
vexp);
|
vexp);
|
||||||
|
g_free(vexp->handler.serial);
|
||||||
}
|
}
|
||||||
|
|
||||||
const BlockExportDriver blk_exp_vhost_user_blk = {
|
const BlockExportDriver blk_exp_vhost_user_blk = {
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
BlockBackend *blk;
|
BlockBackend *blk;
|
||||||
const char *serial;
|
char *serial;
|
||||||
uint32_t logical_block_size;
|
uint32_t logical_block_size;
|
||||||
bool writable;
|
bool writable;
|
||||||
} VirtioBlkHandler;
|
} VirtioBlkHandler;
|
||||||
|
@ -77,7 +77,7 @@ Standard options:
|
|||||||
--export [type=]vhost-user-blk,id=<id>,node-name=<node-name>,addr.type=unix,addr.path=<socket-path>[,writable=on|off][,logical-block-size=<block-size>][,num-queues=<num-queues>]
|
--export [type=]vhost-user-blk,id=<id>,node-name=<node-name>,addr.type=unix,addr.path=<socket-path>[,writable=on|off][,logical-block-size=<block-size>][,num-queues=<num-queues>]
|
||||||
--export [type=]vhost-user-blk,id=<id>,node-name=<node-name>,addr.type=fd,addr.str=<fd>[,writable=on|off][,logical-block-size=<block-size>][,num-queues=<num-queues>]
|
--export [type=]vhost-user-blk,id=<id>,node-name=<node-name>,addr.type=fd,addr.str=<fd>[,writable=on|off][,logical-block-size=<block-size>][,num-queues=<num-queues>]
|
||||||
--export [type=]fuse,id=<id>,node-name=<node-name>,mountpoint=<file>[,growable=on|off][,writable=on|off][,allow-other=on|off|auto]
|
--export [type=]fuse,id=<id>,node-name=<node-name>,mountpoint=<file>[,growable=on|off][,writable=on|off][,allow-other=on|off|auto]
|
||||||
--export [type=]vduse-blk,id=<id>,node-name=<node-name>[,writable=on|off][,num-queues=<num-queues>][,queue-size=<queue-size>][,logical-block-size=<block-size>]
|
--export [type=]vduse-blk,id=<id>,node-name=<node-name>[,writable=on|off][,num-queues=<num-queues>][,queue-size=<queue-size>][,logical-block-size=<block-size>][,serial=<serial-number>]
|
||||||
|
|
||||||
is a block export definition. ``node-name`` is the block node that should be
|
is a block export definition. ``node-name`` is the block node that should be
|
||||||
exported. ``writable`` determines whether or not the export allows write
|
exported. ``writable`` determines whether or not the export allows write
|
||||||
|
@ -187,13 +187,15 @@
|
|||||||
# @queue-size: the size of virtqueue. Defaults to 256.
|
# @queue-size: the size of virtqueue. Defaults to 256.
|
||||||
# @logical-block-size: Logical block size in bytes. Range [512, PAGE_SIZE]
|
# @logical-block-size: Logical block size in bytes. Range [512, PAGE_SIZE]
|
||||||
# and must be power of 2. Defaults to 512 bytes.
|
# and must be power of 2. Defaults to 512 bytes.
|
||||||
|
# @serial: the serial number of virtio block device. Defaults to empty string.
|
||||||
#
|
#
|
||||||
# Since: 7.1
|
# Since: 7.1
|
||||||
##
|
##
|
||||||
{ 'struct': 'BlockExportOptionsVduseBlk',
|
{ 'struct': 'BlockExportOptionsVduseBlk',
|
||||||
'data': { '*num-queues': 'uint16',
|
'data': { '*num-queues': 'uint16',
|
||||||
'*queue-size': 'uint16',
|
'*queue-size': 'uint16',
|
||||||
'*logical-block-size': 'size'} }
|
'*logical-block-size': 'size',
|
||||||
|
'*serial': 'str' } }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @NbdServerAddOptions:
|
# @NbdServerAddOptions:
|
||||||
|
@ -126,6 +126,7 @@ static void help(void)
|
|||||||
" [,writable=on|off][,num-queues=<num-queues>]\n"
|
" [,writable=on|off][,num-queues=<num-queues>]\n"
|
||||||
" [,queue-size=<queue-size>]\n"
|
" [,queue-size=<queue-size>]\n"
|
||||||
" [,logical-block-size=<logical-block-size>]\n"
|
" [,logical-block-size=<logical-block-size>]\n"
|
||||||
|
" [,serial=<serial-number>]\n"
|
||||||
" export the specified block node as a vduse-blk\n"
|
" export the specified block node as a vduse-blk\n"
|
||||||
" device using the id as the VDUSE device name\n"
|
" device using the id as the VDUSE device name\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
Loading…
Reference in New Issue
Block a user