[libvirt] [PATCH 09/10] qemu: cgroup: Extract guts of qemuSetupImageCgroupInternal

Peter Krempa pkrempa at redhat.com
Tue Feb 16 15:29:51 UTC 2016


They will later be reused for setting cgroup for other image backed
devices.
---
 src/qemu/qemu_cgroup.c | 39 ++++++++++++++++++++++++---------------
 1 file changed, 24 insertions(+), 15 deletions(-)

diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
index 6a34bab..9f24545 100644
--- a/src/qemu/qemu_cgroup.c
+++ b/src/qemu/qemu_cgroup.c
@@ -52,34 +52,28 @@ static const char *const defaultDeviceACL[] = {
 #define DEVICE_PTY_MAJOR 136
 #define DEVICE_SND_MAJOR 116

+
 static int
-qemuSetupImageCgroupInternal(virDomainObjPtr vm,
-                             virStorageSourcePtr src,
-                             bool forceReadonly)
+qemuSetupImagePathCgroup(virDomainObjPtr vm,
+                         const char *path,
+                         bool readonly)
 {
     qemuDomainObjPrivatePtr priv = vm->privateData;
     int perms = VIR_CGROUP_DEVICE_READ;
     int ret;

-    if (!virCgroupHasController(priv->cgroup,
-                                VIR_CGROUP_CONTROLLER_DEVICES))
-        return 0;
-
-    if (!src->path || !virStorageSourceIsLocalStorage(src)) {
-        VIR_DEBUG("Not updating cgroups for disk path '%s', type: %s",
-                  NULLSTR(src->path), virStorageTypeToString(src->type));
+    if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_DEVICES))
         return 0;
-    }

-    if (!src->readonly && !forceReadonly)
+    if (readonly)
         perms |= VIR_CGROUP_DEVICE_WRITE;

     VIR_DEBUG("Allow path %s, perms: %s",
-              src->path, virCgroupGetDevicePermsString(perms));
+              path, virCgroupGetDevicePermsString(perms));

-    ret = virCgroupAllowDevicePath(priv->cgroup, src->path, perms, true);
+    ret = virCgroupAllowDevicePath(priv->cgroup, path, perms, true);

-    virDomainAuditCgroupPath(vm, priv->cgroup, "allow", src->path,
+    virDomainAuditCgroupPath(vm, priv->cgroup, "allow", path,
                              virCgroupGetDevicePermsString(perms),
                              ret == 0);

@@ -87,6 +81,21 @@ qemuSetupImageCgroupInternal(virDomainObjPtr vm,
 }


+static int
+qemuSetupImageCgroupInternal(virDomainObjPtr vm,
+                             virStorageSourcePtr src,
+                             bool forceReadonly)
+{
+    if (!src->path || !virStorageSourceIsLocalStorage(src)) {
+        VIR_DEBUG("Not updating cgroups for disk path '%s', type: %s",
+                  NULLSTR(src->path), virStorageTypeToString(src->type));
+        return 0;
+    }
+
+    return qemuSetupImagePathCgroup(vm, src->path, src->readonly || forceReadonly);
+}
+
+
 int
 qemuSetupImageCgroup(virDomainObjPtr vm,
                      virStorageSourcePtr src)
-- 
2.6.2




More information about the libvir-list mailing list