cgroup: relocate cgroup_rm_cftypes()
cftype handling is about to be revamped. Relocate cgroup_rm_cftypes() above cgroup_add_cftypes() in preparation. This is pure relocation. Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: Li Zefan <lizefan@huawei.com>
This commit is contained in:
parent
86bf4b6875
commit
80b1358699
|
@ -2417,6 +2417,41 @@ static int cgroup_init_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* cgroup_rm_cftypes - remove an array of cftypes from a subsystem
|
||||
* @cfts: zero-length name terminated array of cftypes
|
||||
*
|
||||
* Unregister @cfts. Files described by @cfts are removed from all
|
||||
* existing cgroups and all future cgroups won't have them either. This
|
||||
* function can be called anytime whether @cfts' subsys is attached or not.
|
||||
*
|
||||
* Returns 0 on successful unregistration, -ENOENT if @cfts is not
|
||||
* registered.
|
||||
*/
|
||||
int cgroup_rm_cftypes(struct cftype *cfts)
|
||||
{
|
||||
struct cftype *found = NULL;
|
||||
struct cftype_set *set;
|
||||
|
||||
if (!cfts || !cfts[0].ss)
|
||||
return -ENOENT;
|
||||
|
||||
cgroup_cfts_prepare();
|
||||
|
||||
list_for_each_entry(set, &cfts[0].ss->cftsets, node) {
|
||||
if (set->cfts == cfts) {
|
||||
list_del(&set->node);
|
||||
kfree(set);
|
||||
found = cfts;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
cgroup_cfts_commit(found, false);
|
||||
cgroup_exit_cftypes(cfts);
|
||||
return found ? 0 : -ENOENT;
|
||||
}
|
||||
|
||||
/**
|
||||
* cgroup_add_cftypes - add an array of cftypes to a subsystem
|
||||
* @ss: target cgroup subsystem
|
||||
|
@ -2454,41 +2489,6 @@ int cgroup_add_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(cgroup_add_cftypes);
|
||||
|
||||
/**
|
||||
* cgroup_rm_cftypes - remove an array of cftypes from a subsystem
|
||||
* @cfts: zero-length name terminated array of cftypes
|
||||
*
|
||||
* Unregister @cfts. Files described by @cfts are removed from all
|
||||
* existing cgroups and all future cgroups won't have them either. This
|
||||
* function can be called anytime whether @cfts' subsys is attached or not.
|
||||
*
|
||||
* Returns 0 on successful unregistration, -ENOENT if @cfts is not
|
||||
* registered.
|
||||
*/
|
||||
int cgroup_rm_cftypes(struct cftype *cfts)
|
||||
{
|
||||
struct cftype *found = NULL;
|
||||
struct cftype_set *set;
|
||||
|
||||
if (!cfts || !cfts[0].ss)
|
||||
return -ENOENT;
|
||||
|
||||
cgroup_cfts_prepare();
|
||||
|
||||
list_for_each_entry(set, &cfts[0].ss->cftsets, node) {
|
||||
if (set->cfts == cfts) {
|
||||
list_del(&set->node);
|
||||
kfree(set);
|
||||
found = cfts;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
cgroup_cfts_commit(found, false);
|
||||
cgroup_exit_cftypes(cfts);
|
||||
return found ? 0 : -ENOENT;
|
||||
}
|
||||
|
||||
/**
|
||||
* cgroup_task_count - count the number of tasks in a cgroup.
|
||||
* @cgrp: the cgroup in question
|
||||
|
|
Loading…
Reference in New Issue