[libvirt] [PATCH 2/4] Add support for systemd cgroup mount
Eric Blake
eblake at redhat.com
Tue Jul 30 18:13:58 UTC 2013
On 07/26/2013 09:48 AM, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at redhat.com>
>
> Systemd uses a named cgroup mount for tracking processes. Add
> it as another type of controller, albeit one which we have to
> special case in a number of places. In particular we must
> never create/delete directories there, nor add tasks. Essentially
> the systemd mount is to be considered read-only for libvirt.
>
> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> ---
> src/util/vircgroup.c | 68 +++++++++++++++++++++++++++++++++++++++------------
> src/util/vircgroup.h | 1 +
> tests/vircgrouptest.c | 9 +++++++
> 3 files changed, 63 insertions(+), 15 deletions(-)
>
> @@ -524,13 +541,16 @@ static int virCgroupDetect(virCgroupPtr group,
> return -1;
> }
>
> - if (parent || path[0] == '/') {
> - if (virCgroupCopyPlacement(group, path, parent) < 0)
> - return -1;
> - } else {
> - if (virCgroupDetectPlacement(group, pid, path) < 0)
> - return -1;
This previously called only one of the two functions...
> - }
> + /* In some cases we can copy part of the placement info
> + * based on the parent cgroup...
> + */
> + if ((parent || path[0] == '/') &&
> + virCgroupCopyPlacement(group, path, parent) < 0)
> + return -1;
> +
> + /* ... but use /proc/cgroups to fill in the rest */
> + if (virCgroupDetectPlacement(group, pid, path) < 0)
...now, if virCgroupCopyPlacement returns 0, it calls both functions.
Is that intentional?
> @@ -822,6 +842,12 @@ static int virCgroupMakeGroup(virCgroupPtr parent,
> for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) {
> char *path = NULL;
>
> + /* We must never mkdir() in systemd's hierachy */
s/hierachy/hierarchy/
> + if (i == VIR_CGROUP_CONTROLLER_SYSTEMD) {
> + VIR_DEBUG("Not creating systemd controller group");
> + continue;
> + }
> +
> /* Skip over controllers that aren't mounted */
> if (!group->controllers[i].mountPoint) {
> VIR_DEBUG("Skipping unmounted controller %s",
> @@ -1026,6 +1052,10 @@ int virCgroupRemove(virCgroupPtr group)
> if (!group->controllers[i].mountPoint)
> continue;
>
> + /* We must never rmdir() in systemd's hiearchy */
s/hiearchy/hierarchy/
(hmm, you copied-and-pasted, but ended up with a different typo between
the two comments?)
> + if (i == VIR_CGROUP_CONTROLLER_SYSTEMD)
> + continue;
> +
> /* Don't delete the root group, if we accidentally
> ended up in it for some reason */
> if (STREQ(group->controllers[i].placement, "/"))
> @@ -1065,6 +1095,10 @@ int virCgroupAddTask(virCgroupPtr group, pid_t pid)
> if (!group->controllers[i].mountPoint)
> continue;
>
> + /* We must never add tasks in systemd's hiearchy */
s/hiearchy/hierarchy/
> + if (i == VIR_CGROUP_CONTROLLER_SYSTEMD)
> + continue;
> +
> if (virCgroupSetValueU64(group, i, "tasks", (unsigned long long)pid) < 0)
> goto cleanup;
> }
> @@ -1166,6 +1200,10 @@ int virCgroupMoveTask(virCgroupPtr src_group, virCgroupPtr dest_group)
> !dest_group->controllers[i].mountPoint)
> continue;
>
> + /* We must never move tasks in systemd's hiearchy */
s/hiearchy/hierarchy/
Conditional ACK if you can address my question and fix the typos.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 621 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20130730/75303cdf/attachment-0001.sig>
More information about the libvir-list
mailing list