From 0c8e3b2234e9c7c39c48a4cc8e4f2563c0d39ab6 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Mon, 29 Feb 2016 15:39:57 +0100 Subject: [PATCH] qemu: domain: Move and export qemuDomainDiskChainElement(Prepare|Revoke) Move the function to qemu_domain.c and export them for further use. --- src/qemu/qemu_domain.c | 65 ++++++++++++++++++++++++++++++++++++++++++ src/qemu/qemu_domain.h | 8 ++++++ src/qemu/qemu_driver.c | 63 ---------------------------------------- 3 files changed, 73 insertions(+), 63 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 640dc4a293..403f01e75e 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -25,6 +25,7 @@ #include "qemu_domain.h" #include "qemu_alias.h" +#include "qemu_cgroup.h" #include "qemu_command.h" #include "qemu_parse_command.h" #include "qemu_capabilities.h" @@ -45,6 +46,7 @@ #include "viratomic.h" #include "virprocess.h" #include "logging/log_manager.h" +#include "locking/domain_lock.h" #include "storage/storage_driver.h" @@ -3369,6 +3371,69 @@ qemuDomainDetermineDiskChain(virQEMUDriverPtr driver, } +/** + * qemuDomainDiskChainElementRevoke: + * + * Revoke access to a single backing chain element. This restores the labels, + * removes cgroup ACLs for devices and removes locks. + */ +void +qemuDomainDiskChainElementRevoke(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virStorageSourcePtr elem) +{ + if (virSecurityManagerRestoreImageLabel(driver->securityManager, + vm->def, elem) < 0) + VIR_WARN("Unable to restore security label on %s", NULLSTR(elem->path)); + + if (qemuTeardownImageCgroup(vm, elem) < 0) + VIR_WARN("Failed to teardown cgroup for disk path %s", + NULLSTR(elem->path)); + + if (virDomainLockImageDetach(driver->lockManager, vm, elem) < 0) + VIR_WARN("Unable to release lock on %s", NULLSTR(elem->path)); +} + + +/** + * qemuDomainDiskChainElementPrepare: + * + * Allow a VM access to a single element of a disk backing chain; this helper + * ensures that the lock manager, cgroup device controller, and security manager + * labelling are all aware of each new file before it is added to a chain */ +int +qemuDomainDiskChainElementPrepare(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virStorageSourcePtr elem, + bool readonly) +{ + bool was_readonly = elem->readonly; + virQEMUDriverConfigPtr cfg = NULL; + int ret = -1; + + cfg = virQEMUDriverGetConfig(driver); + + elem->readonly = readonly; + + if (virDomainLockImageAttach(driver->lockManager, cfg->uri, vm, elem) < 0) + goto cleanup; + + if (qemuSetupImageCgroup(vm, elem) < 0) + goto cleanup; + + if (virSecurityManagerSetImageLabel(driver->securityManager, vm->def, + elem) < 0) + goto cleanup; + + ret = 0; + + cleanup: + elem->readonly = was_readonly; + virObjectUnref(cfg); + return ret; +} + + bool qemuDomainDiskSourceDiffers(virConnectPtr conn, virDomainDiskDefPtr disk, diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 0d5b6c78da..02c6012c9c 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -460,6 +460,14 @@ int qemuDomainStorageFileInit(virQEMUDriverPtr driver, virStorageSourcePtr src); char *qemuDomainStorageAlias(const char *device, int depth); +void qemuDomainDiskChainElementRevoke(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virStorageSourcePtr elem); +int qemuDomainDiskChainElementPrepare(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virStorageSourcePtr elem, + bool readonly); + int qemuDomainCleanupAdd(virDomainObjPtr vm, qemuDomainCleanupCallback cb); void qemuDomainCleanupRemove(virDomainObjPtr vm, diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 6a403bd444..f3503200e3 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -13503,69 +13503,6 @@ qemuDomainMigrateStartPostCopy(virDomainPtr dom, } -/** - * qemuDomainDiskChainElementRevoke: - * - * Revoke access to a single backing chain element. This restores the labels, - * removes cgroup ACLs for devices and removes locks. - */ -static void -qemuDomainDiskChainElementRevoke(virQEMUDriverPtr driver, - virDomainObjPtr vm, - virStorageSourcePtr elem) -{ - if (virSecurityManagerRestoreImageLabel(driver->securityManager, - vm->def, elem) < 0) - VIR_WARN("Unable to restore security label on %s", NULLSTR(elem->path)); - - if (qemuTeardownImageCgroup(vm, elem) < 0) - VIR_WARN("Failed to teardown cgroup for disk path %s", - NULLSTR(elem->path)); - - if (virDomainLockImageDetach(driver->lockManager, vm, elem) < 0) - VIR_WARN("Unable to release lock on %s", NULLSTR(elem->path)); -} - - -/** - * qemuDomainDiskChainElementPrepare: - * - * Allow a VM access to a single element of a disk backing chain; this helper - * ensures that the lock manager, cgroup device controller, and security manager - * labelling are all aware of each new file before it is added to a chain */ -static int -qemuDomainDiskChainElementPrepare(virQEMUDriverPtr driver, - virDomainObjPtr vm, - virStorageSourcePtr elem, - bool readonly) -{ - bool was_readonly = elem->readonly; - virQEMUDriverConfigPtr cfg = NULL; - int ret = -1; - - cfg = virQEMUDriverGetConfig(driver); - - elem->readonly = readonly; - - if (virDomainLockImageAttach(driver->lockManager, cfg->uri, vm, elem) < 0) - goto cleanup; - - if (qemuSetupImageCgroup(vm, elem) < 0) - goto cleanup; - - if (virSecurityManagerSetImageLabel(driver->securityManager, vm->def, - elem) < 0) - goto cleanup; - - ret = 0; - - cleanup: - elem->readonly = was_readonly; - virObjectUnref(cfg); - return ret; -} - - /* Return -1 if request is not sent to agent due to misconfig, -2 if request * is sent but failed, and number of frozen filesystems on success. If -2 is * returned, FSThaw should be called revert the quiesced status. */ -- GitLab