|
@@ -5416,55 +5416,6 @@ struct cgroup_subsys_state *css_lookup(struct cgroup_subsys *ss, int id)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(css_lookup);
|
|
|
|
|
|
-/**
|
|
|
- * css_get_next - lookup next cgroup under specified hierarchy.
|
|
|
- * @ss: pointer to subsystem
|
|
|
- * @id: current position of iteration.
|
|
|
- * @root: pointer to css. search tree under this.
|
|
|
- * @foundid: position of found object.
|
|
|
- *
|
|
|
- * Search next css under the specified hierarchy of rootid. Calling under
|
|
|
- * rcu_read_lock() is necessary. Returns NULL if it reaches the end.
|
|
|
- */
|
|
|
-struct cgroup_subsys_state *
|
|
|
-css_get_next(struct cgroup_subsys *ss, int id,
|
|
|
- struct cgroup_subsys_state *root, int *foundid)
|
|
|
-{
|
|
|
- struct cgroup_subsys_state *ret = NULL;
|
|
|
- struct css_id *tmp;
|
|
|
- int tmpid;
|
|
|
- int rootid = css_id(root);
|
|
|
- int depth = css_depth(root);
|
|
|
-
|
|
|
- if (!rootid)
|
|
|
- return NULL;
|
|
|
-
|
|
|
- BUG_ON(!ss->use_id);
|
|
|
- WARN_ON_ONCE(!rcu_read_lock_held());
|
|
|
-
|
|
|
- /* fill start point for scan */
|
|
|
- tmpid = id;
|
|
|
- while (1) {
|
|
|
- /*
|
|
|
- * scan next entry from bitmap(tree), tmpid is updated after
|
|
|
- * idr_get_next().
|
|
|
- */
|
|
|
- tmp = idr_get_next(&ss->idr, &tmpid);
|
|
|
- if (!tmp)
|
|
|
- break;
|
|
|
- if (tmp->depth >= depth && tmp->stack[depth] == rootid) {
|
|
|
- ret = rcu_dereference(tmp->css);
|
|
|
- if (ret) {
|
|
|
- *foundid = tmpid;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- /* continue to scan from next id */
|
|
|
- tmpid = tmpid + 1;
|
|
|
- }
|
|
|
- return ret;
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* get corresponding css from file open on cgroupfs directory
|
|
|
*/
|