[libvirt] [PATCH v2 11/32] storage: Use VIR_AUTOPTR(virCommand)

Ján Tomko jtomko at redhat.com
Mon Feb 11 12:33:40 UTC 2019


On Fri, Feb 08, 2019 at 01:37:05PM -0500, John Ferlan wrote:
>Let's make use of the auto __cleanup capabilities cleaning up any
>now unnecessary goto paths.
>
>Signed-off-by: John Ferlan <jferlan at redhat.com>
>Reviewed-by: Erik Skultety <eskultet at redhat.com>
>---
> src/storage/storage_backend_disk.c     |  85 +++++++++------------
> src/storage/storage_backend_fs.c       |  39 +++-------
> src/storage/storage_backend_logical.c  | 101 +++++++------------------
> src/storage/storage_backend_sheepdog.c |  59 ++++++---------
> src/storage/storage_backend_vstorage.c |  14 +---
> src/storage/storage_backend_zfs.c      |  47 +++---------
> src/storage/storage_driver.c           |   3 +-
> src/storage/storage_util.c             |  34 +++------
> src/util/virstoragefile.c              |  67 +++++++---------
> tests/storagepoolxml2argvtest.c        |   7 +-
> tests/storagevolxml2argvtest.c         |   6 +-
> tests/virstoragetest.c                 |   6 +-
> 12 files changed, 156 insertions(+), 312 deletions(-)
>
>@@ -502,51 +500,40 @@ virStorageBackendDiskBuildPool(virStoragePoolObjPtr pool,
>     virStoragePoolDefPtr def = virStoragePoolObjGetDef(pool);
>     int format = def->source.format;
>     const char *fmt;
>-    bool ok_to_mklabel = false;
>-    int ret = -1;
>-    virCommandPtr cmd = NULL;
>+    VIR_AUTOPTR(virCommand) cmd = NULL;
>
>     virCheckFlags(VIR_STORAGE_POOL_BUILD_OVERWRITE |
>-                  VIR_STORAGE_POOL_BUILD_NO_OVERWRITE, ret);
>+                  VIR_STORAGE_POOL_BUILD_NO_OVERWRITE, -1);
>
>-    VIR_EXCLUSIVE_FLAGS_GOTO(VIR_STORAGE_POOL_BUILD_OVERWRITE,
>-                             VIR_STORAGE_POOL_BUILD_NO_OVERWRITE,
>-                             error);
>+    VIR_EXCLUSIVE_FLAGS_RET(VIR_STORAGE_POOL_BUILD_OVERWRITE,
>+                            VIR_STORAGE_POOL_BUILD_NO_OVERWRITE,
>+                            -1);
>
>     fmt = virStoragePoolFormatDiskTypeToString(format);
>-    if (flags & VIR_STORAGE_POOL_BUILD_OVERWRITE) {
>-        ok_to_mklabel = true;
>-    } else {
>-        if (virStorageBackendDeviceIsEmpty(def->source.devices[0].path,
>-                                           fmt, true))
>-            ok_to_mklabel = true;
>-    }
>+    if (!(flags & VIR_STORAGE_POOL_BUILD_OVERWRITE) &&
>+        !(virStorageBackendDeviceIsEmpty(def->source.devices[0].path,
>+                                         fmt, true)))
>+        return -1;
>
>-    if (ok_to_mklabel) {
>-        if (virStorageBackendZeroPartitionTable(def->source.devices[0].path,
>-                                                1024 * 1024) < 0)
>-            goto error;
>+    if (virStorageBackendZeroPartitionTable(def->source.devices[0].path,
>+                                            1024 * 1024) < 0)
>+        return -1;
>
>-        /* eg parted /dev/sda mklabel --script msdos */
>-        if (format == VIR_STORAGE_POOL_DISK_UNKNOWN)
>-            format = def->source.format = VIR_STORAGE_POOL_DISK_DOS;
>-        if (format == VIR_STORAGE_POOL_DISK_DOS)
>-            fmt = "msdos";
>-        else
>-            fmt = virStoragePoolFormatDiskTypeToString(format);
>-
>-        cmd = virCommandNewArgList(PARTED,
>-                                   def->source.devices[0].path,
>-                                   "mklabel",
>-                                   "--script",
>-                                   fmt,
>-                                   NULL);
>-        ret = virCommandRun(cmd, NULL);
>-    }
>+    /* eg parted /dev/sda mklabel --script msdos */
>+    if (format == VIR_STORAGE_POOL_DISK_UNKNOWN)
>+        format = def->source.format = VIR_STORAGE_POOL_DISK_DOS;
>+    if (format == VIR_STORAGE_POOL_DISK_DOS)
>+        fmt = "msdos";
>+    else
>+        fmt = virStoragePoolFormatDiskTypeToString(format);
>
>- error:
>-    virCommandFree(cmd);
>-    return ret;
>+    cmd = virCommandNewArgList(PARTED,
>+                               def->source.devices[0].path,
>+                               "mklabel",
>+                               "--script",
>+                               fmt,
>+                               NULL);
>+    return virCommandRun(cmd, NULL);
> }

Apart from the usual mixing of the ret->goto changes with adding
AUTOFREE, this also removes the 'ok_to_mklabel' bool.
Those changes really should be separated.

>@@ -341,33 +332,30 @@ static int
> virStorageBackendSheepdogRefreshVol(virStoragePoolObjPtr pool,
>                                     virStorageVolDefPtr vol)
> {
>-    int ret;
>     char *output = NULL;
>     virStoragePoolDefPtr def = virStoragePoolObjGetDef(pool);
>-    virCommandPtr cmd = virCommandNewArgList(SHEEPDOGCLI, "vdi", "list", vol->name, "-r", NULL);
>+    VIR_AUTOPTR(virCommand) cmd = NULL;
>
>+    cmd = virCommandNewArgList(SHEEPDOGCLI, "vdi", "list", vol->name, "-r", NULL);
>     virStorageBackendSheepdogAddHostArg(cmd, pool);
>     virCommandSetOutputBuffer(cmd, &output);
>-    ret = virCommandRun(cmd, NULL);
>-
>-    if (ret < 0)
>-        goto cleanup;
>+    if (virCommandRun(cmd, NULL) < 0)
>+        return -1;
>
>-    if ((ret = virStorageBackendSheepdogParseVdiList(vol, output)) < 0)
>-        goto cleanup;
>+    if (virStorageBackendSheepdogParseVdiList(vol, output) < 0)
>+        return -1;
>
>     vol->type = VIR_STORAGE_VOL_NETWORK;
>
>     VIR_FREE(vol->key);
>     if (virAsprintf(&vol->key, "%s/%s",
>                     def->source.name, vol->name) < 0)
>-        goto cleanup;
>+        return -1;

Before, '0' from the virStorageBackendSheepdogParseVdiList would be
returned. While correct, it would look better in a separate patch.

>
>     VIR_FREE(vol->target.path);
>     ignore_value(VIR_STRDUP(vol->target.path, vol->name));
>- cleanup:
>-    virCommandFree(cmd);
>-    return ret;
>+
>+    return 0;
> }
>
>

To everything apart from virStorageBackendDiskBuildPool:
Reviewed-by: Ján Tomko <jtomko at redhat.com>

Jano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20190211/0e8b04b9/attachment-0001.sig>


More information about the libvir-list mailing list