diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index cf06256ccdf98df155b34f38fe2b69299cc2bc21..cf64bd3661254e1ce6629cb872dfb94f06452f62 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -72,6 +72,7 @@ virCgroupGetMemoryHardLimit; virCgroupGetMemorySoftLimit; virCgroupGetMemoryUsage; virCgroupGetSwapHardLimit; +virCgroupMounted; virCgroupRemove; virCgroupSetCpuShares; virCgroupSetFreezerState; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 1eea3a989f0090a6068ac8c1b00255ffda8bbce0..554bf8628149a676ec957f9fb3191a1c4e33e822 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -730,6 +730,8 @@ static int qemuCgroupControllerActive(struct qemud_driver *driver, { if (driver->cgroup == NULL) return 0; + if (!virCgroupMounted(driver->cgroup, controller)) + return 0; if (driver->cgroupControllers & (1 << controller)) return 1; return 0; diff --git a/src/util/cgroup.c b/src/util/cgroup.c index 7e887dc55c937bc0c7aaba67bd302e171a47e197..3779f76241b5f541f7a2b005f8ae4457f51dec48 100644 --- a/src/util/cgroup.c +++ b/src/util/cgroup.c @@ -71,6 +71,19 @@ void virCgroupFree(virCgroupPtr *group) VIR_FREE(*group); } +/** + * virCgroupMounted: query whether a cgroup subsystem is mounted or not + * + * @cgroup: The group structure to be queried + * @controller: cgroup subsystem id + * + * Returns true if a cgroup is subsystem is mounted. + */ +bool virCgroupMounted(virCgroupPtr cgroup, int controller) +{ + return cgroup->controllers[controller].mountPoint != NULL; +} + #if defined HAVE_MNTENT_H && defined HAVE_GETMNTENT_R /* * Process /proc/mounts figuring out what controllers are diff --git a/src/util/cgroup.h b/src/util/cgroup.h index b8f2d0899b255073a2222aa38528c2fa11fa39b1..9e1c61fca500c2539065ed212fb765d1b2344786 100644 --- a/src/util/cgroup.h +++ b/src/util/cgroup.h @@ -83,5 +83,6 @@ int virCgroupGetFreezerState(virCgroupPtr group, char **state); int virCgroupRemove(virCgroupPtr group); void virCgroupFree(virCgroupPtr *group); +bool virCgroupMounted(virCgroupPtr cgroup, int controller); #endif /* CGROUP_H */