From: Tejun Heo <tj@kernel.org>
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 <tj@kernel.org>
Subject: [PATCH 2/5] cgroup: export __cgroup_from_dentry() and __cgroup_dput()
Date: Sun, 4 Aug 2013 12:07:23 -0400 [thread overview]
Message-ID: <1375632446-2581-3-git-send-email-tj@kernel.org> (raw)
In-Reply-To: <1375632446-2581-1-git-send-email-tj@kernel.org>
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 <tj@kernel.org>
---
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: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2013-08-04 16:07 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-04 16:07 [PATCHSET cgroup/for-3.12] cgroup: make cgroup_event specific to memcg Tejun Heo
2013-08-04 16:07 ` [PATCH 1/5] cgroup: implement CFTYPE_NO_PREFIX Tejun Heo
2013-08-04 16:07 ` Tejun Heo [this message]
2013-08-05 2:58 ` [PATCH 2/5] cgroup: export __cgroup_from_dentry() and __cgroup_dput() Li Zefan
2013-08-05 15:40 ` Tejun Heo
2013-08-05 17:08 ` [PATCH v2 2/5] cgroup: make __cgroup_from_dentry() and __cgroup_dput() global Tejun Heo
2013-08-04 16:07 ` [PATCH 3/5] cgroup, memcg: move cgroup_event implementation to memcg Tejun Heo
2013-08-05 3:14 ` Li Zefan
2013-08-05 17:09 ` [PATCH v2 " Tejun Heo
2013-08-06 2:02 ` Li Zefan
2013-08-06 2:21 ` Li Zefan
2013-08-06 3:26 ` [PATCH " Balbir Singh
2013-08-06 14:09 ` Tejun Heo
2013-08-06 16:03 ` Balbir Singh
2013-08-04 16:07 ` [PATCH 4/5] cgroup, memcg: move cgroup->event_list[_lock] and event callbacks into memcg Tejun Heo
2013-08-04 16:07 ` [PATCH 5/5] memcg: rename cgroup_event to mem_cgroup_event Tejun Heo
2013-08-05 3:26 ` Li Zefan
2013-08-05 17:10 ` [PATCH v2 " Tejun Heo
2013-08-05 16:01 ` [PATCHSET cgroup/for-3.12] cgroup: make cgroup_event specific to memcg Michal Hocko
2013-08-05 16:29 ` Tejun Heo
2013-08-05 19:16 ` Michal Hocko
2013-08-05 19:44 ` Tejun Heo
2013-08-06 15:58 ` Michal Hocko
2013-08-06 16:15 ` Tejun Heo
2013-08-07 12:18 ` Michal Hocko
2013-08-07 12:43 ` Tejun Heo
2013-08-07 13:26 ` Michal Hocko
2013-08-07 13:36 ` Tejun Heo
2013-08-08 2:53 ` Li Zefan
2013-08-09 1:00 ` Tejun Heo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1375632446-2581-3-git-send-email-tj@kernel.org \
--to=tj@kernel.org \
--cc=bsingharora@gmail.com \
--cc=cgroups@vger.kernel.org \
--cc=hannes@cmpxchg.org \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lizefan@huawei.com \
--cc=mhocko@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).