From mboxrd@z Thu Jan 1 00:00:00 1970 Date: Wed, 31 Oct 2007 19:32:07 +0900 From: KAMEZAWA Hiroyuki Subject: [PATCH] memory cgroup enhancements take 4 [7/8] add pre dstroy handler Message-Id: <20071031193207.8d85da6d.kamezawa.hiroyu@jp.fujitsu.com> In-Reply-To: <20071031192213.4f736fac.kamezawa.hiroyu@jp.fujitsu.com> References: <20071031192213.4f736fac.kamezawa.hiroyu@jp.fujitsu.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org Return-Path: To: KAMEZAWA Hiroyuki Cc: "linux-mm@kvack.org" , "containers@lists.osdl.org" , "balbir@linux.vnet.ibm.com" , "yamamoto@valinux.co.jp" , Andrew Morton List-ID: My main purpose of this patch is for memory controller.. This patch adds a handler "pre_destroy" to cgroup_subsys. It is called before cgroup_rmdir() checks all subsys's refcnt. I think this is useful for subsys which have some extra refs even if there are no tasks in cgroup. By adding pre_destroy(), the kernel keeps the rule "destroy() against subsystem is called only when refcnt=0." and allows css ref to be used by other objects than tasks. Signed-off-by: KAMEZAWA Hiroyuki include/linux/cgroup.h | 1 + kernel/cgroup.c | 7 +++++++ 2 files changed, 8 insertions(+) Index: devel-2.6.23-mm1/include/linux/cgroup.h =================================================================== --- devel-2.6.23-mm1.orig/include/linux/cgroup.h +++ devel-2.6.23-mm1/include/linux/cgroup.h @@ -233,6 +233,7 @@ int cgroup_is_descendant(const struct cg struct cgroup_subsys { struct cgroup_subsys_state *(*create)(struct cgroup_subsys *ss, struct cgroup *cont); + void (*pre_destroy)(struct cgroup_subsys *ss, struct cgroup *cont); void (*destroy)(struct cgroup_subsys *ss, struct cgroup *cont); int (*can_attach)(struct cgroup_subsys *ss, struct cgroup *cont, struct task_struct *tsk); Index: devel-2.6.23-mm1/kernel/cgroup.c =================================================================== --- devel-2.6.23-mm1.orig/kernel/cgroup.c +++ devel-2.6.23-mm1/kernel/cgroup.c @@ -2158,6 +2158,13 @@ static int cgroup_rmdir(struct inode *un parent = cont->parent; root = cont->root; sb = root->sb; + /* + * Notify subsyses that rmdir() request comes. + */ + for_each_subsys(root, ss) { + if ((cont->subsys[ss->subsys_id]) && ss->pre_destroy) + ss->pre_destroy(ss, cont); + } if (cgroup_has_css_refs(cont)) { mutex_unlock(&cgroup_mutex); -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org