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 <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2023-11-22 14:32:48 +01:00
parent 214794c9c7
commit 24b667eeed

View File

@ -3191,45 +3191,6 @@ qemuBlockReopenFormatMon(qemuMonitor *mon,
} }
/**
* qemuBlockReopenFormat:
* @vm: domain object
* @src: storage source to reopen
* @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.
*/
static int
qemuBlockReopenFormat(virDomainObj *vm,
virStorageSource *src,
virDomainAsyncJob asyncJob)
{
qemuDomainObjPrivate *priv = vm->privateData;
int rc;
/* If we are lacking the object here, qemu might have opened an image with
* a node name unknown to us */
if (!src->backingStore) {
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("can't reopen image with unknown presence of backing store"));
return -1;
}
if (qemuDomainObjEnterMonitorAsync(vm, asyncJob) < 0)
return -1;
rc = qemuBlockReopenFormatMon(priv->mon, src);
qemuDomainObjExitMonitor(vm);
if (rc < 0)
return -1;
return 0;
}
/** /**
* qemuBlockReopenAccess: * qemuBlockReopenAccess:
* @vm: domain object * @vm: domain object
@ -3242,23 +3203,44 @@ qemuBlockReopenFormat(virDomainObj *vm,
* *
* Callers must use qemuBlockReopenReadWrite/qemuBlockReopenReadOnly functions. * Callers must use qemuBlockReopenReadWrite/qemuBlockReopenReadOnly functions.
*/ */
static int static int
qemuBlockReopenAccess(virDomainObj *vm, qemuBlockReopenAccess(virDomainObj *vm,
virStorageSource *src, virStorageSource *src,
bool readonly, bool readonly,
virDomainAsyncJob asyncJob) virDomainAsyncJob asyncJob)
{ {
qemuDomainObjPrivate *priv = vm->privateData;
int rc;
int ret = -1;
if (src->readonly == readonly) if (src->readonly == readonly)
return 0; return 0;
src->readonly = readonly; /* If we are lacking the object here, qemu might have opened an image with
if (qemuBlockReopenFormat(vm, src, asyncJob) < 0) { * a node name unknown to us */
src->readonly = !readonly; if (!src->backingStore) {
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("can't reopen image with unknown presence of backing store"));
return -1; return -1;
} }
return 0; src->readonly = readonly;
/* from now on all error paths must use 'goto cleanup' */
if (qemuDomainObjEnterMonitorAsync(vm, asyncJob) < 0)
goto cleanup;
rc = qemuBlockReopenFormatMon(priv->mon, src);
qemuDomainObjExitMonitor(vm);
if (rc < 0)
goto cleanup;
ret = 0;
cleanup:
src->readonly = !readonly;
return ret;
} }