aboutsummaryrefslogtreecommitdiff
path: root/qemu-storage-daemon.c
diff options
context:
space:
mode:
authorKevin Wolf <kwolf@redhat.com>2020-02-24 15:29:54 +0100
committerKevin Wolf <kwolf@redhat.com>2020-03-06 17:15:38 +0100
commit14837c6493d42f5f85d910935654725217a5770b (patch)
tree298530ab7af0c6c6002c00525262c5e58640a329 /qemu-storage-daemon.c
parent5a16818b45cbe2a35d58f5314209b09b753994d8 (diff)
qemu-storage-daemon: Add --blockdev option
This adds a --blockdev option to the storage daemon that works the same as the -blockdev option of the system emulator. In order to be able to link with blockdev.o, we also need to change stream.o from common-obj to block-obj, which is where all other block jobs already are. In contrast to the system emulator, qemu-storage-daemon options will be processed in the order they are given. The user needs to take care to refer to other objects only after defining them. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20200224143008.13362-7-kwolf@redhat.com> Acked-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'qemu-storage-daemon.c')
-rw-r--r--qemu-storage-daemon.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/qemu-storage-daemon.c b/qemu-storage-daemon.c
index fc4aef572b..c30caaf59e 100644
--- a/qemu-storage-daemon.c
+++ b/qemu-storage-daemon.c
@@ -31,6 +31,10 @@
#include "crypto/init.h"
#include "qapi/error.h"
+#include "qapi/qapi-visit-block-core.h"
+#include "qapi/qapi-commands-block-core.h"
+#include "qapi/qobject-input-visitor.h"
+
#include "qemu-common.h"
#include "qemu-version.h"
#include "qemu/config-file.h"
@@ -52,15 +56,27 @@ static void help(void)
" specify tracing options\n"
" -V, --version output version information and exit\n"
"\n"
+" --blockdev [driver=]<driver>[,node-name=<N>][,discard=ignore|unmap]\n"
+" [,cache.direct=on|off][,cache.no-flush=on|off]\n"
+" [,read-only=on|off][,auto-read-only=on|off]\n"
+" [,force-share=on|off][,detect-zeroes=on|off|unmap]\n"
+" [,driver specific parameters...]\n"
+" configure a block backend\n"
+"\n"
QEMU_HELP_BOTTOM "\n",
error_get_progname());
}
+enum {
+ OPTION_BLOCKDEV = 256,
+};
+
static void process_options(int argc, char *argv[])
{
int c;
static const struct option long_options[] = {
+ {"blockdev", required_argument, NULL, OPTION_BLOCKDEV},
{"help", no_argument, NULL, 'h'},
{"trace", required_argument, NULL, 'T'},
{"version", no_argument, NULL, 'V'},
@@ -90,6 +106,21 @@ static void process_options(int argc, char *argv[])
printf("qemu-storage-daemon version "
QEMU_FULL_VERSION "\n" QEMU_COPYRIGHT "\n");
exit(EXIT_SUCCESS);
+ case OPTION_BLOCKDEV:
+ {
+ Visitor *v;
+ BlockdevOptions *options;
+
+ v = qobject_input_visitor_new_str(optarg, "driver",
+ &error_fatal);
+
+ visit_type_BlockdevOptions(v, NULL, &options, &error_fatal);
+ visit_free(v);
+
+ qmp_blockdev_add(options, &error_fatal);
+ qapi_free_BlockdevOptions(options);
+ break;
+ }
default:
g_assert_not_reached();
}