From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tejun Heo Subject: [PATCH 2/5] cgroup: export __cgroup_from_dentry() and __cgroup_dput() Date: Sun, 4 Aug 2013 12:07:23 -0400 Message-ID: <1375632446-2581-3-git-send-email-tj@kernel.org> References: <1375632446-2581-1-git-send-email-tj@kernel.org> Return-path: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references; bh=ETK1q4tYO57eEIxUVJk4vc1uza78m3TQX/H559u/v2Q=; b=fuTdZvBCaT94l/k+b6wmWkbep979X84L/hc7APMQdA3493/JVDAtW63q5/c0S4vuSZ h0690EBsBkMJdJrnaF8y+LdKw1upL9ISTW6TUNW/3nqeejUP47GdltJ3UVG8n7vsziuH 0GQuNm1C3/Qony6t2sZMFVN0rp6C9PtXhDn3wnNdrtDNomQZbI9x83z+kq/FPzZ3rVNg w3LyBcGwLhoCSkAlOpabzTwAZFq3WxipB7G3mnct0Lgx8ijVvJvPQoOrlwlCRpwXUuKv F3RhQ7SmWiJaGQTCVLx9FSRmwOeN/y6bHkWmPZuNyjybEei4HdXvHOc42X6y2VjLb2Nq Y5Xg== In-Reply-To: <1375632446-2581-1-git-send-email-tj@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: lizefan@huawei.com, hannes@cmpxchg.org, mhocko@suse.cz, bsingharora@gmail.com, kamezawa.hiroyu@jp.fujitsu.com Cc: cgroups@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Tejun Heo cgroup_event will no longer be supported as cgroup generic mechanism and be moved to memcg. To enable the relocation, implement and export __cgroup_from_dentry() which combines cgroup file dentry -> croup mapping and cft discovery, and prefix cgroup_dput() with __ and export it. These functions exist and are exported only to enable moving cgroup_event implementation to memcg and shouldn't grow any new users and thus the __ prefix. This patch is pure reorganization and doesn't introduce any functional difference. Signed-off-by: Tejun Heo --- include/linux/cgroup.h | 4 ++++ kernel/cgroup.c | 31 +++++++++++++++++-------------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index 30d6ec4..2ac1021 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h @@ -923,6 +923,10 @@ bool css_is_ancestor(struct cgroup_subsys_state *cg, unsigned short css_id(struct cgroup_subsys_state *css); struct cgroup_subsys_state *cgroup_css_from_dir(struct file *f, int id); +/* do not add new users of the following two functions */ +struct cgroup *__cgroup_from_dentry(struct dentry *dentry, struct cftype **cftp); +void __cgroup_dput(struct cgroup *cgrp); + #else /* !CONFIG_CGROUPS */ static inline int cgroup_init_early(void) { return 0; } diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 1b87e2b..2583b7b 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c @@ -2661,15 +2661,18 @@ static struct dentry *cgroup_lookup(struct inode *dir, struct dentry *dentry, un return NULL; } -/* - * Check if a file is a control file - */ -static inline struct cftype *__file_cft(struct file *file) +/* do not add new users */ +struct cgroup *__cgroup_from_dentry(struct dentry *dentry, struct cftype **cftp) { - if (file_inode(file)->i_fop != &cgroup_file_operations) - return ERR_PTR(-EINVAL); - return __d_cft(file->f_dentry); + if (!dentry->d_inode || + dentry->d_inode->i_op != &cgroup_file_inode_operations) + return NULL; + + if (cftp) + *cftp = __d_cft(dentry); + return __d_cgrp(dentry->d_parent); } +EXPORT_SYMBOL_GPL(__cgroup_from_dentry); static int cgroup_create_file(struct dentry *dentry, umode_t mode, struct super_block *sb) @@ -3953,7 +3956,7 @@ static int cgroup_write_notify_on_release(struct cgroup_subsys_state *css, * * That's why we hold a reference before dput() and drop it right after. */ -static void cgroup_dput(struct cgroup *cgrp) +void __cgroup_dput(struct cgroup *cgrp) { struct super_block *sb = cgrp->root->sb; @@ -3961,6 +3964,7 @@ static void cgroup_dput(struct cgroup *cgrp) dput(cgrp->dentry); deactivate_super(sb); } +EXPORT_SYMBOL_GPL(__cgroup_dput); /* * Unregister event and free resources. @@ -3983,7 +3987,7 @@ static void cgroup_event_remove(struct work_struct *work) eventfd_ctx_put(event->eventfd); kfree(event); - cgroup_dput(cgrp); + __cgroup_dput(cgrp); } /* @@ -4095,9 +4099,9 @@ static int cgroup_write_event_control(struct cgroup_subsys_state *css, if (ret < 0) goto out_put_cfile; - event->cft = __file_cft(cfile); - if (IS_ERR(event->cft)) { - ret = PTR_ERR(event->cft); + cgrp_cfile = __cgroup_from_dentry(cfile->f_dentry, &event->cft); + if (!cgrp_cfile) { + ret = -EINVAL; goto out_put_cfile; } @@ -4105,7 +4109,6 @@ static int cgroup_write_event_control(struct cgroup_subsys_state *css, * The file to be monitored must be in the same cgroup as * cgroup.event_control is. */ - cgrp_cfile = __d_cgrp(cfile->f_dentry->d_parent); if (cgrp_cfile != cgrp) { ret = -EINVAL; goto out_put_cfile; @@ -4272,7 +4275,7 @@ static void css_dput_fn(struct work_struct *work) struct cgroup_subsys_state *css = container_of(work, struct cgroup_subsys_state, dput_work); - cgroup_dput(css->cgroup); + __cgroup_dput(css->cgroup); } static void css_release(struct percpu_ref *ref) -- 1.8.3.1 -- 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