Commit b35ee7fb authored by Kevin Wolf's avatar Kevin Wolf
Browse files

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
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -364,6 +364,11 @@ static QemuOptsList runtime_opts = {
            .type = QEMU_OPT_STRING,
            .help = "[internal use only, will be removed]",
        },
        {
            .name = "align",
            .type = QEMU_OPT_SIZE,
            .help = "Required alignment in bytes",
        },
        { /* end of list */ }
    },
};
@@ -375,6 +380,7 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags,
    QemuOpts *opts;
    Error *local_err = NULL;
    const char *config;
    uint64_t align;
    int ret;

    opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
@@ -403,6 +409,16 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags,
        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;
fail:
    qemu_opts_del(opts);
+3 −0
Original line number Diff line number Diff line
@@ -4321,6 +4321,8 @@
#
# @config:          #optional filename of the configuration file
#
# @align:           #optional required alignment for requests in bytes
#
# @inject-error:    #optional array of error injection descriptions
#
# @set-state:       #optional array of state-change descriptions
@@ -4330,6 +4332,7 @@
{ 'type': 'BlockdevOptionsBlkdebug',
  'data': { 'image': 'BlockdevRef',
            '*config': 'str',
            '*align': 'int',
            '*inject-error': ['BlkdebugInjectErrorOptions'],
            '*set-state': ['BlkdebugSetStateOptions'] } }