From: Peter Krempa Date: Wed, 22 Nov 2023 13:32:48 +0000 (+0100) Subject: qemu: block: Absorb logic from qemuBlockReopenFormat to qemuBlockReopenAccess X-Git-Tag: v9.10.0-rc1~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=24b667eeed78d2df;p=thirdparty%2Flibvirt.git qemu: block: Absorb logic from qemuBlockReopenFormat to qemuBlockReopenAccess Move all the logic into the new function and remove the old one. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c index 6cc5f891c5..3d311b3fa0 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c @@ -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; }