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 <jfer...@redhat.com>
>> Reviewed-by: Erik Skultety <eskul...@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 <jto...@redhat.com>
>
> Jano
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list