• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/kernel/

Lines Matching defs:cgrp

167 	struct cgroup *cgrp;
224 inline int cgroup_is_removed(const struct cgroup *cgrp)
226 return test_bit(CGRP_REMOVED, &cgrp->flags);
234 static int cgroup_is_releasable(const struct cgroup *cgrp)
239 return (cgrp->flags & bits) == bits;
242 static int notify_on_release(const struct cgroup *cgrp)
244 return test_bit(CGRP_NOTIFY_ON_RELEASE, &cgrp->flags);
264 static void check_for_release(struct cgroup *cgrp);
273 struct cgroup *cgrp;
360 struct cgroup *cgrp = link->cgrp;
363 if (atomic_dec_and_test(&cgrp->count) &&
364 notify_on_release(cgrp)) {
366 set_bit(CGRP_RELEASABLE, &cgrp->flags);
367 check_for_release(cgrp);
444 cg1 = cgl1->cgrp;
445 cg2 = cgl2->cgrp;
475 * cgrp: the cgroup that we're moving into
482 struct cgroup *cgrp,
486 struct cgroupfs_root *root = cgrp->root;
501 template[i] = cgrp->subsys[i];
511 if (!compare_css_sets(cg, oldcg, cgrp, template))
558 * @cgrp: the destination cgroup
561 struct css_set *cg, struct cgroup *cgrp)
569 link->cgrp = cgrp;
570 atomic_inc(&cgrp->count);
571 list_move(&link->cgrp_link_list, &cgrp->css_sets);
587 struct css_set *oldcg, struct cgroup *cgrp)
600 res = find_existing_css_set(oldcg, cgrp, template);
630 struct cgroup *c = link->cgrp;
631 if (c->root == cgrp->root)
632 c = cgrp;
672 struct cgroup *c = link->cgrp;
764 static int cgroup_populate_dir(struct cgroup *cgrp);
794 static int cgroup_call_pre_destroy(struct cgroup *cgrp)
799 for_each_subsys(cgrp->root, ss)
801 ret = ss->pre_destroy(ss, cgrp);
811 struct cgroup *cgrp = container_of(obj, struct cgroup, rcu_head);
813 kfree(cgrp);
820 struct cgroup *cgrp = dentry->d_fsdata;
822 BUG_ON(!(cgroup_is_removed(cgrp)));
835 for_each_subsys(cgrp->root, ss)
836 ss->destroy(ss, cgrp);
838 cgrp->root->number_of_cgroups--;
845 deactivate_super(cgrp->root->sb);
851 BUG_ON(!list_empty(&cgrp->pidlists));
853 call_rcu(&cgrp->rcu_head, free_cgroup_rcu);
916 static void cgroup_wakeup_rmdir_waiter(struct cgroup *cgrp)
918 if (unlikely(test_and_clear_bit(CGRP_WAIT_ON_RMDIR, &cgrp->flags)))
942 struct cgroup *cgrp = &root->top_cgroup;
981 BUG_ON(cgrp->subsys[i]);
985 cgrp->subsys[i] = dummytop->subsys[i];
986 cgrp->subsys[i]->cgroup = cgrp;
990 ss->bind(ss, cgrp);
996 BUG_ON(cgrp->subsys[i] != dummytop->subsys[i]);
997 BUG_ON(cgrp->subsys[i]->cgroup != cgrp);
1002 cgrp->subsys[i] = NULL;
1011 BUG_ON(!cgrp->subsys[i]);
1022 BUG_ON(cgrp->subsys[i]);
1222 struct cgroup *cgrp = &root->top_cgroup;
1226 mutex_lock(&cgrp->dentry->d_inode->i_mutex);
1249 cgroup_populate_dir(cgrp);
1257 mutex_unlock(&cgrp->dentry->d_inode->i_mutex);
1269 static void init_cgroup_housekeeping(struct cgroup *cgrp)
1271 INIT_LIST_HEAD(&cgrp->sibling);
1272 INIT_LIST_HEAD(&cgrp->children);
1273 INIT_LIST_HEAD(&cgrp->css_sets);
1274 INIT_LIST_HEAD(&cgrp->release_list);
1275 INIT_LIST_HEAD(&cgrp->pidlists);
1276 mutex_init(&cgrp->pidlist_mutex);
1277 INIT_LIST_HEAD(&cgrp->event_list);
1278 spin_lock_init(&cgrp->event_list_lock);
1283 struct cgroup *cgrp = &root->top_cgroup;
1287 cgrp->root = root;
1288 cgrp->top_cgroup = cgrp;
1289 init_cgroup_housekeeping(cgrp);
1577 struct cgroup *cgrp = &root->top_cgroup;
1585 BUG_ON(!list_empty(&cgrp->children));
1586 BUG_ON(!list_empty(&cgrp->sibling));
1601 list_for_each_entry_safe(link, saved_link, &cgrp->css_sets,
1640 * @cgrp: the cgroup in question
1648 int cgroup_path(const struct cgroup *cgrp, char *buf, int buflen)
1651 struct dentry *dentry = rcu_dereference_check(cgrp->dentry,
1655 if (!dentry || cgrp == dummytop) {
1673 cgrp = cgrp->parent;
1674 if (!cgrp)
1677 dentry = rcu_dereference_check(cgrp->dentry,
1680 if (!cgrp->parent)
1692 * cgroup_attach_task - attach task 'tsk' to cgroup 'cgrp'
1693 * @cgrp: the cgroup the task is attaching to
1699 int cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk)
1706 struct cgroupfs_root *root = cgrp->root;
1710 if (cgrp == oldcgrp)
1715 retval = ss->can_attach(ss, cgrp, tsk, false);
1737 newcg = find_css_set(cg, cgrp);
1764 ss->attach(ss, cgrp, oldcgrp, tsk, false);
1774 cgroup_wakeup_rmdir_waiter(cgrp);
1787 ss->cancel_attach(ss, cgrp, tsk, false);
1818 * Attach task with pid 'pid' to cgroup 'cgrp'. Call with cgroup_mutex
1821 static int attach_task_by_pid(struct cgroup *cgrp, u64 pid)
1849 ret = cgroup_attach_task(cgrp, tsk);
1854 static int cgroup_tasks_write(struct cgroup *cgrp, struct cftype *cft, u64 pid)
1857 if (!cgroup_lock_live_group(cgrp))
1859 ret = attach_task_by_pid(cgrp, pid);
1865 * cgroup_lock_live_group - take cgroup_mutex and check that cgrp is alive.
1866 * @cgrp: the cgroup to be checked for liveness
1871 bool cgroup_lock_live_group(struct cgroup *cgrp)
1874 if (cgroup_is_removed(cgrp)) {
1882 static int cgroup_release_agent_write(struct cgroup *cgrp, struct cftype *cft,
1885 BUILD_BUG_ON(sizeof(cgrp->root->release_agent_path) < PATH_MAX);
1886 if (!cgroup_lock_live_group(cgrp))
1888 strcpy(cgrp->root->release_agent_path, buffer);
1893 static int cgroup_release_agent_show(struct cgroup *cgrp, struct cftype *cft,
1896 if (!cgroup_lock_live_group(cgrp))
1898 seq_puts(seq, cgrp->root->release_agent_path);
1907 static ssize_t cgroup_write_X64(struct cgroup *cgrp, struct cftype *cft,
1928 retval = cft->write_u64(cgrp, cft, val);
1933 retval = cft->write_s64(cgrp, cft, val);
1940 static ssize_t cgroup_write_string(struct cgroup *cgrp, struct cftype *cft,
1966 retval = cft->write_string(cgrp, cft, strstrip(buffer));
1979 struct cgroup *cgrp = __d_cgrp(file->f_dentry->d_parent);
1981 if (cgroup_is_removed(cgrp))
1984 return cft->write(cgrp, cft, file, buf, nbytes, ppos);
1986 return cgroup_write_X64(cgrp, cft, file, buf, nbytes, ppos);
1988 return cgroup_write_string(cgrp, cft, file, buf, nbytes, ppos);
1990 int ret = cft->trigger(cgrp, (unsigned int)cft->private);
1996 static ssize_t cgroup_read_u64(struct cgroup *cgrp, struct cftype *cft,
2002 u64 val = cft->read_u64(cgrp, cft);
2008 static ssize_t cgroup_read_s64(struct cgroup *cgrp, struct cftype *cft,
2014 s64 val = cft->read_s64(cgrp, cft);
2024 struct cgroup *cgrp = __d_cgrp(file->f_dentry->d_parent);
2026 if (cgroup_is_removed(cgrp))
2030 return cft->read(cgrp, cft, file, buf, nbytes, ppos);
2032 return cgroup_read_u64(cgrp, cft, file, buf, nbytes, ppos);
2034 return cgroup_read_s64(cgrp, cft, file, buf, nbytes, ppos);
2199 * @cgrp: the cgroup we create the directory for. It must have a valid
2204 static int cgroup_create_dir(struct cgroup *cgrp, struct dentry *dentry,
2210 parent = cgrp->parent->dentry;
2211 error = cgroup_create_file(dentry, S_IFDIR | mode, cgrp->root->sb);
2213 dentry->d_fsdata = cgrp;
2215 rcu_assign_pointer(cgrp->dentry, dentry);
2250 int cgroup_add_file(struct cgroup *cgrp,
2254 struct dentry *dir = cgrp->dentry;
2260 if (subsys && !test_bit(ROOT_NOPREFIX, &cgrp->root->flags)) {
2270 cgrp->root->sb);
2280 int cgroup_add_files(struct cgroup *cgrp,
2287 err = cgroup_add_file(cgrp, subsys, &cft[i]);
2297 * @cgrp: the cgroup in question
2301 int cgroup_task_count(const struct cgroup *cgrp)
2307 list_for_each_entry(link, &cgrp->css_sets, cgrp_link_list) {
2318 static void cgroup_advance_iter(struct cgroup *cgrp,
2328 if (l == &cgrp->css_sets) {
2367 void cgroup_iter_start(struct cgroup *cgrp, struct cgroup_iter *it)
2378 it->cg_link = &cgrp->css_sets;
2379 cgroup_advance_iter(cgrp, it);
2382 struct task_struct *cgroup_iter_next(struct cgroup *cgrp,
2399 cgroup_advance_iter(cgrp, it);
2406 void cgroup_iter_end(struct cgroup *cgrp, struct cgroup_iter *it)
2674 static struct cgroup_pidlist *cgroup_pidlist_find(struct cgroup *cgrp,
2687 mutex_lock(&cgrp->pidlist_mutex);
2688 list_for_each_entry(l, &cgrp->pidlists, links) {
2692 mutex_unlock(&cgrp->pidlist_mutex);
2699 mutex_unlock(&cgrp->pidlist_mutex);
2708 l->owner = cgrp;
2709 list_add(&l->links, &cgrp->pidlists);
2710 mutex_unlock(&cgrp->pidlist_mutex);
2717 static int pidlist_array_load(struct cgroup *cgrp, enum cgroup_filetype type,
2733 length = cgroup_task_count(cgrp);
2738 cgroup_iter_start(cgrp, &it);
2739 while ((tsk = cgroup_iter_next(cgrp, &it))) {
2750 cgroup_iter_end(cgrp, &it);
2756 l = cgroup_pidlist_find(cgrp, type);
2783 struct cgroup *cgrp;
2796 cgrp = dentry->d_fsdata;
2798 cgroup_iter_start(cgrp, &it);
2799 while ((tsk = cgroup_iter_next(cgrp, &it))) {
2819 cgroup_iter_end(cgrp, &it);
2962 struct cgroup *cgrp = __d_cgrp(file->f_dentry->d_parent);
2971 retval = pidlist_array_load(cgrp, type, &l);
2994 static u64 cgroup_read_notify_on_release(struct cgroup *cgrp,
2997 return notify_on_release(cgrp);
3000 static int cgroup_write_notify_on_release(struct cgroup *cgrp,
3004 clear_bit(CGRP_RELEASABLE, &cgrp->flags);
3006 set_bit(CGRP_NOTIFY_ON_RELEASE, &cgrp->flags);
3008 clear_bit(CGRP_NOTIFY_ON_RELEASE, &cgrp->flags);
3021 struct cgroup *cgrp = event->cgrp;
3023 event->cft->unregister_event(cgrp, event->cft, event->eventfd);
3027 dput(cgrp->dentry);
3040 struct cgroup *cgrp = event->cgrp;
3045 spin_lock(&cgrp->event_list_lock);
3047 spin_unlock(&cgrp->event_list_lock);
3074 static int cgroup_write_event_control(struct cgroup *cgrp, struct cftype *cft,
3097 event->cgrp = cgrp;
3137 ret = event->cft->register_event(cgrp, event->cft,
3143 event->cft->unregister_event(cgrp, event->cft, event->eventfd);
3153 dget(cgrp->dentry);
3155 spin_lock(&cgrp->event_list_lock);
3156 list_add(&event->list, &cgrp->event_list);
3157 spin_unlock(&cgrp->event_list_lock);
3218 static int cgroup_populate_dir(struct cgroup *cgrp)
3224 cgroup_clear_directory(cgrp->dentry);
3226 err = cgroup_add_files(cgrp, NULL, files, ARRAY_SIZE(files));
3230 if (cgrp == cgrp->top_cgroup) {
3231 if ((err = cgroup_add_file(cgrp, NULL, &cft_release_agent)) < 0)
3235 for_each_subsys(cgrp->root, ss) {
3236 if (ss->populate && (err = ss->populate(ss, cgrp)) < 0)
3240 for_each_subsys(cgrp->root, ss) {
3241 struct cgroup_subsys_state *css = cgrp->subsys[ss->subsys_id];
3256 struct cgroup *cgrp)
3258 css->cgroup = cgrp;
3262 if (cgrp == dummytop)
3264 BUG_ON(cgrp->subsys[ss->subsys_id]);
3265 cgrp->subsys[ss->subsys_id] = css;
3310 struct cgroup *cgrp;
3316 cgrp = kzalloc(sizeof(*cgrp), GFP_KERNEL);
3317 if (!cgrp)
3329 init_cgroup_housekeeping(cgrp);
3331 cgrp->parent = parent;
3332 cgrp->root = parent->root;
3333 cgrp->top_cgroup = parent->top_cgroup;
3336 set_bit(CGRP_NOTIFY_ON_RELEASE, &cgrp->flags);
3339 struct cgroup_subsys_state *css = ss->create(ss, cgrp);
3345 init_cgroup_css(css, ss, cgrp);
3347 err = alloc_css_id(ss, parent, cgrp);
3355 list_add(&cgrp->sibling, &cgrp->parent->children);
3359 err = cgroup_create_dir(cgrp, dentry, mode);
3364 BUG_ON(!mutex_is_locked(&cgrp->dentry->d_inode->i_mutex));
3366 err = cgroup_populate_dir(cgrp);
3370 mutex_unlock(&cgrp->dentry->d_inode->i_mutex);
3377 list_del(&cgrp->sibling);
3384 if (cgrp->subsys[ss->subsys_id])
3385 ss->destroy(ss, cgrp);
3393 kfree(cgrp);
3405 static int cgroup_has_css_refs(struct cgroup *cgrp)
3426 if (ss == NULL || ss->root != cgrp->root)
3428 css = cgrp->subsys[ss->subsys_id];
3447 static int cgroup_clear_css_refs(struct cgroup *cgrp)
3453 for_each_subsys(cgrp->root, ss) {
3454 struct cgroup_subsys_state *css = cgrp->subsys[ss->subsys_id];
3476 for_each_subsys(cgrp->root, ss) {
3477 struct cgroup_subsys_state *css = cgrp->subsys[ss->subsys_id];
3496 struct cgroup *cgrp = dentry->d_fsdata;
3506 if (atomic_read(&cgrp->count) != 0) {
3510 if (!list_empty(&cgrp->children)) {
3525 set_bit(CGRP_WAIT_ON_RMDIR, &cgrp->flags);
3531 ret = cgroup_call_pre_destroy(cgrp);
3533 clear_bit(CGRP_WAIT_ON_RMDIR, &cgrp->flags);
3538 parent = cgrp->parent;
3539 if (atomic_read(&cgrp->count) || !list_empty(&cgrp->children)) {
3540 clear_bit(CGRP_WAIT_ON_RMDIR, &cgrp->flags);
3545 if (!cgroup_clear_css_refs(cgrp)) {
3551 if (test_bit(CGRP_WAIT_ON_RMDIR, &cgrp->flags))
3554 clear_bit(CGRP_WAIT_ON_RMDIR, &cgrp->flags);
3561 clear_bit(CGRP_WAIT_ON_RMDIR, &cgrp->flags);
3564 set_bit(CGRP_REMOVED, &cgrp->flags);
3565 if (!list_empty(&cgrp->release_list))
3566 list_del(&cgrp->release_list);
3569 cgroup_lock_hierarchy(cgrp->root);
3571 list_del(&cgrp->sibling);
3572 cgroup_unlock_hierarchy(cgrp->root);
3574 spin_lock(&cgrp->dentry->d_lock);
3575 d = dget(cgrp->dentry);
3589 spin_lock(&cgrp->event_list_lock);
3590 list_for_each_entry_safe(event, tmp, &cgrp->event_list, list) {
3596 spin_unlock(&cgrp->event_list_lock);
3812 * before marking as null because ss->destroy needs the cgrp->subsys
3842 init_css_set_link.cgrp = dummytop;
3960 struct cgroup *cgrp;
3970 cgrp = task_cgroup_from_root(tsk, root);
3971 retval = cgroup_path(cgrp, buf, PAGE_SIZE);
4296 * cgroup_is_descendant - see if @cgrp is a descendant of @task's cgrp
4297 * @cgrp: the cgroup in question
4300 * See if @cgrp is a descendant of @task's cgroup in the appropriate
4308 int cgroup_is_descendant(const struct cgroup *cgrp, struct task_struct *task)
4313 if (cgrp == dummytop)
4316 target = task_cgroup_from_root(task, cgrp->root);
4317 while (cgrp != target && cgrp!= cgrp->top_cgroup)
4318 cgrp = cgrp->parent;
4319 ret = (cgrp == target);
4323 static void check_for_release(struct cgroup *cgrp)
4327 if (cgroup_is_releasable(cgrp) && !atomic_read(&cgrp->count)
4328 && list_empty(&cgrp->children) && !cgroup_has_css_refs(cgrp)) {
4334 if (!cgroup_is_removed(cgrp) &&
4335 list_empty(&cgrp->release_list)) {
4336 list_add(&cgrp->release_list, &release_list);
4348 struct cgroup *cgrp = css->cgroup;
4353 if (notify_on_release(cgrp)) {
4354 set_bit(CGRP_RELEASABLE, &cgrp->flags);
4355 check_for_release(cgrp);
4357 cgroup_wakeup_rmdir_waiter(cgrp);
4396 struct cgroup *cgrp = list_entry(release_list.next,
4399 list_del_init(&cgrp->release_list);
4404 if (cgroup_path(cgrp, pathbuf, PAGE_SIZE) < 0)
4406 agentbuf = kstrdup(cgrp->root->release_agent_path, GFP_KERNEL);
4780 struct cgroup *c = link->cgrp;
4822 static u64 releasable_read(struct cgroup *cgrp, struct cftype *cft)
4824 return test_bit(CGRP_RELEASABLE, &cgrp->flags);