Commit 80fa43e7 authored by Eric Blake's avatar Eric Blake Committed by Kevin Wolf
Browse files

sheepdog: Add trivial backing_fmt support



Sheepdog already requires that if backing_file is present, that it be
another sheepdog image (see sd_co_create).  Meanwhile, we want to move
towards always being explicit about the backing format for other
drivers where it matters.  So for convenience, make qemu-img create -F
sheepdog work, while rejecting all other explicit formats (note that
this is only for QemuOpts usage; there is no change to the QAPI to
allow a format through -blockdev).

Signed-off-by: default avatarEric Blake <eblake@redhat.com>
Message-Id: <20200706203954.341758-4-eblake@redhat.com>
Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
parent 25956af3
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -2151,13 +2151,21 @@ static int coroutine_fn sd_co_create_opts(BlockDriver *drv,
                                          Error **errp)
{
    BlockdevCreateOptions *create_options = NULL;
    QDict *qdict, *location_qdict;
    QDict *qdict = NULL, *location_qdict;
    Visitor *v;
    char *redundancy;
    char *redundancy = NULL;
    Error *local_err = NULL;
    int ret;
    char *backing_fmt = NULL;

    redundancy = qemu_opt_get_del(opts, BLOCK_OPT_REDUNDANCY);
    backing_fmt = qemu_opt_get_del(opts, BLOCK_OPT_BACKING_FMT);

    if (backing_fmt && strcmp(backing_fmt, "sheepdog") != 0) {
        error_setg(errp, "backing_file must be a sheepdog image");
        ret = -EINVAL;
        goto fail;
    }

    qdict = qemu_opts_to_qdict(opts, NULL);
    qdict_put_str(qdict, "driver", "sheepdog");
@@ -2220,6 +2228,7 @@ fail:
    qapi_free_BlockdevCreateOptions(create_options);
    qobject_unref(qdict);
    g_free(redundancy);
    g_free(backing_fmt);
    return ret;
}

@@ -3177,6 +3186,11 @@ static QemuOptsList sd_create_opts = {
            .type = QEMU_OPT_STRING,
            .help = "File name of a base image"
        },
        {
            .name = BLOCK_OPT_BACKING_FMT,
            .type = QEMU_OPT_STRING,
            .help = "Must be 'sheepdog' if present",
        },
        {
            .name = BLOCK_OPT_PREALLOC,
            .type = QEMU_OPT_STRING,