]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: block: Absorb logic from qemuBlockReopenFormat to qemuBlockReopenAccess
authorPeter Krempa <pkrempa@redhat.com>
Wed, 22 Nov 2023 13:32:48 +0000 (14:32 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 27 Nov 2023 09:14:20 +0000 (10:14 +0100)
Move all the logic into the new function and remove the old one.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_block.c

index 6cc5f891c5fd04e4b7ea46f68772225c75f963ba..3d311b3fa0b772298441872cd81fca68edf26ca1 100644 (file)
@@ -3192,22 +3192,29 @@ qemuBlockReopenFormatMon(qemuMonitor *mon,
 
 
 /**
- * qemuBlockReopenFormat:
+ * qemuBlockReopenAccess:
  * @vm: domain object
  * @src: storage source to reopen
+ * @readonly: requested readonly mode
  * @asyncJob: qemu async job type
  *
- * Invokes the 'blockdev-reopen' command on the format layer of @src. This means
- * that @src must be already properly configured for the desired outcome. The
- * nodenames of @src are used to identify the specific image in qemu.
+ * Reopen @src image to ensure that it is in @readonly. Does nothing if it is
+ * already in the requested state.
+ *
+ * Callers must use qemuBlockReopenReadWrite/qemuBlockReopenReadOnly functions.
  */
 static int
-qemuBlockReopenFormat(virDomainObj *vm,
+qemuBlockReopenAccess(virDomainObj *vm,
                       virStorageSource *src,
+                      bool readonly,
                       virDomainAsyncJob asyncJob)
 {
     qemuDomainObjPrivate *priv = vm->privateData;
     int rc;
+    int ret = -1;
+
+    if (src->readonly == readonly)
+        return 0;
 
     /* If we are lacking the object here, qemu might have opened an image with
      * a node name unknown to us */
@@ -3217,48 +3224,23 @@ qemuBlockReopenFormat(virDomainObj *vm,
         return -1;
     }
 
+    src->readonly = readonly;
+    /* from now on all error paths must use 'goto cleanup' */
+
     if (qemuDomainObjEnterMonitorAsync(vm, asyncJob) < 0)
-        return -1;
+        goto cleanup;
 
     rc = qemuBlockReopenFormatMon(priv->mon, src);
 
     qemuDomainObjExitMonitor(vm);
     if (rc < 0)
-        return -1;
-
-    return 0;
-}
-
-
-/**
- * qemuBlockReopenAccess:
- * @vm: domain object
- * @src: storage source to reopen
- * @readonly: requested readonly mode
- * @asyncJob: qemu async job type
- *
- * Reopen @src image to ensure that it is in @readonly. Does nothing if it is
- * already in the requested state.
- *
- * Callers must use qemuBlockReopenReadWrite/qemuBlockReopenReadOnly functions.
- */
-
-static int
-qemuBlockReopenAccess(virDomainObj *vm,
-                      virStorageSource *src,
-                      bool readonly,
-                      virDomainAsyncJob asyncJob)
-{
-    if (src->readonly == readonly)
-        return 0;
+        goto cleanup;
 
-    src->readonly = readonly;
-    if (qemuBlockReopenFormat(vm, src, asyncJob) < 0) {
-        src->readonly = !readonly;
-        return -1;
-    }
+    ret = 0;
 
-    return 0;
+ cleanup:
+    src->readonly = !readonly;
+    return ret;
 }