Commit b35ee7fb authored by Kevin Wolf's avatar Kevin Wolf

blkdebug: Make required alignment configurable

The new 'align' option of blkdebug can be used in order to emulate
backends with a required 4k alignment on hosts which only really require
512 byte alignment.
Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
parent 2c9880c4
...@@ -364,6 +364,11 @@ static QemuOptsList runtime_opts = { ...@@ -364,6 +364,11 @@ static QemuOptsList runtime_opts = {
.type = QEMU_OPT_STRING, .type = QEMU_OPT_STRING,
.help = "[internal use only, will be removed]", .help = "[internal use only, will be removed]",
}, },
{
.name = "align",
.type = QEMU_OPT_SIZE,
.help = "Required alignment in bytes",
},
{ /* end of list */ } { /* end of list */ }
}, },
}; };
...@@ -375,6 +380,7 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags, ...@@ -375,6 +380,7 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags,
QemuOpts *opts; QemuOpts *opts;
Error *local_err = NULL; Error *local_err = NULL;
const char *config; const char *config;
uint64_t align;
int ret; int ret;
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort); opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
...@@ -403,6 +409,16 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags, ...@@ -403,6 +409,16 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags,
goto fail; goto fail;
} }
/* Set request alignment */
align = qemu_opt_get_size(opts, "align", bs->request_alignment);
if (align > 0 && align < INT_MAX && !(align & (align - 1))) {
bs->request_alignment = align;
} else {
error_setg(errp, "Invalid alignment");
ret = -EINVAL;
goto fail;
}
ret = 0; ret = 0;
fail: fail:
qemu_opts_del(opts); qemu_opts_del(opts);
......
...@@ -4321,6 +4321,8 @@ ...@@ -4321,6 +4321,8 @@
# #
# @config: #optional filename of the configuration file # @config: #optional filename of the configuration file
# #
# @align: #optional required alignment for requests in bytes
#
# @inject-error: #optional array of error injection descriptions # @inject-error: #optional array of error injection descriptions
# #
# @set-state: #optional array of state-change descriptions # @set-state: #optional array of state-change descriptions
...@@ -4330,6 +4332,7 @@ ...@@ -4330,6 +4332,7 @@
{ 'type': 'BlockdevOptionsBlkdebug', { 'type': 'BlockdevOptionsBlkdebug',
'data': { 'image': 'BlockdevRef', 'data': { 'image': 'BlockdevRef',
'*config': 'str', '*config': 'str',
'*align': 'int',
'*inject-error': ['BlkdebugInjectErrorOptions'], '*inject-error': ['BlkdebugInjectErrorOptions'],
'*set-state': ['BlkdebugSetStateOptions'] } } '*set-state': ['BlkdebugSetStateOptions'] } }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment