Commit 35cf0836 authored by Tejun Heo's avatar Tejun Heo

cgroup: rename cgroup_css_from_dir() to css_from_dir() and update its syntax

cgroup_css_from_dir() will grow another user.  In preparation, make
the following changes.

* All css functions are prefixed with just "css_", rename it to
  css_from_dir().

* Take dentry * instead of file * as dentry is what ultimately
  identifies a cgroup and file may not always be available.  Note that
  the function now checkes whether @dentry->d_inode is NULL as the
  caller now may specify a negative dentry.

* Make it take cgroup_subsys * instead of integer subsys_id.  This
  simplifies the function and allows specifying no subsystem for
  cgroup->dummy_css.

* Make return section a bit less verbose.

This patch doesn't introduce any behavior changes.
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Acked-by: default avatarLi Zefan <lizefan@huawei.com>
Acked-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>
parent 6e6eab0e
...@@ -903,7 +903,8 @@ bool css_is_ancestor(struct cgroup_subsys_state *cg, ...@@ -903,7 +903,8 @@ bool css_is_ancestor(struct cgroup_subsys_state *cg,
/* Get id and depth of css */ /* Get id and depth of css */
unsigned short css_id(struct cgroup_subsys_state *css); unsigned short css_id(struct cgroup_subsys_state *css);
struct cgroup_subsys_state *cgroup_css_from_dir(struct file *f, int id); struct cgroup_subsys_state *css_from_dir(struct dentry *dentry,
struct cgroup_subsys *ss);
#else /* !CONFIG_CGROUPS */ #else /* !CONFIG_CGROUPS */
......
...@@ -5700,34 +5700,28 @@ struct cgroup_subsys_state *css_lookup(struct cgroup_subsys *ss, int id) ...@@ -5700,34 +5700,28 @@ struct cgroup_subsys_state *css_lookup(struct cgroup_subsys *ss, int id)
EXPORT_SYMBOL_GPL(css_lookup); EXPORT_SYMBOL_GPL(css_lookup);
/** /**
* cgroup_css_from_dir - get corresponding css from file open on cgroup dir * css_from_dir - get corresponding css from the dentry of a cgroup dir
* @f: directory file of interest * @dentry: directory dentry of interest
* @id: subsystem id of interest * @ss: subsystem of interest
* *
* Must be called under RCU read lock. The caller is responsible for * Must be called under RCU read lock. The caller is responsible for
* pinning the returned css if it needs to be accessed outside the RCU * pinning the returned css if it needs to be accessed outside the RCU
* critical section. * critical section.
*/ */
struct cgroup_subsys_state *cgroup_css_from_dir(struct file *f, int id) struct cgroup_subsys_state *css_from_dir(struct dentry *dentry,
struct cgroup_subsys *ss)
{ {
struct cgroup *cgrp; struct cgroup *cgrp;
struct inode *inode;
struct cgroup_subsys_state *css;
WARN_ON_ONCE(!rcu_read_lock_held()); WARN_ON_ONCE(!rcu_read_lock_held());
inode = file_inode(f); /* is @dentry a cgroup dir? */
/* check in cgroup filesystem dir */ if (!dentry->d_inode ||
if (inode->i_op != &cgroup_dir_inode_operations) dentry->d_inode->i_op != &cgroup_dir_inode_operations)
return ERR_PTR(-EBADF); return ERR_PTR(-EBADF);
if (id < 0 || id >= CGROUP_SUBSYS_COUNT) cgrp = __d_cgrp(dentry);
return ERR_PTR(-EINVAL); return cgroup_css(cgrp, ss->subsys_id) ?: ERR_PTR(-ENOENT);
/* get cgroup */
cgrp = __d_cgrp(f->f_dentry);
css = cgroup_css(cgrp, id);
return css ? css : ERR_PTR(-ENOENT);
} }
/** /**
......
...@@ -593,7 +593,7 @@ static inline int perf_cgroup_connect(int fd, struct perf_event *event, ...@@ -593,7 +593,7 @@ static inline int perf_cgroup_connect(int fd, struct perf_event *event,
rcu_read_lock(); rcu_read_lock();
css = cgroup_css_from_dir(f.file, perf_subsys_id); css = css_from_dir(f.file->f_dentry, &perf_subsys);
if (IS_ERR(css)) { if (IS_ERR(css)) {
ret = PTR_ERR(css); ret = PTR_ERR(css);
goto out; goto out;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment