On 2/11/19 7:33 AM, Ján Tomko wrote:
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(a)redhat.com>
> Reviewed-by: Erik Skultety <eskultet(a)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.
Just so it's clear what's being requested, does this mean taking the
current code and adding the:
+ if (!(flags & VIR_STORAGE_POOL_BUILD_OVERWRITE) &&
+ !(virStorageBackendDeviceIsEmpty(def->source.devices[0].path,
+ fmt, true)))
+ goto error;
and then reformatting the rest inline as is done here (more or less)?
John
> @@ -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(a)redhat.com>
Jano