From 3f48686faca1856d74c244b151da1d3a521ef967 Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Thu, 4 Apr 2019 17:04:43 +0200 Subject: [PATCH 1/2] block: Forward 'discard' to temporary overlay When bdrv_temp_snapshot_options() is called for snapshot=on, the 'discard' option in the options QDict hasn't been parsed and merged into the flags yet. So copy the dict entry to make sure that the temporary overlay enables discard when it was requested for the drive. Signed-off-by: Kevin Wolf Reviewed-by: Eric Blake Reviewed-by: Stefano Garzarella Reviewed-by: Alberto Garcia --- block.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/block.c b/block.c index 3050854528..16615bc876 100644 --- a/block.c +++ b/block.c @@ -950,8 +950,9 @@ static void bdrv_temp_snapshot_options(int *child_flags, QDict *child_options, qdict_set_default_str(child_options, BDRV_OPT_CACHE_DIRECT, "off"); qdict_set_default_str(child_options, BDRV_OPT_CACHE_NO_FLUSH, "on"); - /* Copy the read-only option from the parent */ + /* Copy the read-only and discard options from the parent */ qdict_copy_default(child_options, parent_options, BDRV_OPT_READ_ONLY); + qdict_copy_default(child_options, parent_options, BDRV_OPT_DISCARD); /* aio=native doesn't work for cache.direct=off, so disable it for the * temporary snapshot */ From ab63817119b03b95f7dce6fae036e6d063ad63fb Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Mon, 8 Apr 2019 17:30:03 +0200 Subject: [PATCH 2/2] hmp: Fix drive_add ... format=help crash drive_new() returns null without setting an error when it provided help. add_init_drive() assumes null means failure, and crashes trying to report a null error. Fixes: c4f26c9f37ce511e5fe629c21c180dc6eb7c5a25 Cc: qemu-stable@nongnu.org Signed-off-by: Markus Armbruster Reviewed-by: Dr. David Alan Gilbert Signed-off-by: Kevin Wolf --- device-hotplug.c | 2 +- tests/test-hmp.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/device-hotplug.c b/device-hotplug.c index 6090d5f1e9..6153259d71 100644 --- a/device-hotplug.c +++ b/device-hotplug.c @@ -48,7 +48,7 @@ static DriveInfo *add_init_drive(const char *optstr) mc = MACHINE_GET_CLASS(current_machine); dinfo = drive_new(opts, mc->block_default_type, &err); - if (!dinfo) { + if (err) { error_report_err(err); qemu_opts_del(opts); return NULL; diff --git a/tests/test-hmp.c b/tests/test-hmp.c index 8c49d2fdf1..54a01824dc 100644 --- a/tests/test-hmp.c +++ b/tests/test-hmp.c @@ -31,6 +31,7 @@ static const char *hmp_cmds[] = { "cpu 0", "device_add ?", "device_add usb-mouse,id=mouse1", + "drive_add ignored format=help", "mouse_button 7", "mouse_move 10 10", "mouse_button 0",