Lines Matching refs:cgrp
220 static int cgroup_destroy_locked(struct cgroup *cgrp);
221 static int create_css(struct cgroup *cgrp, struct cgroup_subsys *ss,
226 struct cgroup *cgrp, struct cftype cfts[],
295 static bool cgroup_on_dfl(const struct cgroup *cgrp) in cgroup_on_dfl() argument
297 return cgrp->root == &cgrp_dfl_root; in cgroup_on_dfl()
331 static struct cgroup *cgroup_parent(struct cgroup *cgrp) in cgroup_parent() argument
333 struct cgroup_subsys_state *parent_css = cgrp->self.parent; in cgroup_parent()
351 static struct cgroup_subsys_state *cgroup_css(struct cgroup *cgrp, in cgroup_css() argument
355 return rcu_dereference_check(cgrp->subsys[ss->id], in cgroup_css()
358 return &cgrp->self; in cgroup_css()
371 static struct cgroup_subsys_state *cgroup_e_css(struct cgroup *cgrp, in cgroup_e_css() argument
377 return &cgrp->self; in cgroup_e_css()
379 if (!(cgrp->root->subsys_mask & (1 << ss->id))) in cgroup_e_css()
386 while (cgroup_parent(cgrp) && in cgroup_e_css()
387 !(cgroup_parent(cgrp)->child_subsys_mask & (1 << ss->id))) in cgroup_e_css()
388 cgrp = cgroup_parent(cgrp); in cgroup_e_css()
390 return cgroup_css(cgrp, ss); in cgroup_e_css()
404 struct cgroup_subsys_state *cgroup_get_e_css(struct cgroup *cgrp, in cgroup_get_e_css() argument
412 css = cgroup_css(cgrp, ss); in cgroup_get_e_css()
416 cgrp = cgroup_parent(cgrp); in cgroup_get_e_css()
417 } while (cgrp); in cgroup_get_e_css()
427 static inline bool cgroup_is_dead(const struct cgroup *cgrp) in cgroup_is_dead() argument
429 return !(cgrp->self.flags & CSS_ONLINE); in cgroup_is_dead()
432 static void cgroup_get(struct cgroup *cgrp) in cgroup_get() argument
434 WARN_ON_ONCE(cgroup_is_dead(cgrp)); in cgroup_get()
435 css_get(&cgrp->self); in cgroup_get()
438 static bool cgroup_tryget(struct cgroup *cgrp) in cgroup_tryget() argument
440 return css_tryget(&cgrp->self); in cgroup_tryget()
443 static void cgroup_put(struct cgroup *cgrp) in cgroup_put() argument
445 css_put(&cgrp->self); in cgroup_put()
450 struct cgroup *cgrp = of->kn->parent->priv; in of_css() local
462 return rcu_dereference_raw(cgrp->subsys[cft->ss->id]); in of_css()
464 return &cgrp->self; in of_css()
477 bool cgroup_is_descendant(struct cgroup *cgrp, struct cgroup *ancestor) in cgroup_is_descendant() argument
479 while (cgrp) { in cgroup_is_descendant()
480 if (cgrp == ancestor) in cgroup_is_descendant()
482 cgrp = cgroup_parent(cgrp); in cgroup_is_descendant()
487 static int notify_on_release(const struct cgroup *cgrp) in notify_on_release() argument
489 return test_bit(CGRP_NOTIFY_ON_RELEASE, &cgrp->flags); in notify_on_release()
500 #define for_each_css(css, ssid, cgrp) \ argument
503 (cgrp)->subsys[(ssid)], \
515 #define for_each_e_css(css, ssid, cgrp) \ argument
517 if (!((css) = cgroup_e_css(cgrp, cgroup_subsys[(ssid)]))) \
553 #define cgroup_for_each_live_child(child, cgrp) \ argument
554 list_for_each_entry((child), &(cgrp)->self.children, self.sibling) \
561 static void check_for_release(struct cgroup *cgrp);
573 struct cgroup *cgrp; member
629 static void cgroup_update_populated(struct cgroup *cgrp, bool populated) in cgroup_update_populated() argument
637 trigger = !cgrp->populated_cnt++; in cgroup_update_populated()
639 trigger = !--cgrp->populated_cnt; in cgroup_update_populated()
644 check_for_release(cgrp); in cgroup_update_populated()
645 cgroup_file_notify(&cgrp->events_file); in cgroup_update_populated()
647 cgrp = cgroup_parent(cgrp); in cgroup_update_populated()
648 } while (cgrp); in cgroup_update_populated()
666 cgroup_update_populated(link->cgrp, populated); in css_set_update_populated()
774 if (cgroup_parent(link->cgrp)) in put_css_set_locked()
775 cgroup_put(link->cgrp); in put_css_set_locked()
854 cgrp1 = link1->cgrp; in compare_css_sets()
855 cgrp2 = link2->cgrp; in compare_css_sets()
884 struct cgroup *cgrp, in find_existing_css_set() argument
887 struct cgroup_root *root = cgrp->root; in find_existing_css_set()
904 template[i] = cgroup_e_css(cgrp, ss); in find_existing_css_set()
916 if (!compare_css_sets(cset, old_cset, cgrp, template)) in find_existing_css_set()
970 struct cgroup *cgrp) in link_css_set() argument
976 if (cgroup_on_dfl(cgrp)) in link_css_set()
977 cset->dfl_cgrp = cgrp; in link_css_set()
981 link->cgrp = cgrp; in link_css_set()
987 list_move_tail(&link->cset_link, &cgrp->cset_links); in link_css_set()
990 if (cgroup_parent(cgrp)) in link_css_set()
991 cgroup_get(cgrp); in link_css_set()
1003 struct cgroup *cgrp) in find_css_set() argument
1018 cset = find_existing_css_set(old_cset, cgrp, template); in find_css_set()
1052 struct cgroup *c = link->cgrp; in find_css_set()
1054 if (c->root == cgrp->root) in find_css_set()
1055 c = cgrp; in find_css_set()
1124 struct cgroup *cgrp = &root->cgrp; in cgroup_destroy_root() local
1130 BUG_ON(!list_empty(&cgrp->self.children)); in cgroup_destroy_root()
1141 list_for_each_entry_safe(link, tmp_link, &cgrp->cset_links, cset_link) { in cgroup_destroy_root()
1172 res = &root->cgrp; in cset_cgroup_from_root()
1177 struct cgroup *c = link->cgrp; in cset_cgroup_from_root()
1234 static char *cgroup_file_name(struct cgroup *cgrp, const struct cftype *cft, in cgroup_file_name() argument
1240 !(cgrp->root->flags & CGRP_ROOT_NOPREFIX)) in cgroup_file_name()
1242 cgroup_on_dfl(cgrp) ? ss->name : ss->legacy_name, in cgroup_file_name()
1285 static unsigned long cgroup_calc_child_subsys_mask(struct cgroup *cgrp, in cgroup_calc_child_subsys_mask() argument
1288 struct cgroup *parent = cgroup_parent(cgrp); in cgroup_calc_child_subsys_mask()
1295 if (!cgroup_on_dfl(cgrp)) in cgroup_calc_child_subsys_mask()
1312 new_ss_mask &= cgrp->root->subsys_mask; in cgroup_calc_child_subsys_mask()
1329 static void cgroup_refresh_child_subsys_mask(struct cgroup *cgrp) in cgroup_refresh_child_subsys_mask() argument
1331 cgrp->child_subsys_mask = in cgroup_refresh_child_subsys_mask()
1332 cgroup_calc_child_subsys_mask(cgrp, cgrp->subtree_control); in cgroup_refresh_child_subsys_mask()
1347 struct cgroup *cgrp; in cgroup_kn_unlock() local
1350 cgrp = kn->priv; in cgroup_kn_unlock()
1352 cgrp = kn->parent->priv; in cgroup_kn_unlock()
1357 cgroup_put(cgrp); in cgroup_kn_unlock()
1377 struct cgroup *cgrp; in cgroup_kn_lock_live() local
1380 cgrp = kn->priv; in cgroup_kn_lock_live()
1382 cgrp = kn->parent->priv; in cgroup_kn_lock_live()
1390 if (!cgroup_tryget(cgrp)) in cgroup_kn_lock_live()
1396 if (!cgroup_is_dead(cgrp)) in cgroup_kn_lock_live()
1397 return cgrp; in cgroup_kn_lock_live()
1403 static void cgroup_rm_file(struct cgroup *cgrp, const struct cftype *cft) in cgroup_rm_file() argument
1410 struct cgroup_subsys_state *css = cgroup_css(cgrp, cft->ss); in cgroup_rm_file()
1418 kernfs_remove_by_name(cgrp->kn, cgroup_file_name(cgrp, cft, name)); in cgroup_rm_file()
1429 struct cgroup *cgrp = cgrp_override ?: css->cgroup; in css_clear_dir() local
1433 cgroup_addrm_files(css, cgrp, cfts, false); in css_clear_dir()
1446 struct cgroup *cgrp = cgrp_override ?: css->cgroup; in css_populate_dir() local
1451 if (cgroup_on_dfl(cgrp)) in css_populate_dir()
1456 return cgroup_addrm_files(&cgrp->self, cgrp, cfts, true); in css_populate_dir()
1460 ret = cgroup_addrm_files(css, cgrp, cfts, true); in css_populate_dir()
1471 cgroup_addrm_files(css, cgrp, cfts, false); in css_populate_dir()
1479 struct cgroup *dcgrp = &dst_root->cgrp; in rebind_subsystems()
1488 if (css_next_child(NULL, cgroup_css(&ss->root->cgrp, ss))) in rebind_subsystems()
1502 struct cgroup *scgrp = &ss->root->cgrp; in rebind_subsystems()
1538 struct cgroup *scgrp = &src_root->cgrp; in rebind_subsystems()
1601 if (test_bit(CGRP_CPUSET_CLONE_CHILDREN, &root->cgrp.flags)) in cgroup_show_options()
1797 if (!list_empty(&root->cgrp.self.children)) { in cgroup_remount()
1874 static void init_cgroup_housekeeping(struct cgroup *cgrp) in init_cgroup_housekeeping() argument
1879 INIT_LIST_HEAD(&cgrp->self.sibling); in init_cgroup_housekeeping()
1880 INIT_LIST_HEAD(&cgrp->self.children); in init_cgroup_housekeeping()
1881 INIT_LIST_HEAD(&cgrp->cset_links); in init_cgroup_housekeeping()
1882 INIT_LIST_HEAD(&cgrp->pidlists); in init_cgroup_housekeeping()
1883 mutex_init(&cgrp->pidlist_mutex); in init_cgroup_housekeeping()
1884 cgrp->self.cgroup = cgrp; in init_cgroup_housekeeping()
1885 cgrp->self.flags |= CSS_ONLINE; in init_cgroup_housekeeping()
1888 INIT_LIST_HEAD(&cgrp->e_csets[ssid]); in init_cgroup_housekeeping()
1890 init_waitqueue_head(&cgrp->offline_waitq); in init_cgroup_housekeeping()
1891 INIT_WORK(&cgrp->release_agent_work, cgroup_release_agent); in init_cgroup_housekeeping()
1897 struct cgroup *cgrp = &root->cgrp; in init_cgroup_root() local
1901 cgrp->root = root; in init_cgroup_root()
1902 init_cgroup_housekeeping(cgrp); in init_cgroup_root()
1911 set_bit(CGRP_CPUSET_CLONE_CHILDREN, &root->cgrp.flags); in init_cgroup_root()
1917 struct cgroup *root_cgrp = &root->cgrp; in cgroup_setup_root()
2034 cgroup_get(&root->cgrp); in cgroup_mount()
2051 if (!percpu_ref_tryget_live(&ss->root->cgrp.self.refcnt)) { in cgroup_mount()
2057 cgroup_put(&ss->root->cgrp); in cgroup_mount()
2106 !percpu_ref_tryget_live(&root->cgrp.self.refcnt)) { in cgroup_mount()
2153 cgroup_put(&root->cgrp); in cgroup_mount()
2179 if (!list_empty(&root->cgrp.self.children) || in cgroup_kill_sb()
2181 cgroup_put(&root->cgrp); in cgroup_kill_sb()
2183 percpu_ref_kill(&root->cgrp.self.refcnt); in cgroup_kill_sb()
2210 struct cgroup *cgrp; in task_cgroup_path() local
2220 cgrp = task_cgroup_from_root(task, root); in task_cgroup_path()
2221 path = cgroup_path(cgrp, buf, buflen); in task_cgroup_path()
2613 struct cgroup *cgrp) in cgroup_migrate() argument
2634 return cgroup_taskset_migrate(&tset, cgrp); in cgroup_migrate()
2693 struct cgroup *cgrp; in cgroup_procs_write_permission() local
2697 cgrp = task_cgroup_from_root(task, &cgrp_dfl_root); in cgroup_procs_write_permission()
2700 while (!cgroup_is_descendant(dst_cgrp, cgrp)) in cgroup_procs_write_permission()
2701 cgrp = cgroup_parent(cgrp); in cgroup_procs_write_permission()
2704 inode = kernfs_get_inode(sb, cgrp->procs_file.kn); in cgroup_procs_write_permission()
2725 struct cgroup *cgrp; in __cgroup_procs_write() local
2732 cgrp = cgroup_kn_lock_live(of->kn); in __cgroup_procs_write()
2733 if (!cgrp) in __cgroup_procs_write()
2764 ret = cgroup_procs_write_permission(tsk, cgrp, of); in __cgroup_procs_write()
2766 ret = cgroup_attach_task(cgrp, tsk, threadgroup); in __cgroup_procs_write()
2828 struct cgroup *cgrp; in cgroup_release_agent_write() local
2830 BUILD_BUG_ON(sizeof(cgrp->root->release_agent_path) < PATH_MAX); in cgroup_release_agent_write()
2832 cgrp = cgroup_kn_lock_live(of->kn); in cgroup_release_agent_write()
2833 if (!cgrp) in cgroup_release_agent_write()
2836 strlcpy(cgrp->root->release_agent_path, strstrip(buf), in cgroup_release_agent_write()
2837 sizeof(cgrp->root->release_agent_path)); in cgroup_release_agent_write()
2845 struct cgroup *cgrp = seq_css(seq)->cgroup; in cgroup_release_agent_show() local
2848 seq_puts(seq, cgrp->root->release_agent_path); in cgroup_release_agent_show()
2879 struct cgroup *cgrp = seq_css(seq)->cgroup; in cgroup_root_controllers_show() local
2881 cgroup_print_ss_mask(seq, cgrp->root->subsys_mask & in cgroup_root_controllers_show()
2889 struct cgroup *cgrp = seq_css(seq)->cgroup; in cgroup_controllers_show() local
2891 cgroup_print_ss_mask(seq, cgroup_parent(cgrp)->subtree_control); in cgroup_controllers_show()
2898 struct cgroup *cgrp = seq_css(seq)->cgroup; in cgroup_subtree_control_show() local
2900 cgroup_print_ss_mask(seq, cgrp->subtree_control); in cgroup_subtree_control_show()
2913 static int cgroup_update_dfl_csses(struct cgroup *cgrp) in cgroup_update_dfl_csses() argument
2927 css_for_each_descendant_pre(css, cgroup_css(cgrp, NULL)) { in cgroup_update_dfl_csses()
2931 if (css->cgroup == cgrp) in cgroup_update_dfl_csses()
2935 cgroup_migrate_add_src(link->cset, cgrp, in cgroup_update_dfl_csses()
2959 ret = cgroup_taskset_migrate(&tset, cgrp); in cgroup_update_dfl_csses()
2973 struct cgroup *cgrp, *child; in cgroup_subtree_control_write() local
3008 cgrp = cgroup_kn_lock_live(of->kn); in cgroup_subtree_control_write()
3009 if (!cgrp) in cgroup_subtree_control_write()
3014 if (cgrp->subtree_control & (1 << ssid)) { in cgroup_subtree_control_write()
3021 (cgroup_parent(cgrp) && in cgroup_subtree_control_write()
3022 !(cgroup_parent(cgrp)->subtree_control & (1 << ssid)))) { in cgroup_subtree_control_write()
3027 if (!(cgrp->subtree_control & (1 << ssid))) { in cgroup_subtree_control_write()
3033 cgroup_for_each_live_child(child, cgrp) { in cgroup_subtree_control_write()
3051 if (enable && cgroup_parent(cgrp) && !list_empty(&cgrp->cset_links)) { in cgroup_subtree_control_write()
3061 old_sc = cgrp->subtree_control; in cgroup_subtree_control_write()
3062 old_ss = cgrp->child_subsys_mask; in cgroup_subtree_control_write()
3064 new_ss = cgroup_calc_child_subsys_mask(cgrp, new_sc); in cgroup_subtree_control_write()
3078 cgroup_for_each_live_child(child, cgrp) { in cgroup_subtree_control_write()
3096 cgrp->subtree_control = new_sc; in cgroup_subtree_control_write()
3097 cgrp->child_subsys_mask = new_ss; in cgroup_subtree_control_write()
3109 cgroup_for_each_live_child(child, cgrp) { in cgroup_subtree_control_write()
3112 cgrp->subtree_control & (1 << ssid)); in cgroup_subtree_control_write()
3126 ret = cgroup_update_dfl_csses(cgrp); in cgroup_subtree_control_write()
3142 cgroup_for_each_live_child(child, cgrp) { in cgroup_subtree_control_write()
3162 struct cgroup_subsys_state *this_css = cgroup_css(cgrp, ss); in cgroup_subtree_control_write()
3173 kernfs_activate(cgrp->kn); in cgroup_subtree_control_write()
3180 cgrp->subtree_control = old_sc; in cgroup_subtree_control_write()
3181 cgrp->child_subsys_mask = old_ss; in cgroup_subtree_control_write()
3187 cgroup_for_each_live_child(child, cgrp) { in cgroup_subtree_control_write()
3212 struct cgroup *cgrp = of->kn->parent->priv; in cgroup_file_write() local
3227 css = cgroup_css(cgrp, cft->ss); in cgroup_file_write()
3300 struct cgroup *cgrp = kn->priv; in cgroup_rename() local
3312 if (cgroup_on_dfl(cgrp)) in cgroup_rename()
3348 static int cgroup_add_file(struct cgroup_subsys_state *css, struct cgroup *cgrp, in cgroup_add_file() argument
3359 kn = __kernfs_create_file(cgrp->kn, cgroup_file_name(cgrp, cft, name), in cgroup_add_file()
3393 struct cgroup *cgrp, struct cftype cfts[], in cgroup_addrm_files() argument
3404 if ((cft->flags & __CFTYPE_ONLY_ON_DFL) && !cgroup_on_dfl(cgrp)) in cgroup_addrm_files()
3406 if ((cft->flags & __CFTYPE_NOT_ON_DFL) && cgroup_on_dfl(cgrp)) in cgroup_addrm_files()
3408 if ((cft->flags & CFTYPE_NOT_ON_ROOT) && !cgroup_parent(cgrp)) in cgroup_addrm_files()
3410 if ((cft->flags & CFTYPE_ONLY_ON_ROOT) && cgroup_parent(cgrp)) in cgroup_addrm_files()
3414 ret = cgroup_add_file(css, cgrp, cft); in cgroup_addrm_files()
3423 cgroup_rm_file(cgrp, cft); in cgroup_addrm_files()
3433 struct cgroup *root = &ss->root->cgrp; in cgroup_apply_cftypes()
3441 struct cgroup *cgrp = css->cgroup; in cgroup_apply_cftypes() local
3443 if (cgroup_is_dead(cgrp)) in cgroup_apply_cftypes()
3446 ret = cgroup_addrm_files(css, cgrp, cfts, is_add); in cgroup_apply_cftypes()
3635 static int cgroup_task_count(const struct cgroup *cgrp) in cgroup_task_count() argument
3641 list_for_each_entry(link, &cgrp->cset_links, cset_link) in cgroup_task_count()
4161 static void cgroup_pidlist_destroy_all(struct cgroup *cgrp) in cgroup_pidlist_destroy_all() argument
4165 mutex_lock(&cgrp->pidlist_mutex); in cgroup_pidlist_destroy_all()
4166 list_for_each_entry_safe(l, tmp_l, &cgrp->pidlists, links) in cgroup_pidlist_destroy_all()
4168 mutex_unlock(&cgrp->pidlist_mutex); in cgroup_pidlist_destroy_all()
4171 BUG_ON(!list_empty(&cgrp->pidlists)); in cgroup_pidlist_destroy_all()
4254 static pid_t cgroup_pid_fry(struct cgroup *cgrp, pid_t pid) in cgroup_pid_fry() argument
4256 if (cgroup_on_dfl(cgrp)) in cgroup_pid_fry()
4272 static struct cgroup_pidlist *cgroup_pidlist_find(struct cgroup *cgrp, in cgroup_pidlist_find() argument
4279 lockdep_assert_held(&cgrp->pidlist_mutex); in cgroup_pidlist_find()
4281 list_for_each_entry(l, &cgrp->pidlists, links) in cgroup_pidlist_find()
4293 static struct cgroup_pidlist *cgroup_pidlist_find_create(struct cgroup *cgrp, in cgroup_pidlist_find_create() argument
4298 lockdep_assert_held(&cgrp->pidlist_mutex); in cgroup_pidlist_find_create()
4300 l = cgroup_pidlist_find(cgrp, type); in cgroup_pidlist_find_create()
4313 l->owner = cgrp; in cgroup_pidlist_find_create()
4314 list_add(&l->links, &cgrp->pidlists); in cgroup_pidlist_find_create()
4321 static int pidlist_array_load(struct cgroup *cgrp, enum cgroup_filetype type, in pidlist_array_load() argument
4331 lockdep_assert_held(&cgrp->pidlist_mutex); in pidlist_array_load()
4339 length = cgroup_task_count(cgrp); in pidlist_array_load()
4344 css_task_iter_start(&cgrp->self, &it); in pidlist_array_load()
4359 if (cgroup_on_dfl(cgrp)) in pidlist_array_load()
4366 l = cgroup_pidlist_find_create(cgrp, type); in pidlist_array_load()
4392 struct cgroup *cgrp; in cgroupstats_build() local
4409 cgrp = rcu_dereference(kn->priv); in cgroupstats_build()
4410 if (!cgrp || cgroup_is_dead(cgrp)) { in cgroupstats_build()
4417 css_task_iter_start(&cgrp->self, &it); in cgroupstats_build()
4460 struct cgroup *cgrp = seq_css(s)->cgroup; in cgroup_pidlist_start() local
4466 mutex_lock(&cgrp->pidlist_mutex); in cgroup_pidlist_start()
4475 of->priv = cgroup_pidlist_find(cgrp, type); in cgroup_pidlist_start()
4482 ret = pidlist_array_load(cgrp, type, in cgroup_pidlist_start()
4494 if (cgroup_pid_fry(cgrp, l->list[mid]) == pid) { in cgroup_pidlist_start()
4497 } else if (cgroup_pid_fry(cgrp, l->list[mid]) <= pid) in cgroup_pidlist_start()
4508 *pos = cgroup_pid_fry(cgrp, *iter); in cgroup_pidlist_start()
4689 struct cgroup *cgrp = css->cgroup; in css_free_work_fn() local
4700 cgroup_put(cgrp); in css_free_work_fn()
4706 atomic_dec(&cgrp->root->nr_cgrps); in css_free_work_fn()
4707 cgroup_pidlist_destroy_all(cgrp); in css_free_work_fn()
4708 cancel_work_sync(&cgrp->release_agent_work); in css_free_work_fn()
4710 if (cgroup_parent(cgrp)) { in css_free_work_fn()
4717 cgroup_put(cgroup_parent(cgrp)); in css_free_work_fn()
4718 kernfs_put(cgrp->kn); in css_free_work_fn()
4719 kfree(cgrp); in css_free_work_fn()
4726 cgroup_destroy_root(cgrp->root); in css_free_work_fn()
4745 struct cgroup *cgrp = css->cgroup; in css_release_work_fn() local
4759 cgroup_idr_remove(&cgrp->root->cgroup_idr, cgrp->id); in css_release_work_fn()
4760 cgrp->id = -1; in css_release_work_fn()
4769 RCU_INIT_POINTER(*(void __rcu __force **)&cgrp->kn->priv, NULL); in css_release_work_fn()
4787 struct cgroup_subsys *ss, struct cgroup *cgrp) in init_and_link_css() argument
4791 cgroup_get(cgrp); in init_and_link_css()
4794 css->cgroup = cgrp; in init_and_link_css()
4801 if (cgroup_parent(cgrp)) { in init_and_link_css()
4802 css->parent = cgroup_css(cgroup_parent(cgrp), ss); in init_and_link_css()
4806 BUG_ON(cgroup_css(cgrp, ss)); in init_and_link_css()
4859 static int create_css(struct cgroup *cgrp, struct cgroup_subsys *ss, in create_css() argument
4862 struct cgroup *parent = cgroup_parent(cgrp); in create_css()
4873 init_and_link_css(css, ss, cgrp); in create_css()
4924 struct cgroup *parent, *cgrp; in cgroup_mkdir() local
4941 cgrp = kzalloc(sizeof(*cgrp), GFP_KERNEL); in cgroup_mkdir()
4942 if (!cgrp) { in cgroup_mkdir()
4947 ret = percpu_ref_init(&cgrp->self.refcnt, css_release, 0, GFP_KERNEL); in cgroup_mkdir()
4955 cgrp->id = cgroup_idr_alloc(&root->cgroup_idr, NULL, 2, 0, GFP_KERNEL); in cgroup_mkdir()
4956 if (cgrp->id < 0) { in cgroup_mkdir()
4961 init_cgroup_housekeeping(cgrp); in cgroup_mkdir()
4963 cgrp->self.parent = &parent->self; in cgroup_mkdir()
4964 cgrp->root = root; in cgroup_mkdir()
4967 set_bit(CGRP_NOTIFY_ON_RELEASE, &cgrp->flags); in cgroup_mkdir()
4970 set_bit(CGRP_CPUSET_CLONE_CHILDREN, &cgrp->flags); in cgroup_mkdir()
4973 kn = kernfs_create_dir(parent->kn, name, mode, cgrp); in cgroup_mkdir()
4978 cgrp->kn = kn; in cgroup_mkdir()
4986 cgrp->self.serial_nr = css_serial_nr_next++; in cgroup_mkdir()
4989 list_add_tail_rcu(&cgrp->self.sibling, &cgroup_parent(cgrp)->self.children); in cgroup_mkdir()
4997 cgroup_idr_replace(&root->cgroup_idr, cgrp, cgrp->id); in cgroup_mkdir()
5003 ret = css_populate_dir(&cgrp->self, NULL); in cgroup_mkdir()
5010 ret = create_css(cgrp, ss, in cgroup_mkdir()
5021 if (!cgroup_on_dfl(cgrp)) { in cgroup_mkdir()
5022 cgrp->subtree_control = parent->subtree_control; in cgroup_mkdir()
5023 cgroup_refresh_child_subsys_mask(cgrp); in cgroup_mkdir()
5032 cgroup_idr_remove(&root->cgroup_idr, cgrp->id); in cgroup_mkdir()
5034 percpu_ref_exit(&cgrp->self.refcnt); in cgroup_mkdir()
5036 kfree(cgrp); in cgroup_mkdir()
5042 cgroup_destroy_locked(cgrp); in cgroup_mkdir()
5142 static int cgroup_destroy_locked(struct cgroup *cgrp) in cgroup_destroy_locked() argument
5155 if (cgroup_is_populated(cgrp)) in cgroup_destroy_locked()
5163 if (css_has_online_children(&cgrp->self)) in cgroup_destroy_locked()
5172 cgrp->self.flags &= ~CSS_ONLINE; in cgroup_destroy_locked()
5175 list_for_each_entry(link, &cgrp->cset_links, cset_link) in cgroup_destroy_locked()
5180 for_each_css(css, ssid, cgrp) in cgroup_destroy_locked()
5187 kernfs_remove(cgrp->kn); in cgroup_destroy_locked()
5189 check_for_release(cgroup_parent(cgrp)); in cgroup_destroy_locked()
5192 percpu_ref_kill(&cgrp->self.refcnt); in cgroup_destroy_locked()
5199 struct cgroup *cgrp; in cgroup_rmdir() local
5202 cgrp = cgroup_kn_lock_live(kn); in cgroup_rmdir()
5203 if (!cgrp) in cgroup_rmdir()
5206 ret = cgroup_destroy_locked(cgrp); in cgroup_rmdir()
5233 css = ss->css_alloc(cgroup_css(&cgrp_dfl_root.cgrp, ss)); in cgroup_init_subsys()
5236 init_and_link_css(css, ss, &cgrp_dfl_root.cgrp); in cgroup_init_subsys()
5286 cgrp_dfl_root.cgrp.self.flags |= CSS_NO_REF; in cgroup_init_early()
5350 &cgrp_dfl_root.cgrp.e_csets[ssid]); in cgroup_init()
5434 struct cgroup *cgrp; in proc_cgroup_show() local
5451 cgrp = task_cgroup_from_root(tsk, root); in proc_cgroup_show()
5462 if (cgroup_on_dfl(cgrp) || !(tsk->flags & PF_EXITING)) { in proc_cgroup_show()
5463 path = cgroup_path(cgrp, buf, PATH_MAX); in proc_cgroup_show()
5474 if (cgroup_on_dfl(cgrp) && cgroup_is_dead(cgrp)) in proc_cgroup_show()
5717 static void check_for_release(struct cgroup *cgrp) in check_for_release() argument
5719 if (notify_on_release(cgrp) && !cgroup_is_populated(cgrp) && in check_for_release()
5720 !css_has_online_children(&cgrp->self) && !cgroup_is_dead(cgrp)) in check_for_release()
5721 schedule_work(&cgrp->release_agent_work); in check_for_release()
5749 struct cgroup *cgrp = in cgroup_release_agent() local
5757 agentbuf = kstrdup(cgrp->root->release_agent_path, GFP_KERNEL); in cgroup_release_agent()
5761 path = cgroup_path(cgrp, pathbuf, PATH_MAX); in cgroup_release_agent()
5819 struct cgroup *cgrp; in css_tryget_online_from_dir() local
5833 cgrp = rcu_dereference(kn->priv); in css_tryget_online_from_dir()
5834 if (cgrp) in css_tryget_online_from_dir()
5835 css = cgroup_css(cgrp, ss); in css_tryget_online_from_dir()
5912 struct cgroup *c = link->cgrp; in current_css_set_cg_links_read()