lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 23 Jul 2009 15:51:20 +0900 From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@...fujitsu.com> To: Paul Menage <menage@...gle.com> Cc: akpm@...ux-foundation.org, lizf@...fujitsu.com, containers@...ts.linux-foundation.org, linux-kernel@...r.kernel.org Subject: Re: [PATCH 2/4] Move the cgroup debug subsys into cgroup.c to access internal state On Wed, 22 Jul 2009 12:50:35 -0700 Paul Menage <menage@...gle.com> wrote: > Move the cgroup debug subsys into cgroup.c to access internal state > > While it's architecturally clean to have the cgroup debug subsystem be > completely independent of the cgroups framework, it limits its > usefulness for debugging the contents of internal data structures. > Move the debug subsystem code into the scope of all the cgroups data > structures to make more detailed debugging possible. > > Signed-off-by: Paul Menage <menage@...gle.com> > Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@...fujitsu.com> > --- > > kernel/Makefile | 1 > kernel/cgroup.c | 88 +++++++++++++++++++++++++++++++++++++++++ > kernel/cgroup_debug.c | 105 ------------------------------------------------- > 3 files changed, 88 insertions(+), 106 deletions(-) > delete mode 100644 kernel/cgroup_debug.c > > diff --git a/kernel/Makefile b/kernel/Makefile > index ecbd483..251adfe 100644 > --- a/kernel/Makefile > +++ b/kernel/Makefile > @@ -58,7 +58,6 @@ obj-$(CONFIG_KEXEC) += kexec.o > obj-$(CONFIG_BACKTRACE_SELF_TEST) += backtracetest.o > obj-$(CONFIG_COMPAT) += compat.o > obj-$(CONFIG_CGROUPS) += cgroup.o > -obj-$(CONFIG_CGROUP_DEBUG) += cgroup_debug.o > obj-$(CONFIG_CGROUP_FREEZER) += cgroup_freezer.o > obj-$(CONFIG_CPUSETS) += cpuset.o > obj-$(CONFIG_CGROUP_NS) += ns_cgroup.o > diff --git a/kernel/cgroup.c b/kernel/cgroup.c > index abca7e5..6306757 100644 > --- a/kernel/cgroup.c > +++ b/kernel/cgroup.c > @@ -3762,3 +3762,91 @@ css_get_next(struct cgroup_subsys *ss, int id, > return ret; > } > > +#ifdef CONFIG_CGROUP_DEBUG > +static struct cgroup_subsys_state *debug_create(struct cgroup_subsys *ss, > + struct cgroup *cont) > +{ > + struct cgroup_subsys_state *css = kzalloc(sizeof(*css), GFP_KERNEL); > + > + if (!css) > + return ERR_PTR(-ENOMEM); > + > + return css; > +} > + > +static void debug_destroy(struct cgroup_subsys *ss, struct cgroup *cont) > +{ > + kfree(cont->subsys[debug_subsys_id]); > +} > + > +static u64 cgroup_refcount_read(struct cgroup *cont, struct cftype *cft) > +{ > + return atomic_read(&cont->count); > +} > + > +static u64 debug_taskcount_read(struct cgroup *cont, struct cftype *cft) > +{ > + return cgroup_task_count(cont); > +} > + > +static u64 current_css_set_read(struct cgroup *cont, struct cftype *cft) > +{ > + return (u64)(long)current->cgroups; > +} > + > +static u64 current_css_set_refcount_read(struct cgroup *cont, > + struct cftype *cft) > +{ > + u64 count; > + > + rcu_read_lock(); > + count = atomic_read(¤t->cgroups->refcount); > + rcu_read_unlock(); > + return count; > +} > + > +static u64 releasable_read(struct cgroup *cgrp, struct cftype *cft) > +{ > + return test_bit(CGRP_RELEASABLE, &cgrp->flags); > +} > + > +static struct cftype debug_files[] = { > + { > + .name = "cgroup_refcount", > + .read_u64 = cgroup_refcount_read, > + }, > + { > + .name = "taskcount", > + .read_u64 = debug_taskcount_read, > + }, > + > + { > + .name = "current_css_set", > + .read_u64 = current_css_set_read, > + }, > + > + { > + .name = "current_css_set_refcount", > + .read_u64 = current_css_set_refcount_read, > + }, > + > + { > + .name = "releasable", > + .read_u64 = releasable_read, > + }, > +}; > + > +static int debug_populate(struct cgroup_subsys *ss, struct cgroup *cont) > +{ > + return cgroup_add_files(cont, ss, debug_files, > + ARRAY_SIZE(debug_files)); > +} > + > +struct cgroup_subsys debug_subsys = { > + .name = "debug", > + .create = debug_create, > + .destroy = debug_destroy, > + .populate = debug_populate, > + .subsys_id = debug_subsys_id, > +}; > +#endif /* CONFIG_CGROUP_DEBUG */ > diff --git a/kernel/cgroup_debug.c b/kernel/cgroup_debug.c > deleted file mode 100644 > index 0c92d79..0000000 > --- a/kernel/cgroup_debug.c > +++ /dev/null > @@ -1,105 +0,0 @@ > -/* > - * kernel/cgroup_debug.c - Example cgroup subsystem that > - * exposes debug info > - * > - * Copyright (C) Google Inc, 2007 > - * > - * Developed by Paul Menage (menage@...gle.com) > - * > - */ > - > -#include <linux/cgroup.h> > -#include <linux/fs.h> > -#include <linux/slab.h> > -#include <linux/rcupdate.h> > - > -#include <asm/atomic.h> > - > -static struct cgroup_subsys_state *debug_create(struct cgroup_subsys *ss, > - struct cgroup *cont) > -{ > - struct cgroup_subsys_state *css = kzalloc(sizeof(*css), GFP_KERNEL); > - > - if (!css) > - return ERR_PTR(-ENOMEM); > - > - return css; > -} > - > -static void debug_destroy(struct cgroup_subsys *ss, struct cgroup *cont) > -{ > - kfree(cont->subsys[debug_subsys_id]); > -} > - > -static u64 cgroup_refcount_read(struct cgroup *cont, struct cftype *cft) > -{ > - return atomic_read(&cont->count); > -} > - > -static u64 taskcount_read(struct cgroup *cont, struct cftype *cft) > -{ > - u64 count; > - > - count = cgroup_task_count(cont); > - return count; > -} > - > -static u64 current_css_set_read(struct cgroup *cont, struct cftype *cft) > -{ > - return (u64)(long)current->cgroups; > -} > - > -static u64 current_css_set_refcount_read(struct cgroup *cont, > - struct cftype *cft) > -{ > - u64 count; > - > - rcu_read_lock(); > - count = atomic_read(¤t->cgroups->refcount); > - rcu_read_unlock(); > - return count; > -} > - > -static u64 releasable_read(struct cgroup *cgrp, struct cftype *cft) > -{ > - return test_bit(CGRP_RELEASABLE, &cgrp->flags); > -} > - > -static struct cftype files[] = { > - { > - .name = "cgroup_refcount", > - .read_u64 = cgroup_refcount_read, > - }, > - { > - .name = "taskcount", > - .read_u64 = taskcount_read, > - }, > - > - { > - .name = "current_css_set", > - .read_u64 = current_css_set_read, > - }, > - > - { > - .name = "current_css_set_refcount", > - .read_u64 = current_css_set_refcount_read, > - }, > - > - { > - .name = "releasable", > - .read_u64 = releasable_read, > - }, > -}; > - > -static int debug_populate(struct cgroup_subsys *ss, struct cgroup *cont) > -{ > - return cgroup_add_files(cont, ss, files, ARRAY_SIZE(files)); > -} > - > -struct cgroup_subsys debug_subsys = { > - .name = "debug", > - .create = debug_create, > - .destroy = debug_destroy, > - .populate = debug_populate, > - .subsys_id = debug_subsys_id, > -}; > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@...r.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists