All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>, Max Reitz <mreitz@redhat.com>
Subject: [Qemu-devel] [PATCH v4 33/38] blockdev: Convert drive_new() to Error
Date: Wed, 17 Oct 2018 10:26:57 +0200	[thread overview]
Message-ID: <20181017082702.5581-34-armbru@redhat.com> (raw)
In-Reply-To: <20181017082702.5581-1-armbru@redhat.com>

Calling error_report() from within a function that takes an Error **
argument is suspicious.  drive_new() calls error_report() even though
it can run within drive_init_func(), which takes an Error ** argument.
drive_init_func()'s caller main(), via qemu_opts_foreach(), is fine
with it, but clean it up anyway:

* Convert drive_new() to Error

* Update add_init_drive() to report the error received from
  drive_new()

* Make main() pass &error_fatal through qemu_opts_foreach(),
  drive_init_func() to drive_new()

* Make default_drive() pass &error_abort through qemu_opts_foreach(),
  drive_init_func() to drive_new()

Cc: Kevin Wolf <kwolf@redhat.com>
Cc: Max Reitz <mreitz@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
 blockdev.c                | 27 ++++++++++++++-------------
 device-hotplug.c          |  5 ++++-
 include/sysemu/blockdev.h |  3 ++-
 vl.c                      |  8 ++++----
 4 files changed, 24 insertions(+), 19 deletions(-)

diff --git a/blockdev.c b/blockdev.c
index a8755bd908..574adbcb7f 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -759,7 +759,8 @@ QemuOptsList qemu_legacy_drive_opts = {
     },
 };
 
-DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
+DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type,
+                     Error **errp)
 {
     const char *value;
     BlockBackend *blk;
@@ -808,7 +809,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
         qemu_opt_rename(all_opts, opt_renames[i].from, opt_renames[i].to,
                         &local_err);
         if (local_err) {
-            error_report_err(local_err);
+            error_propagate(errp, local_err);
             return NULL;
         }
     }
@@ -819,7 +820,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
         bool writethrough;
 
         if (bdrv_parse_cache_mode(value, &flags, &writethrough) != 0) {
-            error_report("invalid cache option");
+            error_setg(errp, "invalid cache option");
             return NULL;
         }
 
@@ -847,7 +848,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
                                    &error_abort);
     qemu_opts_absorb_qdict(legacy_opts, bs_opts, &local_err);
     if (local_err) {
-        error_report_err(local_err);
+        error_propagate(errp, local_err);
         goto fail;
     }
 
@@ -860,7 +861,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
             media = MEDIA_CDROM;
             read_only = true;
         } else {
-            error_report("'%s' invalid media", value);
+            error_setg(errp, "'%s' invalid media", value);
             goto fail;
         }
     }
@@ -885,7 +886,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
              type++) {
         }
         if (type == IF_COUNT) {
-            error_report("unsupported bus type '%s'", value);
+            error_setg(errp, "unsupported bus type '%s'", value);
             goto fail;
         }
     } else {
@@ -902,7 +903,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
 
     if (index != -1) {
         if (bus_id != 0 || unit_id != -1) {
-            error_report("index cannot be used with bus and unit");
+            error_setg(errp, "index cannot be used with bus and unit");
             goto fail;
         }
         bus_id = drive_index_to_bus_id(type, index);
@@ -921,13 +922,13 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
     }
 
     if (max_devs && unit_id >= max_devs) {
-        error_report("unit %d too big (max is %d)", unit_id, max_devs - 1);
+        error_setg(errp, "unit %d too big (max is %d)", unit_id, max_devs - 1);
         goto fail;
     }
 
     if (drive_get(type, bus_id, unit_id) != NULL) {
-        error_report("drive with bus=%d, unit=%d (index=%d) exists",
-                     bus_id, unit_id, index);
+        error_setg(errp, "drive with bus=%d, unit=%d (index=%d) exists",
+                   bus_id, unit_id, index);
         goto fail;
     }
 
@@ -970,7 +971,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
     if (werror != NULL) {
         if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO &&
             type != IF_NONE) {
-            error_report("werror is not supported by this bus type");
+            error_setg(errp, "werror is not supported by this bus type");
             goto fail;
         }
         qdict_put_str(bs_opts, "werror", werror);
@@ -980,7 +981,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
     if (rerror != NULL) {
         if (type != IF_IDE && type != IF_VIRTIO && type != IF_SCSI &&
             type != IF_NONE) {
-            error_report("rerror is not supported by this bus type");
+            error_setg(errp, "rerror is not supported by this bus type");
             goto fail;
         }
         qdict_put_str(bs_opts, "rerror", rerror);
@@ -991,7 +992,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
     bs_opts = NULL;
     if (!blk) {
         if (local_err) {
-            error_report_err(local_err);
+            error_propagate(errp, local_err);
         }
         goto fail;
     } else {
diff --git a/device-hotplug.c b/device-hotplug.c
index cd427e2c76..6090d5f1e9 100644
--- a/device-hotplug.c
+++ b/device-hotplug.c
@@ -28,6 +28,7 @@
 #include "sysemu/block-backend.h"
 #include "sysemu/blockdev.h"
 #include "qapi/qmp/qdict.h"
+#include "qapi/error.h"
 #include "qemu/config-file.h"
 #include "qemu/option.h"
 #include "sysemu/sysemu.h"
@@ -36,6 +37,7 @@
 
 static DriveInfo *add_init_drive(const char *optstr)
 {
+    Error *err = NULL;
     DriveInfo *dinfo;
     QemuOpts *opts;
     MachineClass *mc;
@@ -45,8 +47,9 @@ static DriveInfo *add_init_drive(const char *optstr)
         return NULL;
 
     mc = MACHINE_GET_CLASS(current_machine);
-    dinfo = drive_new(opts, mc->block_default_type);
+    dinfo = drive_new(opts, mc->block_default_type, &err);
     if (!dinfo) {
+        error_report_err(err);
         qemu_opts_del(opts);
         return NULL;
     }
diff --git a/include/sysemu/blockdev.h b/include/sysemu/blockdev.h
index 24954b94e0..d34c4920dc 100644
--- a/include/sysemu/blockdev.h
+++ b/include/sysemu/blockdev.h
@@ -54,7 +54,8 @@ DriveInfo *drive_get_next(BlockInterfaceType type);
 QemuOpts *drive_def(const char *optstr);
 QemuOpts *drive_add(BlockInterfaceType type, int index, const char *file,
                     const char *optstr);
-DriveInfo *drive_new(QemuOpts *arg, BlockInterfaceType block_default_type);
+DriveInfo *drive_new(QemuOpts *arg, BlockInterfaceType block_default_type,
+                     Error **errp);
 
 /* device-hotplug */
 
diff --git a/vl.c b/vl.c
index 65366b961e..22beca29d1 100644
--- a/vl.c
+++ b/vl.c
@@ -1129,7 +1129,7 @@ static int drive_init_func(void *opaque, QemuOpts *opts, Error **errp)
 {
     BlockInterfaceType *block_default_type = opaque;
 
-    return drive_new(opts, *block_default_type) == NULL;
+    return drive_new(opts, *block_default_type, errp) == NULL;
 }
 
 static int drive_enable_snapshot(void *opaque, QemuOpts *opts, Error **errp)
@@ -1155,8 +1155,7 @@ static void default_drive(int enable, int snapshot, BlockInterfaceType type,
         drive_enable_snapshot(NULL, opts, NULL);
     }
 
-    dinfo = drive_new(opts, type);
-    assert(dinfo);
+    dinfo = drive_new(opts, type, &error_abort);
     dinfo->is_default = true;
 
 }
@@ -4396,7 +4395,8 @@ int main(int argc, char **argv, char **envp)
                           NULL, NULL);
     }
     if (qemu_opts_foreach(qemu_find_opts("drive"), drive_init_func,
-                          &machine_class->block_default_type, NULL)) {
+                          &machine_class->block_default_type, &error_fatal)) {
+        /* We printed help */
         exit(1);
     }
 
-- 
2.17.1

  parent reply	other threads:[~2018-10-17  8:27 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-17  8:26 [Qemu-devel] [PATCH v4 00/38] Replace some unwise uses of error_report() & friends Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 01/38] error: Fix use of error_prepend() with &error_fatal, &error_abort Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 02/38] Use error_fatal to simplify obvious fatal errors (again) Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 03/38] block: Use warn_report() & friends to report warnings Markus Armbruster
2018-10-17 13:50   ` Kevin Wolf
2018-10-17 17:29     ` Markus Armbruster
2018-10-18 11:10       ` Kevin Wolf
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 04/38] cpus hw target: " Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 05/38] vfio: " Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 06/38] vfio: Clean up error reporting after previous commit Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 07/38] char: Use error_printf() to print help and such Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 08/38] 9pfs: Fix CLI parsing crash on error Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 09/38] pc: Fix machine property nvdimm-persistence error handling Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 10/38] ioapic: Fix error handling in realize() Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 11/38] smbios: Clean up error handling in smbios_add() Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 12/38] migration: Fix !replay_can_snapshot() error handling Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 13/38] l2tpv3: Improve -netdev/netdev_add/-net/... error reporting Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 14/38] net/socket: Fix invalid socket type error handling Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 15/38] numa: Fix QMP command set-numa-node " Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 16/38] xen/pt: Fix incomplete conversion to realize() Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 17/38] seccomp: Clean up error reporting in parse_sandbox() Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 18/38] vl: Clean up error reporting in parse_add_fd() Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 19/38] qom: Clean up error reporting in user_creatable_add_opts_foreach() Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 20/38] vl: Clean up error reporting in chardev_init_func() Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 21/38] vl: Clean up error reporting in machine_set_property() Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 22/38] vl: Clean up error reporting in mon_init_func() Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 23/38] vl: Clean up error reporting in parse_fw_cfg() Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 24/38] vl: Clean up error reporting in device_init_func() Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 25/38] ui/keymaps: Fix handling of erroneous include files Markus Armbruster
2018-10-19  6:49   ` Gerd Hoffmann
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 26/38] ui: Convert vnc_display_init(), init_keyboard_layout() to Error Markus Armbruster
2018-10-19  6:51   ` Gerd Hoffmann
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 27/38] vnc: Clean up error reporting in vnc_init_func() Markus Armbruster
2018-10-19  6:52   ` Gerd Hoffmann
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 28/38] numa: Clean up error reporting in parse_numa() Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 29/38] tpm: Clean up error reporting in tpm_init_tpmdev() Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 30/38] spice: Clean up error reporting in add_channel() Markus Armbruster
2018-10-19  6:53   ` Gerd Hoffmann
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 31/38] fsdev: Clean up error reporting in qemu_fsdev_add() Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 32/38] vl: Assert drive_new() does not fail in default_drive() Markus Armbruster
2018-10-17  8:26 ` Markus Armbruster [this message]
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 34/38] vl: Fix exit status for -drive format=help Markus Armbruster
2018-10-17  8:26 ` [Qemu-devel] [PATCH v4 35/38] vl: Simplify call of parse_name() Markus Armbruster
2018-10-17  8:27 ` [Qemu-devel] [PATCH v4 36/38] block: Clean up bdrv_img_create()'s error reporting Markus Armbruster
2018-10-17 13:47   ` Kevin Wolf
2018-10-17  8:27 ` [Qemu-devel] [PATCH v4 37/38] raw: Convert a warning to warn_report() Markus Armbruster
2018-10-17 13:45   ` Kevin Wolf
2018-10-17 17:34     ` Markus Armbruster
2018-10-19  9:37       ` Markus Armbruster
2018-10-17  8:27 ` [Qemu-devel] [PATCH v4 38/38] vpc: Fail open on bad header checksum Markus Armbruster
2018-10-17 13:10   ` Kevin Wolf
2018-10-17 17:34     ` Markus Armbruster

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181017082702.5581-34-armbru@redhat.com \
    --to=armbru@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.