}
-static int
-qemuDomainDiskNeedRemovePR(virDomainObjPtr vm,
- virDomainDiskDefPtr disk,
- bool *stopDaemon)
-{
- qemuDomainObjPrivatePtr priv = vm->privateData;
- size_t i;
-
- *stopDaemon = false;
-
- if (!disk->src->pr)
- return 0;
-
- if (!virStoragePRDefIsManaged(disk->src->pr))
- return 0;
-
- for (i = 0; i < vm->def->ndisks; i++) {
- const virDomainDiskDef *domainDisk = vm->def->disks[i];
-
- if (domainDisk == disk)
- continue;
-
- if (virStoragePRDefIsManaged(domainDisk->src->pr))
- break;
- }
-
- if (i != vm->def->ndisks)
- return 0;
-
- if (priv->prDaemonRunning)
- *stopDaemon = true;
-
- return 0;
-}
-
-
static int
qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver,
virDomainObjPtr vm,
char *drivestr;
char *objAlias = NULL;
char *encAlias = NULL;
- bool stopPRDaemon = false;
VIR_DEBUG("Removing disk %s from domain %p %s",
disk->info.alias, vm, vm->def->name);
}
}
- if (qemuDomainDiskNeedRemovePR(vm, disk, &stopPRDaemon) < 0)
- return -1;
-
qemuDomainObjEnterMonitor(driver, vm);
qemuMonitorDriveDel(priv->mon, drivestr);
}
}
- if (stopPRDaemon)
+ /* check if the last disk with managed PR was just removed */
+ if (priv->prDaemonRunning &&
+ !virDomainDefHasManagedPR(vm->def))
qemuProcessKillManagedPRDaemon(vm);
qemuDomainReleaseDeviceAddress(vm, &disk->info, src);