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

block: Allow node name for 'qemu-io' HMP command



When using a node name, create a temporary BlockBackend that is used to
run the qemu-io command.

Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
parent c0088d79
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -1923,11 +1923,22 @@ void hmp_chardev_remove(Monitor *mon, const QDict *qdict)
void hmp_qemu_io(Monitor *mon, const QDict *qdict)
{
    BlockBackend *blk;
    BlockBackend *local_blk = NULL;
    const char* device = qdict_get_str(qdict, "device");
    const char* command = qdict_get_str(qdict, "command");
    Error *err = NULL;

    blk = blk_by_name(device);
    if (!blk) {
        BlockDriverState *bs = bdrv_lookup_bs(NULL, device, &err);
        if (bs) {
            blk = local_blk = blk_new();
            blk_insert_bs(blk, bs);
        } else {
            goto fail;
        }
    }

    if (blk) {
        AioContext *aio_context = blk_get_aio_context(blk);
        aio_context_acquire(aio_context);
@@ -1940,6 +1951,8 @@ void hmp_qemu_io(Monitor *mon, const QDict *qdict)
                  "Device '%s' not found", device);
    }

fail:
    blk_unref(local_blk);
    hmp_handle_error(mon, &err);
}