[lxc-devel] [PATCH] implement cgmanager nrtasks
Dwight Engen
dwight.engen at oracle.com
Thu Feb 6 20:38:04 UTC 2014
This op will be used on older kernels where container shutdown via reboot(2)
is not implemented and we use the utmp watching code.
Signed-off-by: Dwight Engen <dwight.engen at oracle.com>
---
src/lxc/cgmanager.c | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/src/lxc/cgmanager.c b/src/lxc/cgmanager.c
index 6798b6b..37f4eb3 100644
--- a/src/lxc/cgmanager.c
+++ b/src/lxc/cgmanager.c
@@ -513,6 +513,27 @@ static const char *cgm_get_cgroup(void *hdata, const char *subsystem)
return d->cgroup_path;
}
+static int cgm_get_nrtasks(void *hdata)
+{
+ struct cgm_data *d = hdata;
+ int32_t *pids;
+ size_t pids_len;
+
+ if (!d || !d->cgroup_path)
+ return false;
+
+ if (cgmanager_get_tasks_sync(NULL, cgroup_manager, subsystems[0],
+ d->cgroup_path, &pids, &pids_len) != 0) {
+ NihError *nerr;
+ nerr = nih_error_get();
+ ERROR("call to cgmanager_get_tasks_sync failed: %s", nerr->message);
+ nih_free(nerr);
+ return -1;
+ }
+ nih_free(pids);
+ return pids_len;
+}
+
static int cgm_get(const char *filename, char *value, size_t len, const char *name, const char *lxcpath)
{
char *result, *controller, *key, *cgroup;
@@ -862,6 +883,6 @@ static struct cgroup_ops cgmanager_ops = {
.chown = cgm_chown,
.attach = cgm_attach,
.mount_cgroup = cgm_mount_cgroup,
- .nrtasks = NULL,
+ .nrtasks = cgm_get_nrtasks,
};
#endif
--
1.8.5.3
More information about the lxc-devel
mailing list