提交 a043e3b2 编写于 作者: L Li Zefan 提交者: Linus Torvalds

cgroup: fix comments

fix:
- comments about need_forkexit_callback
- comments about release agent
- typo and comment style, etc.
Signed-off-by: NLi Zefan <lizf@cn.fujitsu.com>
Acked-by: NPaul Menage <menage@google.com>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 d19e0583
...@@ -175,7 +175,7 @@ struct css_set { ...@@ -175,7 +175,7 @@ struct css_set {
* *
* *
* When reading/writing to a file: * When reading/writing to a file:
* - the cgroup to use in file->f_dentry->d_parent->d_fsdata * - the cgroup to use is file->f_dentry->d_parent->d_fsdata
* - the 'cftype' of the file is file->f_dentry->d_fsdata * - the 'cftype' of the file is file->f_dentry->d_fsdata
*/ */
......
...@@ -113,9 +113,9 @@ static int root_count; ...@@ -113,9 +113,9 @@ static int root_count;
#define dummytop (&rootnode.top_cgroup) #define dummytop (&rootnode.top_cgroup)
/* This flag indicates whether tasks in the fork and exit paths should /* This flag indicates whether tasks in the fork and exit paths should
* take callback_mutex and check for fork/exit handlers to call. This * check for fork/exit handlers to call. This avoids us having to do
* avoids us having to do extra work in the fork/exit path if none of the * extra work in the fork/exit path if none of the subsystems need to
* subsystems need to be called. * be called.
*/ */
static int need_forkexit_callback; static int need_forkexit_callback;
...@@ -307,7 +307,6 @@ static inline void put_css_set_taskexit(struct css_set *cg) ...@@ -307,7 +307,6 @@ static inline void put_css_set_taskexit(struct css_set *cg)
* template: location in which to build the desired set of subsystem * template: location in which to build the desired set of subsystem
* state objects for the new cgroup group * state objects for the new cgroup group
*/ */
static struct css_set *find_existing_css_set( static struct css_set *find_existing_css_set(
struct css_set *oldcg, struct css_set *oldcg,
struct cgroup *cgrp, struct cgroup *cgrp,
...@@ -354,7 +353,6 @@ static struct css_set *find_existing_css_set( ...@@ -354,7 +353,6 @@ static struct css_set *find_existing_css_set(
* and chains them on tmp through their cgrp_link_list fields. Returns 0 on * and chains them on tmp through their cgrp_link_list fields. Returns 0 on
* success or a negative error * success or a negative error
*/ */
static int allocate_cg_links(int count, struct list_head *tmp) static int allocate_cg_links(int count, struct list_head *tmp)
{ {
struct cg_cgroup_link *link; struct cg_cgroup_link *link;
...@@ -396,7 +394,6 @@ static void free_cg_links(struct list_head *tmp) ...@@ -396,7 +394,6 @@ static void free_cg_links(struct list_head *tmp)
* substituted into the appropriate hierarchy. Must be called with * substituted into the appropriate hierarchy. Must be called with
* cgroup_mutex held * cgroup_mutex held
*/ */
static struct css_set *find_css_set( static struct css_set *find_css_set(
struct css_set *oldcg, struct cgroup *cgrp) struct css_set *oldcg, struct cgroup *cgrp)
{ {
...@@ -507,8 +504,8 @@ static struct css_set *find_css_set( ...@@ -507,8 +504,8 @@ static struct css_set *find_css_set(
* critical pieces of code here. The exception occurs on cgroup_exit(), * critical pieces of code here. The exception occurs on cgroup_exit(),
* when a task in a notify_on_release cgroup exits. Then cgroup_mutex * when a task in a notify_on_release cgroup exits. Then cgroup_mutex
* is taken, and if the cgroup count is zero, a usermode call made * is taken, and if the cgroup count is zero, a usermode call made
* to /sbin/cgroup_release_agent with the name of the cgroup (path * to the release agent with the name of the cgroup (path relative to
* relative to the root of cgroup file system) as the argument. * the root of cgroup file system) as the argument.
* *
* A cgroup can only be deleted if both its 'count' of using tasks * A cgroup can only be deleted if both its 'count' of using tasks
* is zero, and its list of 'children' cgroups is empty. Since all * is zero, and its list of 'children' cgroups is empty. Since all
...@@ -521,7 +518,7 @@ static struct css_set *find_css_set( ...@@ -521,7 +518,7 @@ static struct css_set *find_css_set(
* *
* The need for this exception arises from the action of * The need for this exception arises from the action of
* cgroup_attach_task(), which overwrites one tasks cgroup pointer with * cgroup_attach_task(), which overwrites one tasks cgroup pointer with
* another. It does so using cgroup_mutexe, however there are * another. It does so using cgroup_mutex, however there are
* several performance critical places that need to reference * several performance critical places that need to reference
* task->cgroup without the expense of grabbing a system global * task->cgroup without the expense of grabbing a system global
* mutex. Therefore except as noted below, when dereferencing or, as * mutex. Therefore except as noted below, when dereferencing or, as
...@@ -537,7 +534,6 @@ static struct css_set *find_css_set( ...@@ -537,7 +534,6 @@ static struct css_set *find_css_set(
* cgroup_lock - lock out any changes to cgroup structures * cgroup_lock - lock out any changes to cgroup structures
* *
*/ */
void cgroup_lock(void) void cgroup_lock(void)
{ {
mutex_lock(&cgroup_mutex); mutex_lock(&cgroup_mutex);
...@@ -548,7 +544,6 @@ void cgroup_lock(void) ...@@ -548,7 +544,6 @@ void cgroup_lock(void)
* *
* Undo the lock taken in a previous cgroup_lock() call. * Undo the lock taken in a previous cgroup_lock() call.
*/ */
void cgroup_unlock(void) void cgroup_unlock(void)
{ {
mutex_unlock(&cgroup_mutex); mutex_unlock(&cgroup_mutex);
...@@ -590,7 +585,6 @@ static struct inode *cgroup_new_inode(mode_t mode, struct super_block *sb) ...@@ -590,7 +585,6 @@ static struct inode *cgroup_new_inode(mode_t mode, struct super_block *sb)
* Call subsys's pre_destroy handler. * Call subsys's pre_destroy handler.
* This is called before css refcnt check. * This is called before css refcnt check.
*/ */
static void cgroup_call_pre_destroy(struct cgroup *cgrp) static void cgroup_call_pre_destroy(struct cgroup *cgrp)
{ {
struct cgroup_subsys *ss; struct cgroup_subsys *ss;
...@@ -600,7 +594,6 @@ static void cgroup_call_pre_destroy(struct cgroup *cgrp) ...@@ -600,7 +594,6 @@ static void cgroup_call_pre_destroy(struct cgroup *cgrp)
return; return;
} }
static void cgroup_diput(struct dentry *dentry, struct inode *inode) static void cgroup_diput(struct dentry *dentry, struct inode *inode)
{ {
/* is dentry a directory ? if so, kfree() associated cgroup */ /* is dentry a directory ? if so, kfree() associated cgroup */
...@@ -1129,7 +1122,12 @@ static inline struct cftype *__d_cft(struct dentry *dentry) ...@@ -1129,7 +1122,12 @@ static inline struct cftype *__d_cft(struct dentry *dentry)
return dentry->d_fsdata; return dentry->d_fsdata;
} }
/* /**
* cgroup_path - generate the path of a cgroup
* @cgrp: the cgroup in question
* @buf: the buffer to write the path into
* @buflen: the length of the buffer
*
* Called with cgroup_mutex held. Writes path of cgroup into buf. * Called with cgroup_mutex held. Writes path of cgroup into buf.
* Returns 0 on success, -errno on error. * Returns 0 on success, -errno on error.
*/ */
...@@ -1188,11 +1186,13 @@ static void get_first_subsys(const struct cgroup *cgrp, ...@@ -1188,11 +1186,13 @@ static void get_first_subsys(const struct cgroup *cgrp,
*subsys_id = test_ss->subsys_id; *subsys_id = test_ss->subsys_id;
} }
/* /**
* Attach task 'tsk' to cgroup 'cgrp' * cgroup_attach_task - attach task 'tsk' to cgroup 'cgrp'
* @cgrp: the cgroup the task is attaching to
* @tsk: the task to be attached
* *
* Call holding cgroup_mutex. May take task_lock of * Call holding cgroup_mutex. May take task_lock of
* the task 'pid' during call. * the task 'tsk' during call.
*/ */
int cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk) int cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk)
{ {
...@@ -1293,7 +1293,6 @@ static int attach_task_by_pid(struct cgroup *cgrp, char *pidbuf) ...@@ -1293,7 +1293,6 @@ static int attach_task_by_pid(struct cgroup *cgrp, char *pidbuf)
} }
/* The various types of files and directories in a cgroup file system */ /* The various types of files and directories in a cgroup file system */
enum cgroup_filetype { enum cgroup_filetype {
FILE_ROOT, FILE_ROOT,
FILE_DIR, FILE_DIR,
...@@ -1585,11 +1584,10 @@ static int cgroup_create_file(struct dentry *dentry, int mode, ...@@ -1585,11 +1584,10 @@ static int cgroup_create_file(struct dentry *dentry, int mode,
/* /*
* cgroup_create_dir - create a directory for an object. * cgroup_create_dir - create a directory for an object.
* cgrp: the cgroup we create the directory for. * @cgrp: the cgroup we create the directory for. It must have a valid
* It must have a valid ->parent field * ->parent field. And we are going to fill its ->dentry field.
* And we are going to fill its ->dentry field. * @dentry: dentry of the new cgroup
* dentry: dentry of the new cgroup * @mode: mode to set on new directory.
* mode: mode to set on new directory.
*/ */
static int cgroup_create_dir(struct cgroup *cgrp, struct dentry *dentry, static int cgroup_create_dir(struct cgroup *cgrp, struct dentry *dentry,
int mode) int mode)
...@@ -1651,8 +1649,12 @@ int cgroup_add_files(struct cgroup *cgrp, ...@@ -1651,8 +1649,12 @@ int cgroup_add_files(struct cgroup *cgrp,
return 0; return 0;
} }
/* Count the number of tasks in a cgroup. */ /**
* cgroup_task_count - count the number of tasks in a cgroup.
* @cgrp: the cgroup in question
*
* Return the number of tasks in the cgroup.
*/
int cgroup_task_count(const struct cgroup *cgrp) int cgroup_task_count(const struct cgroup *cgrp)
{ {
int count = 0; int count = 0;
...@@ -1962,12 +1964,13 @@ static int pid_array_load(pid_t *pidarray, int npids, struct cgroup *cgrp) ...@@ -1962,12 +1964,13 @@ static int pid_array_load(pid_t *pidarray, int npids, struct cgroup *cgrp)
} }
/** /**
* Build and fill cgroupstats so that taskstats can export it to user * cgroupstats_build - build and fill cgroupstats
* space.
*
* @stats: cgroupstats to fill information into * @stats: cgroupstats to fill information into
* @dentry: A dentry entry belonging to the cgroup for which stats have * @dentry: A dentry entry belonging to the cgroup for which stats have
* been requested. * been requested.
*
* Build and fill cgroupstats so that taskstats can export it to user
* space.
*/ */
int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry) int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry)
{ {
...@@ -2200,13 +2203,12 @@ static void init_cgroup_css(struct cgroup_subsys_state *css, ...@@ -2200,13 +2203,12 @@ static void init_cgroup_css(struct cgroup_subsys_state *css,
/* /*
* cgroup_create - create a cgroup * cgroup_create - create a cgroup
* parent: cgroup that will be parent of the new cgroup. * @parent: cgroup that will be parent of the new cgroup
* name: name of the new cgroup. Will be strcpy'ed. * @dentry: dentry of the new cgroup
* mode: mode to set on new inode * @mode: mode to set on new inode
* *
* Must be called with the mutex on the parent inode held * Must be called with the mutex on the parent inode held
*/ */
static long cgroup_create(struct cgroup *parent, struct dentry *dentry, static long cgroup_create(struct cgroup *parent, struct dentry *dentry,
int mode) int mode)
{ {
...@@ -2349,13 +2351,12 @@ static int cgroup_rmdir(struct inode *unused_dir, struct dentry *dentry) ...@@ -2349,13 +2351,12 @@ static int cgroup_rmdir(struct inode *unused_dir, struct dentry *dentry)
parent = cgrp->parent; parent = cgrp->parent;
root = cgrp->root; root = cgrp->root;
sb = root->sb; sb = root->sb;
/* /*
* Call pre_destroy handlers of subsys * Call pre_destroy handlers of subsys. Notify subsystems
* that rmdir() request comes.
*/ */
cgroup_call_pre_destroy(cgrp); cgroup_call_pre_destroy(cgrp);
/*
* Notify subsyses that rmdir() request comes.
*/
if (cgroup_has_css_refs(cgrp)) { if (cgroup_has_css_refs(cgrp)) {
mutex_unlock(&cgroup_mutex); mutex_unlock(&cgroup_mutex);
...@@ -2431,8 +2432,10 @@ static void cgroup_init_subsys(struct cgroup_subsys *ss) ...@@ -2431,8 +2432,10 @@ static void cgroup_init_subsys(struct cgroup_subsys *ss)
} }
/** /**
* cgroup_init_early - initialize cgroups at system boot, and * cgroup_init_early - cgroup initialization at system boot
* initialize any subsystems that request early init. *
* Initialize cgroups at system boot, and initialize any
* subsystems that request early init.
*/ */
int __init cgroup_init_early(void) int __init cgroup_init_early(void)
{ {
...@@ -2474,8 +2477,10 @@ int __init cgroup_init_early(void) ...@@ -2474,8 +2477,10 @@ int __init cgroup_init_early(void)
} }
/** /**
* cgroup_init - register cgroup filesystem and /proc file, and * cgroup_init - cgroup initialization
* initialize any subsystems that didn't request early init. *
* Register cgroup filesystem and /proc file, and initialize
* any subsystems that didn't request early init.
*/ */
int __init cgroup_init(void) int __init cgroup_init(void)
{ {
...@@ -2618,7 +2623,7 @@ static struct file_operations proc_cgroupstats_operations = { ...@@ -2618,7 +2623,7 @@ static struct file_operations proc_cgroupstats_operations = {
/** /**
* cgroup_fork - attach newly forked task to its parents cgroup. * cgroup_fork - attach newly forked task to its parents cgroup.
* @tsk: pointer to task_struct of forking parent process. * @child: pointer to task_struct of forking parent process.
* *
* Description: A task inherits its parent's cgroup at fork(). * Description: A task inherits its parent's cgroup at fork().
* *
...@@ -2642,9 +2647,12 @@ void cgroup_fork(struct task_struct *child) ...@@ -2642,9 +2647,12 @@ void cgroup_fork(struct task_struct *child)
} }
/** /**
* cgroup_fork_callbacks - called on a new task very soon before * cgroup_fork_callbacks - run fork callbacks
* adding it to the tasklist. No need to take any locks since no-one * @child: the new task
* can be operating on this task *
* Called on a new task very soon before adding it to the
* tasklist. No need to take any locks since no-one can
* be operating on this task.
*/ */
void cgroup_fork_callbacks(struct task_struct *child) void cgroup_fork_callbacks(struct task_struct *child)
{ {
...@@ -2659,11 +2667,14 @@ void cgroup_fork_callbacks(struct task_struct *child) ...@@ -2659,11 +2667,14 @@ void cgroup_fork_callbacks(struct task_struct *child)
} }
/** /**
* cgroup_post_fork - called on a new task after adding it to the * cgroup_post_fork - called on a new task after adding it to the task list
* task list. Adds the task to the list running through its css_set * @child: the task in question
* if necessary. Has to be after the task is visible on the task list *
* in case we race with the first call to cgroup_iter_start() - to * Adds the task to the list running through its css_set if necessary.
* guarantee that the new task ends up on its list. */ * Has to be after the task is visible on the task list in case we race
* with the first call to cgroup_iter_start() - to guarantee that the
* new task ends up on its list.
*/
void cgroup_post_fork(struct task_struct *child) void cgroup_post_fork(struct task_struct *child)
{ {
if (use_task_css_set_links) { if (use_task_css_set_links) {
...@@ -2676,6 +2687,7 @@ void cgroup_post_fork(struct task_struct *child) ...@@ -2676,6 +2687,7 @@ void cgroup_post_fork(struct task_struct *child)
/** /**
* cgroup_exit - detach cgroup from exiting task * cgroup_exit - detach cgroup from exiting task
* @tsk: pointer to task_struct of exiting process * @tsk: pointer to task_struct of exiting process
* @run_callback: run exit callbacks?
* *
* Description: Detach cgroup from @tsk and release it. * Description: Detach cgroup from @tsk and release it.
* *
...@@ -2706,7 +2718,6 @@ void cgroup_post_fork(struct task_struct *child) ...@@ -2706,7 +2718,6 @@ void cgroup_post_fork(struct task_struct *child)
* top_cgroup isn't going away, and either task has PF_EXITING set, * top_cgroup isn't going away, and either task has PF_EXITING set,
* which wards off any cgroup_attach_task() attempts, or task is a failed * which wards off any cgroup_attach_task() attempts, or task is a failed
* fork, never visible to cgroup_attach_task. * fork, never visible to cgroup_attach_task.
*
*/ */
void cgroup_exit(struct task_struct *tsk, int run_callbacks) void cgroup_exit(struct task_struct *tsk, int run_callbacks)
{ {
...@@ -2743,9 +2754,13 @@ void cgroup_exit(struct task_struct *tsk, int run_callbacks) ...@@ -2743,9 +2754,13 @@ void cgroup_exit(struct task_struct *tsk, int run_callbacks)
} }
/** /**
* cgroup_clone - duplicate the current cgroup in the hierarchy * cgroup_clone - clone the cgroup the given subsystem is attached to
* that the given subsystem is attached to, and move this task into * @tsk: the task to be moved
* the new child * @subsys: the given subsystem
*
* Duplicate the current cgroup in the hierarchy that the given
* subsystem is attached to, and move this task into the new
* child.
*/ */
int cgroup_clone(struct task_struct *tsk, struct cgroup_subsys *subsys) int cgroup_clone(struct task_struct *tsk, struct cgroup_subsys *subsys)
{ {
...@@ -2858,9 +2873,12 @@ int cgroup_clone(struct task_struct *tsk, struct cgroup_subsys *subsys) ...@@ -2858,9 +2873,12 @@ int cgroup_clone(struct task_struct *tsk, struct cgroup_subsys *subsys)
return ret; return ret;
} }
/* /**
* See if "cgrp" is a descendant of the current task's cgroup in * cgroup_is_descendant - see if @cgrp is a descendant of current task's cgrp
* the appropriate hierarchy * @cgrp: the cgroup in question
*
* See if @cgrp is a descendant of the current task's cgroup in
* the appropriate hierarchy.
* *
* If we are sending in dummytop, then presumably we are creating * If we are sending in dummytop, then presumably we are creating
* the top cgroup in the subsystem. * the top cgroup in the subsystem.
...@@ -2939,9 +2957,7 @@ void __css_put(struct cgroup_subsys_state *css) ...@@ -2939,9 +2957,7 @@ void __css_put(struct cgroup_subsys_state *css)
* release agent task. We don't bother to wait because the caller of * release agent task. We don't bother to wait because the caller of
* this routine has no use for the exit status of the release agent * this routine has no use for the exit status of the release agent
* task, so no sense holding our caller up for that. * task, so no sense holding our caller up for that.
*
*/ */
static void cgroup_release_agent(struct work_struct *work) static void cgroup_release_agent(struct work_struct *work)
{ {
BUG_ON(work != &release_agent_work); BUG_ON(work != &release_agent_work);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册