[PATCH 30/80] qemu: process: Remove pre-blockdev code paths

Peter Krempa pkrempa at redhat.com
Tue Jul 26 14:37:08 UTC 2022


Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/qemu/qemu_process.c | 182 +---------------------------------------
 1 file changed, 2 insertions(+), 180 deletions(-)

diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 980e06ce79..6083ee10d8 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -873,50 +873,6 @@ qemuProcessHandleIOError(qemuMonitor *mon G_GNUC_UNUSED,
     virObjectEventStateQueue(driver->domainEventState, lifecycleEvent);
 }

-static void
-qemuProcessHandleBlockJob(qemuMonitor *mon G_GNUC_UNUSED,
-                          virDomainObj *vm,
-                          const char *diskAlias,
-                          int type,
-                          int status,
-                          const char *error)
-{
-    qemuDomainObjPrivate *priv;
-    virDomainDiskDef *disk;
-    g_autoptr(qemuBlockJobData) job = NULL;
-
-    virObjectLock(vm);
-
-    priv = vm->privateData;
-
-    /* with QEMU_CAPS_BLOCKDEV we handle block job events via JOB_STATUS_CHANGE */
-    if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV))
-        goto cleanup;
-
-    VIR_DEBUG("Block job for device %s (domain: %p,%s) type %d status %d",
-              diskAlias, vm, vm->def->name, type, status);
-
-    if (!(disk = qemuProcessFindDomainDiskByAliasOrQOM(vm, diskAlias, NULL)))
-        goto cleanup;
-
-    job = qemuBlockJobDiskGetJob(disk);
-
-    if (job && job->synchronous) {
-        /* We have a SYNC API waiting for this event, dispatch it back */
-        job->newstate = status;
-        VIR_FREE(job->errmsg);
-        job->errmsg = g_strdup(error);
-        virDomainObjBroadcast(vm);
-    } else {
-        /* there is no waiting SYNC API, dispatch the update to a thread */
-        qemuProcessEventSubmit(vm, QEMU_PROCESS_EVENT_BLOCK_JOB,
-                               type, status, g_strdup(diskAlias));
-    }
-
- cleanup:
-    virObjectUnlock(vm);
-}
-

 static void
 qemuProcessHandleJobStatusChange(qemuMonitor *mon G_GNUC_UNUSED,
@@ -935,11 +891,6 @@ qemuProcessHandleJobStatusChange(qemuMonitor *mon G_GNUC_UNUSED,
               jobname, vm, vm->def->name,
               qemuMonitorJobStatusTypeToString(status), status);

-    if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV)) {
-        VIR_DEBUG("job '%s' handled by old blockjob handler", jobname);
-        goto cleanup;
-    }
-
     if ((jobnewstate = qemuBlockjobConvertMonitorStatus(status)) == QEMU_BLOCKJOB_STATE_LAST)
         goto cleanup;

@@ -1822,7 +1773,6 @@ static qemuMonitorCallbacks monitorCallbacks = {
     .domainWatchdog = qemuProcessHandleWatchdog,
     .domainIOError = qemuProcessHandleIOError,
     .domainGraphics = qemuProcessHandleGraphics,
-    .domainBlockJob = qemuProcessHandleBlockJob,
     .jobStatusChange = qemuProcessHandleJobStatusChange,
     .domainTrayChange = qemuProcessHandleTrayChange,
     .domainPMWakeup = qemuProcessHandlePMWakeup,
@@ -6834,10 +6784,8 @@ qemuProcessPrepareHostStorage(virQEMUDriver *driver,
                               virDomainObj *vm,
                               unsigned int flags)
 {
-    qemuDomainObjPrivate *priv = vm->privateData;
     size_t i;
     bool cold_boot = flags & VIR_QEMU_PROCESS_START_COLD;
-    bool blockdev = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV);

     for (i = vm->def->ndisks; i > 0; i--) {
         size_t idx = i - 1;
@@ -6847,7 +6795,7 @@ qemuProcessPrepareHostStorage(virQEMUDriver *driver,
             continue;

         /* backing chain needs to be redetected if we aren't using blockdev */
-        if (!blockdev || qemuDiskBusIsSD(disk->bus))
+        if (qemuDiskBusIsSD(disk->bus))
             virStorageSourceBackingStoreClear(disk->src);

         /*
@@ -7294,13 +7242,9 @@ qemuProcessSetupDiskThrottlingBlockdev(virQEMUDriver *driver,
                                        virDomainObj *vm,
                                        virDomainAsyncJob asyncJob)
 {
-    qemuDomainObjPrivate *priv = vm->privateData;
     size_t i;
     int ret = -1;

-    if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV))
-        return 0;
-
     VIR_DEBUG("Setting up disk throttling for -blockdev via block_set_io_throttle");

     if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
@@ -7462,11 +7406,6 @@ static int
 qemuProcessSetupDisksTransient(virDomainObj *vm,
                                virDomainAsyncJob asyncJob)
 {
-    qemuDomainObjPrivate *priv = vm->privateData;
-
-    if (!(virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV)))
-        return 0;
-
     if (qemuProcessSetupDisksTransientSnapshot(vm, asyncJob) < 0)
         return -1;

@@ -7886,8 +7825,6 @@ qemuProcessRefreshState(virQEMUDriver *driver,
                         virDomainObj *vm,
                         virDomainAsyncJob asyncJob)
 {
-    qemuDomainObjPrivate *priv = vm->privateData;
-
     VIR_DEBUG("Fetching list of active devices");
     if (qemuDomainUpdateDeviceList(driver, vm, asyncJob) < 0)
         return -1;
@@ -7903,9 +7840,6 @@ qemuProcessRefreshState(virQEMUDriver *driver,
     VIR_DEBUG("Updating disk data");
     if (qemuProcessRefreshDisks(driver, vm, asyncJob) < 0)
         return -1;
-    if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV) &&
-        qemuBlockNodeNamesDetect(driver, vm, asyncJob) < 0)
-        return -1;

     return 0;
 }
@@ -8750,101 +8684,6 @@ qemuProcessRefreshCPU(virQEMUDriver *driver,
 }


-static int
-qemuProcessRefreshLegacyBlockjob(void *payload,
-                                 const char *name,
-                                 void *opaque)
-{
-    const char *jobname = name;
-    virDomainObj *vm = opaque;
-    qemuMonitorBlockJobInfo *info = payload;
-    virDomainDiskDef *disk;
-    qemuBlockJobData *job;
-    qemuBlockJobType jobtype = info->type;
-    qemuDomainObjPrivate *priv = vm->privateData;
-
-    if (!(disk = qemuProcessFindDomainDiskByAliasOrQOM(vm, jobname, jobname))) {
-        VIR_DEBUG("could not find disk for block job '%s'", jobname);
-        return 0;
-    }
-
-    if (jobtype == QEMU_BLOCKJOB_TYPE_COMMIT &&
-        disk->mirrorJob == VIR_DOMAIN_BLOCK_JOB_TYPE_ACTIVE_COMMIT)
-        jobtype = disk->mirrorJob;
-
-    if (!(job = qemuBlockJobDiskNew(vm, disk, jobtype, jobname)))
-        return -1;
-
-    if (disk->mirror) {
-        if ((!info->ready_present && info->end == info->cur) ||
-            info->ready) {
-            disk->mirrorState = VIR_DOMAIN_DISK_MIRROR_STATE_READY;
-            job->state = VIR_DOMAIN_BLOCK_JOB_READY;
-        }
-
-        /* Pre-blockdev block copy labelled the chain of the mirrored device
-         * just before pivoting. At that point it was no longer known whether
-         * it's even necessary (e.g. disk is being reused). This code fixes
-         * the labelling in case the job was started in a libvirt version
-         * which did not label the chain when the block copy is being started.
-         * Note that we can't do much on failure. */
-        if (disk->mirrorJob == VIR_DOMAIN_BLOCK_JOB_TYPE_COPY) {
-            if (qemuDomainDetermineDiskChain(priv->driver, vm, disk,
-                                             disk->mirror, true) < 0)
-                goto cleanup;
-
-            if (disk->mirror->format &&
-                disk->mirror->format != VIR_STORAGE_FILE_RAW &&
-                (qemuDomainNamespaceSetupDisk(vm, disk->mirror, NULL) < 0 ||
-                 qemuSetupImageChainCgroup(vm, disk->mirror) < 0 ||
-                 qemuSecuritySetImageLabel(priv->driver, vm, disk->mirror,
-                                           true, true) < 0))
-                goto cleanup;
-        }
-    }
-
-    qemuBlockJobStarted(job, vm);
-
- cleanup:
-    qemuBlockJobStartupFinalize(vm, job);
-
-    return 0;
-}
-
-
-static int
-qemuProcessRefreshLegacyBlockjobs(virQEMUDriver *driver,
-                                  virDomainObj *vm)
-{
-    g_autoptr(GHashTable) blockJobs = NULL;
-
-    qemuDomainObjEnterMonitor(driver, vm);
-    blockJobs = qemuMonitorGetAllBlockJobInfo(qemuDomainGetMonitor(vm), true);
-    qemuDomainObjExitMonitor(vm);
-
-    if (!blockJobs)
-        return -1;
-
-    if (virHashForEach(blockJobs, qemuProcessRefreshLegacyBlockjob, vm) < 0)
-        return -1;
-
-    return 0;
-}
-
-
-static int
-qemuProcessRefreshBlockjobs(virQEMUDriver *driver,
-                            virDomainObj *vm)
-{
-    qemuDomainObjPrivate *priv = vm->privateData;
-
-    if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV))
-        return qemuBlockJobRefreshJobs(driver, vm);
-
-    return qemuProcessRefreshLegacyBlockjobs(driver, vm);
-}
-
-
 struct qemuProcessReconnectData {
     virQEMUDriver *driver;
     virDomainObj *obj;
@@ -8952,19 +8791,6 @@ qemuProcessReconnect(void *opaque)

         if (virDomainDiskTranslateSourcePool(disk) < 0)
             goto error;
-
-        /* backing chains need to be refreshed only if they could change */
-        if (priv->reconnectBlockjobs != VIR_TRISTATE_BOOL_NO &&
-            !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV)) {
-            /* This should be the only place that calls
-             * qemuDomainDetermineDiskChain with @report_broken == false
-             * to guarantee best-effort domain reconnect */
-            virStorageSourceBackingStoreClear(disk->src);
-            if (qemuDomainDetermineDiskChain(driver, obj, disk, NULL, false) < 0)
-                goto error;
-        } else {
-            VIR_DEBUG("skipping backing chain detection for '%s'", disk->dst);
-        }
     }

     for (i = 0; i < obj->def->ngraphics; i++) {
@@ -9054,10 +8880,6 @@ qemuProcessReconnect(void *opaque)
             QEMU_DOMAIN_DISK_PRIVATE(disk)->transientOverlayCreated = true;
     }

-    if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV) &&
-        qemuBlockNodeNamesDetect(driver, obj, VIR_ASYNC_JOB_NONE) < 0)
-        goto error;
-
     if (qemuRefreshVirtioChannelState(driver, obj, VIR_ASYNC_JOB_NONE) < 0)
         goto error;

@@ -9070,7 +8892,7 @@ qemuProcessReconnect(void *opaque)
     if (qemuProcessRecoverJob(driver, obj, &oldjob, &stopFlags) < 0)
         goto error;

-    if (qemuProcessRefreshBlockjobs(driver, obj) < 0)
+    if (qemuBlockJobRefreshJobs(driver, obj) < 0)
         goto error;

     if (qemuProcessUpdateDevices(driver, obj) < 0)
-- 
2.36.1



More information about the libvir-list mailing list