Re: [PATCH] Rework qemuMigrationDstPrecreateDisk()

2021-02-09 Thread Jonathon Jongsma
On Sat,  6 Feb 2021 11:11:11 +0800
Yi Li  wrote:

> 'conn' vairable which are used only inside the func. Let's declare
> inside the func body to make that obvious.
> Use g_autofree to allow removal of 'cleanup:' and the 'ret' variable.

It may be worth referencing the commit that introduced this
inconsistency:
accdc0e7730739f398e392c23bc8380d3574a878


> 
> Signed-off-by: Yi Li 
> ---
>  src/qemu/qemu_migration.c | 68
> +++ 1 file changed, 26
> insertions(+), 42 deletions(-)
> 
> diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> index f44d31c971..6bb0677f86 100644
> --- a/src/qemu/qemu_migration.c
> +++ b/src/qemu/qemu_migration.c
> @@ -169,15 +169,15 @@
> qemuMigrationSrcRestoreDomainState(virQEMUDriverPtr driver,
> virDomainObjPtr vm) 
>  static int
> -qemuMigrationDstPrecreateDisk(virConnectPtr *conn,
> -  virDomainDiskDefPtr disk,
> +qemuMigrationDstPrecreateDisk(virDomainDiskDefPtr disk,
>unsigned long long capacity)
>  {
> -int ret = -1;
> -virStoragePoolPtr pool = NULL;
> -virStorageVolPtr vol = NULL;
> -char *volName = NULL, *basePath = NULL;
> -char *volStr = NULL;
> +g_autoptr(virConnect) conn = NULL;
> +g_autoptr(virStoragePool) pool = NULL;
> +g_autoptr(virStorageVol) vol = NULL;
> +char *volName = NULL;
> +g_autofree char *basePath = NULL;
> +g_autofree char *volStr = NULL;


Personally, I feel that this commit is doing a bit too much. I'd prefer
to split out all of this auto pointer refactoring that is unrelated to
the 'conn' argument into a separate preparatory commit. 


>  g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
>  const char *format = NULL;
>  unsigned int flags = 0;
> @@ -198,32 +198,28 @@ qemuMigrationDstPrecreateDisk(virConnectPtr
> *conn, virReportError(VIR_ERR_INVALID_ARG,
> _("malformed disk path: %s"),
> disk->src->path);
> -goto cleanup;
> +return -1;
>  }
>  
>  *volName = '\0';
>  volName++;
>  
> -if (!*conn) {
> -if (!(*conn = virGetConnectStorage()))
> -goto cleanup;
> -}
> +if (!(conn = virGetConnectStorage()))
> +return -1;
>  
> -if (!(pool = virStoragePoolLookupByTargetPath(*conn,
> basePath)))
> -goto cleanup;
> +if (!(pool = virStoragePoolLookupByTargetPath(conn,
> basePath)))
> +return -1;
>  format = virStorageFileFormatTypeToString(disk->src->format);
>  if (disk->src->format == VIR_STORAGE_FILE_QCOW2)
>  flags |= VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA;
>  break;
>  
>  case VIR_STORAGE_TYPE_VOLUME:
> -if (!*conn) {
> -if (!(*conn = virGetConnectStorage()))
> -goto cleanup;
> -}
> +if (!(conn = virGetConnectStorage()))
> +return -1;
>  
> -if (!(pool = virStoragePoolLookupByName(*conn,
> disk->src->srcpool->pool)))
> -goto cleanup;
> +if (!(pool = virStoragePoolLookupByName(conn,
> disk->src->srcpool->pool)))
> +return -1;
>  format = virStorageFileFormatTypeToString(disk->src->format);
>  volName = disk->src->srcpool->volume;
>  if (disk->src->format == VIR_STORAGE_FILE_QCOW2)
> @@ -245,13 +241,13 @@ qemuMigrationDstPrecreateDisk(virConnectPtr
> *conn, _("cannot precreate storage for disk type '%s'"),
> virStorageTypeToString(disk->src->type));
>  goto cleanup;
> +return -1;

^ This line doesn't appear to be reachable. It looks like you
forgot to remove the goto?

>  }
>  
>  if ((vol = virStorageVolLookupByName(pool, volName))) {
>  VIR_DEBUG("Skipping creation of already existing volume of
> name '%s'", volName);
> -ret = 0;
> -goto cleanup;
> +return 0;
>  }
>  
>  virBufferAddLit(, "\n");
> @@ -269,19 +265,13 @@ qemuMigrationDstPrecreateDisk(virConnectPtr
> *conn, if (!(volStr = virBufferContentAndReset())) {
>  virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> _("unable to create volume XML"));
> -goto cleanup;
> +return -1;
>  }
>  
>  if (!(vol = virStorageVolCreateXML(pool, volStr, flags)))
> -goto cleanup;
> +return -1;
>  
> -ret = 0;
> - cleanup:
> -VIR_FREE(basePath);
> -VIR_FREE(volStr);
> -virObjectUnref(vol);
> -virObjectUnref(pool);
> -return ret;
> +return 0;
>  }
>  
>  static bool
> @@ -313,9 +303,7 @@ qemuMigrationDstPrecreateStorage(virDomainObjPtr
> vm, const char **migrate_disks,
>   bool incremental)
>  {
> -int ret = -1;
>  size_t i = 0;
> -virConnectPtr conn = NULL;
>  
>  if (!nbd || !nbd->ndisks)
>  return 0;
> @@ -332,7 +320,7 @@ 

[PATCH] Rework qemuMigrationDstPrecreateDisk()

2021-02-05 Thread Yi Li
'conn' vairable which are used only inside the func. Let's declare
inside the func body to make that obvious.
Use g_autofree to allow removal of 'cleanup:' and the 'ret' variable.

Signed-off-by: Yi Li 
---
 src/qemu/qemu_migration.c | 68 +++
 1 file changed, 26 insertions(+), 42 deletions(-)

diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index f44d31c971..6bb0677f86 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -169,15 +169,15 @@ qemuMigrationSrcRestoreDomainState(virQEMUDriverPtr 
driver, virDomainObjPtr vm)
 
 
 static int
-qemuMigrationDstPrecreateDisk(virConnectPtr *conn,
-  virDomainDiskDefPtr disk,
+qemuMigrationDstPrecreateDisk(virDomainDiskDefPtr disk,
   unsigned long long capacity)
 {
-int ret = -1;
-virStoragePoolPtr pool = NULL;
-virStorageVolPtr vol = NULL;
-char *volName = NULL, *basePath = NULL;
-char *volStr = NULL;
+g_autoptr(virConnect) conn = NULL;
+g_autoptr(virStoragePool) pool = NULL;
+g_autoptr(virStorageVol) vol = NULL;
+char *volName = NULL;
+g_autofree char *basePath = NULL;
+g_autofree char *volStr = NULL;
 g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
 const char *format = NULL;
 unsigned int flags = 0;
@@ -198,32 +198,28 @@ qemuMigrationDstPrecreateDisk(virConnectPtr *conn,
 virReportError(VIR_ERR_INVALID_ARG,
_("malformed disk path: %s"),
disk->src->path);
-goto cleanup;
+return -1;
 }
 
 *volName = '\0';
 volName++;
 
-if (!*conn) {
-if (!(*conn = virGetConnectStorage()))
-goto cleanup;
-}
+if (!(conn = virGetConnectStorage()))
+return -1;
 
-if (!(pool = virStoragePoolLookupByTargetPath(*conn, basePath)))
-goto cleanup;
+if (!(pool = virStoragePoolLookupByTargetPath(conn, basePath)))
+return -1;
 format = virStorageFileFormatTypeToString(disk->src->format);
 if (disk->src->format == VIR_STORAGE_FILE_QCOW2)
 flags |= VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA;
 break;
 
 case VIR_STORAGE_TYPE_VOLUME:
-if (!*conn) {
-if (!(*conn = virGetConnectStorage()))
-goto cleanup;
-}
+if (!(conn = virGetConnectStorage()))
+return -1;
 
-if (!(pool = virStoragePoolLookupByName(*conn, 
disk->src->srcpool->pool)))
-goto cleanup;
+if (!(pool = virStoragePoolLookupByName(conn, 
disk->src->srcpool->pool)))
+return -1;
 format = virStorageFileFormatTypeToString(disk->src->format);
 volName = disk->src->srcpool->volume;
 if (disk->src->format == VIR_STORAGE_FILE_QCOW2)
@@ -245,13 +241,13 @@ qemuMigrationDstPrecreateDisk(virConnectPtr *conn,
_("cannot precreate storage for disk type '%s'"),
virStorageTypeToString(disk->src->type));
 goto cleanup;
+return -1;
 }
 
 if ((vol = virStorageVolLookupByName(pool, volName))) {
 VIR_DEBUG("Skipping creation of already existing volume of name '%s'",
   volName);
-ret = 0;
-goto cleanup;
+return 0;
 }
 
 virBufferAddLit(, "\n");
@@ -269,19 +265,13 @@ qemuMigrationDstPrecreateDisk(virConnectPtr *conn,
 if (!(volStr = virBufferContentAndReset())) {
 virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("unable to create volume XML"));
-goto cleanup;
+return -1;
 }
 
 if (!(vol = virStorageVolCreateXML(pool, volStr, flags)))
-goto cleanup;
+return -1;
 
-ret = 0;
- cleanup:
-VIR_FREE(basePath);
-VIR_FREE(volStr);
-virObjectUnref(vol);
-virObjectUnref(pool);
-return ret;
+return 0;
 }
 
 static bool
@@ -313,9 +303,7 @@ qemuMigrationDstPrecreateStorage(virDomainObjPtr vm,
  const char **migrate_disks,
  bool incremental)
 {
-int ret = -1;
 size_t i = 0;
-virConnectPtr conn = NULL;
 
 if (!nbd || !nbd->ndisks)
 return 0;
@@ -332,7 +320,7 @@ qemuMigrationDstPrecreateStorage(virDomainObjPtr vm,
 virReportError(VIR_ERR_INTERNAL_ERROR,
_("unable to find disk by target: %s"),
nbd->disks[i].target);
-goto cleanup;
+return -1;
 }
 
 if (disk->src->type == VIR_STORAGE_TYPE_NVME) {
@@ -352,20 +340,16 @@ qemuMigrationDstPrecreateStorage(virDomainObjPtr vm,
 virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("pre-creation of storage targets for incremental "
  "storage migration is not supported"));
-