diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/cgroup.c | 494 |
1 files changed, 247 insertions, 247 deletions
diff --git a/kernel/cgroup.c b/kernel/cgroup.c index c2f12a49dff2..5987dccdb2a0 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c | |||
@@ -124,18 +124,18 @@ static int need_forkexit_callback; | |||
124 | /* bits in struct cgroup flags field */ | 124 | /* bits in struct cgroup flags field */ |
125 | enum { | 125 | enum { |
126 | /* Control Group is dead */ | 126 | /* Control Group is dead */ |
127 | CONT_REMOVED, | 127 | CGRP_REMOVED, |
128 | /* Control Group has previously had a child cgroup or a task, | 128 | /* Control Group has previously had a child cgroup or a task, |
129 | * but no longer (only if CONT_NOTIFY_ON_RELEASE is set) */ | 129 | * but no longer (only if CGRP_NOTIFY_ON_RELEASE is set) */ |
130 | CONT_RELEASABLE, | 130 | CGRP_RELEASABLE, |
131 | /* Control Group requires release notifications to userspace */ | 131 | /* Control Group requires release notifications to userspace */ |
132 | CONT_NOTIFY_ON_RELEASE, | 132 | CGRP_NOTIFY_ON_RELEASE, |
133 | }; | 133 | }; |
134 | 134 | ||
135 | /* convenient tests for these bits */ | 135 | /* convenient tests for these bits */ |
136 | inline int cgroup_is_removed(const struct cgroup *cont) | 136 | inline int cgroup_is_removed(const struct cgroup *cgrp) |
137 | { | 137 | { |
138 | return test_bit(CONT_REMOVED, &cont->flags); | 138 | return test_bit(CGRP_REMOVED, &cgrp->flags); |
139 | } | 139 | } |
140 | 140 | ||
141 | /* bits in struct cgroupfs_root flags field */ | 141 | /* bits in struct cgroupfs_root flags field */ |
@@ -143,17 +143,17 @@ enum { | |||
143 | ROOT_NOPREFIX, /* mounted subsystems have no named prefix */ | 143 | ROOT_NOPREFIX, /* mounted subsystems have no named prefix */ |
144 | }; | 144 | }; |
145 | 145 | ||
146 | inline int cgroup_is_releasable(const struct cgroup *cont) | 146 | inline int cgroup_is_releasable(const struct cgroup *cgrp) |
147 | { | 147 | { |
148 | const int bits = | 148 | const int bits = |
149 | (1 << CONT_RELEASABLE) | | 149 | (1 << CGRP_RELEASABLE) | |
150 | (1 << CONT_NOTIFY_ON_RELEASE); | 150 | (1 << CGRP_NOTIFY_ON_RELEASE); |
151 | return (cont->flags & bits) == bits; | 151 | return (cgrp->flags & bits) == bits; |
152 | } | 152 | } |
153 | 153 | ||
154 | inline int notify_on_release(const struct cgroup *cont) | 154 | inline int notify_on_release(const struct cgroup *cgrp) |
155 | { | 155 | { |
156 | return test_bit(CONT_NOTIFY_ON_RELEASE, &cont->flags); | 156 | return test_bit(CGRP_NOTIFY_ON_RELEASE, &cgrp->flags); |
157 | } | 157 | } |
158 | 158 | ||
159 | /* | 159 | /* |
@@ -173,7 +173,7 @@ static LIST_HEAD(release_list); | |||
173 | static DEFINE_SPINLOCK(release_list_lock); | 173 | static DEFINE_SPINLOCK(release_list_lock); |
174 | static void cgroup_release_agent(struct work_struct *work); | 174 | static void cgroup_release_agent(struct work_struct *work); |
175 | static DECLARE_WORK(release_agent_work, cgroup_release_agent); | 175 | static DECLARE_WORK(release_agent_work, cgroup_release_agent); |
176 | static void check_for_release(struct cgroup *cont); | 176 | static void check_for_release(struct cgroup *cgrp); |
177 | 177 | ||
178 | /* Link structure for associating css_set objects with cgroups */ | 178 | /* Link structure for associating css_set objects with cgroups */ |
179 | struct cg_cgroup_link { | 179 | struct cg_cgroup_link { |
@@ -181,7 +181,7 @@ struct cg_cgroup_link { | |||
181 | * List running through cg_cgroup_links associated with a | 181 | * List running through cg_cgroup_links associated with a |
182 | * cgroup, anchored on cgroup->css_sets | 182 | * cgroup, anchored on cgroup->css_sets |
183 | */ | 183 | */ |
184 | struct list_head cont_link_list; | 184 | struct list_head cgrp_link_list; |
185 | /* | 185 | /* |
186 | * List running through cg_cgroup_links pointing at a | 186 | * List running through cg_cgroup_links pointing at a |
187 | * single css_set object, anchored on css_set->cg_links | 187 | * single css_set object, anchored on css_set->cg_links |
@@ -239,7 +239,7 @@ static void unlink_css_set(struct css_set *cg) | |||
239 | link = list_entry(cg->cg_links.next, | 239 | link = list_entry(cg->cg_links.next, |
240 | struct cg_cgroup_link, cg_link_list); | 240 | struct cg_cgroup_link, cg_link_list); |
241 | list_del(&link->cg_link_list); | 241 | list_del(&link->cg_link_list); |
242 | list_del(&link->cont_link_list); | 242 | list_del(&link->cgrp_link_list); |
243 | kfree(link); | 243 | kfree(link); |
244 | } | 244 | } |
245 | write_unlock(&css_set_lock); | 245 | write_unlock(&css_set_lock); |
@@ -254,12 +254,12 @@ static void __release_css_set(struct kref *k, int taskexit) | |||
254 | 254 | ||
255 | rcu_read_lock(); | 255 | rcu_read_lock(); |
256 | for (i = 0; i < CGROUP_SUBSYS_COUNT; i++) { | 256 | for (i = 0; i < CGROUP_SUBSYS_COUNT; i++) { |
257 | struct cgroup *cont = cg->subsys[i]->cgroup; | 257 | struct cgroup *cgrp = cg->subsys[i]->cgroup; |
258 | if (atomic_dec_and_test(&cont->count) && | 258 | if (atomic_dec_and_test(&cgrp->count) && |
259 | notify_on_release(cont)) { | 259 | notify_on_release(cgrp)) { |
260 | if (taskexit) | 260 | if (taskexit) |
261 | set_bit(CONT_RELEASABLE, &cont->flags); | 261 | set_bit(CGRP_RELEASABLE, &cgrp->flags); |
262 | check_for_release(cont); | 262 | check_for_release(cgrp); |
263 | } | 263 | } |
264 | } | 264 | } |
265 | rcu_read_unlock(); | 265 | rcu_read_unlock(); |
@@ -304,7 +304,7 @@ static inline void put_css_set_taskexit(struct css_set *cg) | |||
304 | * oldcg: the cgroup group that we're using before the cgroup | 304 | * oldcg: the cgroup group that we're using before the cgroup |
305 | * transition | 305 | * transition |
306 | * | 306 | * |
307 | * cont: the cgroup that we're moving into | 307 | * cgrp: the cgroup that we're moving into |
308 | * | 308 | * |
309 | * template: location in which to build the desired set of subsystem | 309 | * template: location in which to build the desired set of subsystem |
310 | * state objects for the new cgroup group | 310 | * state objects for the new cgroup group |
@@ -312,11 +312,11 @@ static inline void put_css_set_taskexit(struct css_set *cg) | |||
312 | 312 | ||
313 | static struct css_set *find_existing_css_set( | 313 | static struct css_set *find_existing_css_set( |
314 | struct css_set *oldcg, | 314 | struct css_set *oldcg, |
315 | struct cgroup *cont, | 315 | struct cgroup *cgrp, |
316 | struct cgroup_subsys_state *template[]) | 316 | struct cgroup_subsys_state *template[]) |
317 | { | 317 | { |
318 | int i; | 318 | int i; |
319 | struct cgroupfs_root *root = cont->root; | 319 | struct cgroupfs_root *root = cgrp->root; |
320 | struct list_head *l = &init_css_set.list; | 320 | struct list_head *l = &init_css_set.list; |
321 | 321 | ||
322 | /* Built the set of subsystem state objects that we want to | 322 | /* Built the set of subsystem state objects that we want to |
@@ -326,7 +326,7 @@ static struct css_set *find_existing_css_set( | |||
326 | /* Subsystem is in this hierarchy. So we want | 326 | /* Subsystem is in this hierarchy. So we want |
327 | * the subsystem state from the new | 327 | * the subsystem state from the new |
328 | * cgroup */ | 328 | * cgroup */ |
329 | template[i] = cont->subsys[i]; | 329 | template[i] = cgrp->subsys[i]; |
330 | } else { | 330 | } else { |
331 | /* Subsystem is not in this hierarchy, so we | 331 | /* Subsystem is not in this hierarchy, so we |
332 | * don't want to change the subsystem state */ | 332 | * don't want to change the subsystem state */ |
@@ -353,7 +353,7 @@ static struct css_set *find_existing_css_set( | |||
353 | 353 | ||
354 | /* | 354 | /* |
355 | * allocate_cg_links() allocates "count" cg_cgroup_link structures | 355 | * allocate_cg_links() allocates "count" cg_cgroup_link structures |
356 | * and chains them on tmp through their cont_link_list fields. Returns 0 on | 356 | * and chains them on tmp through their cgrp_link_list fields. Returns 0 on |
357 | * success or a negative error | 357 | * success or a negative error |
358 | */ | 358 | */ |
359 | 359 | ||
@@ -368,13 +368,13 @@ static int allocate_cg_links(int count, struct list_head *tmp) | |||
368 | while (!list_empty(tmp)) { | 368 | while (!list_empty(tmp)) { |
369 | link = list_entry(tmp->next, | 369 | link = list_entry(tmp->next, |
370 | struct cg_cgroup_link, | 370 | struct cg_cgroup_link, |
371 | cont_link_list); | 371 | cgrp_link_list); |
372 | list_del(&link->cont_link_list); | 372 | list_del(&link->cgrp_link_list); |
373 | kfree(link); | 373 | kfree(link); |
374 | } | 374 | } |
375 | return -ENOMEM; | 375 | return -ENOMEM; |
376 | } | 376 | } |
377 | list_add(&link->cont_link_list, tmp); | 377 | list_add(&link->cgrp_link_list, tmp); |
378 | } | 378 | } |
379 | return 0; | 379 | return 0; |
380 | } | 380 | } |
@@ -385,8 +385,8 @@ static void free_cg_links(struct list_head *tmp) | |||
385 | struct cg_cgroup_link *link; | 385 | struct cg_cgroup_link *link; |
386 | link = list_entry(tmp->next, | 386 | link = list_entry(tmp->next, |
387 | struct cg_cgroup_link, | 387 | struct cg_cgroup_link, |
388 | cont_link_list); | 388 | cgrp_link_list); |
389 | list_del(&link->cont_link_list); | 389 | list_del(&link->cgrp_link_list); |
390 | kfree(link); | 390 | kfree(link); |
391 | } | 391 | } |
392 | } | 392 | } |
@@ -400,7 +400,7 @@ static void free_cg_links(struct list_head *tmp) | |||
400 | */ | 400 | */ |
401 | 401 | ||
402 | static struct css_set *find_css_set( | 402 | static struct css_set *find_css_set( |
403 | struct css_set *oldcg, struct cgroup *cont) | 403 | struct css_set *oldcg, struct cgroup *cgrp) |
404 | { | 404 | { |
405 | struct css_set *res; | 405 | struct css_set *res; |
406 | struct cgroup_subsys_state *template[CGROUP_SUBSYS_COUNT]; | 406 | struct cgroup_subsys_state *template[CGROUP_SUBSYS_COUNT]; |
@@ -412,7 +412,7 @@ static struct css_set *find_css_set( | |||
412 | /* First see if we already have a cgroup group that matches | 412 | /* First see if we already have a cgroup group that matches |
413 | * the desired set */ | 413 | * the desired set */ |
414 | write_lock(&css_set_lock); | 414 | write_lock(&css_set_lock); |
415 | res = find_existing_css_set(oldcg, cont, template); | 415 | res = find_existing_css_set(oldcg, cgrp, template); |
416 | if (res) | 416 | if (res) |
417 | get_css_set(res); | 417 | get_css_set(res); |
418 | write_unlock(&css_set_lock); | 418 | write_unlock(&css_set_lock); |
@@ -441,9 +441,9 @@ static struct css_set *find_css_set( | |||
441 | write_lock(&css_set_lock); | 441 | write_lock(&css_set_lock); |
442 | /* Add reference counts and links from the new css_set. */ | 442 | /* Add reference counts and links from the new css_set. */ |
443 | for (i = 0; i < CGROUP_SUBSYS_COUNT; i++) { | 443 | for (i = 0; i < CGROUP_SUBSYS_COUNT; i++) { |
444 | struct cgroup *cont = res->subsys[i]->cgroup; | 444 | struct cgroup *cgrp = res->subsys[i]->cgroup; |
445 | struct cgroup_subsys *ss = subsys[i]; | 445 | struct cgroup_subsys *ss = subsys[i]; |
446 | atomic_inc(&cont->count); | 446 | atomic_inc(&cgrp->count); |
447 | /* | 447 | /* |
448 | * We want to add a link once per cgroup, so we | 448 | * We want to add a link once per cgroup, so we |
449 | * only do it for the first subsystem in each | 449 | * only do it for the first subsystem in each |
@@ -453,9 +453,9 @@ static struct css_set *find_css_set( | |||
453 | BUG_ON(list_empty(&tmp_cg_links)); | 453 | BUG_ON(list_empty(&tmp_cg_links)); |
454 | link = list_entry(tmp_cg_links.next, | 454 | link = list_entry(tmp_cg_links.next, |
455 | struct cg_cgroup_link, | 455 | struct cg_cgroup_link, |
456 | cont_link_list); | 456 | cgrp_link_list); |
457 | list_del(&link->cont_link_list); | 457 | list_del(&link->cgrp_link_list); |
458 | list_add(&link->cont_link_list, &cont->css_sets); | 458 | list_add(&link->cgrp_link_list, &cgrp->css_sets); |
459 | link->cg = res; | 459 | link->cg = res; |
460 | list_add(&link->cg_link_list, &res->cg_links); | 460 | list_add(&link->cg_link_list, &res->cg_links); |
461 | } | 461 | } |
@@ -463,9 +463,9 @@ static struct css_set *find_css_set( | |||
463 | if (list_empty(&rootnode.subsys_list)) { | 463 | if (list_empty(&rootnode.subsys_list)) { |
464 | link = list_entry(tmp_cg_links.next, | 464 | link = list_entry(tmp_cg_links.next, |
465 | struct cg_cgroup_link, | 465 | struct cg_cgroup_link, |
466 | cont_link_list); | 466 | cgrp_link_list); |
467 | list_del(&link->cont_link_list); | 467 | list_del(&link->cgrp_link_list); |
468 | list_add(&link->cont_link_list, &dummytop->css_sets); | 468 | list_add(&link->cgrp_link_list, &dummytop->css_sets); |
469 | link->cg = res; | 469 | link->cg = res; |
470 | list_add(&link->cg_link_list, &res->cg_links); | 470 | list_add(&link->cg_link_list, &res->cg_links); |
471 | } | 471 | } |
@@ -565,7 +565,7 @@ void cgroup_unlock(void) | |||
565 | 565 | ||
566 | static int cgroup_mkdir(struct inode *dir, struct dentry *dentry, int mode); | 566 | static int cgroup_mkdir(struct inode *dir, struct dentry *dentry, int mode); |
567 | static int cgroup_rmdir(struct inode *unused_dir, struct dentry *dentry); | 567 | static int cgroup_rmdir(struct inode *unused_dir, struct dentry *dentry); |
568 | static int cgroup_populate_dir(struct cgroup *cont); | 568 | static int cgroup_populate_dir(struct cgroup *cgrp); |
569 | static struct inode_operations cgroup_dir_inode_operations; | 569 | static struct inode_operations cgroup_dir_inode_operations; |
570 | static struct file_operations proc_cgroupstats_operations; | 570 | static struct file_operations proc_cgroupstats_operations; |
571 | 571 | ||
@@ -592,8 +592,8 @@ static void cgroup_diput(struct dentry *dentry, struct inode *inode) | |||
592 | { | 592 | { |
593 | /* is dentry a directory ? if so, kfree() associated cgroup */ | 593 | /* is dentry a directory ? if so, kfree() associated cgroup */ |
594 | if (S_ISDIR(inode->i_mode)) { | 594 | if (S_ISDIR(inode->i_mode)) { |
595 | struct cgroup *cont = dentry->d_fsdata; | 595 | struct cgroup *cgrp = dentry->d_fsdata; |
596 | BUG_ON(!(cgroup_is_removed(cont))); | 596 | BUG_ON(!(cgroup_is_removed(cgrp))); |
597 | /* It's possible for external users to be holding css | 597 | /* It's possible for external users to be holding css |
598 | * reference counts on a cgroup; css_put() needs to | 598 | * reference counts on a cgroup; css_put() needs to |
599 | * be able to access the cgroup after decrementing | 599 | * be able to access the cgroup after decrementing |
@@ -601,7 +601,7 @@ static void cgroup_diput(struct dentry *dentry, struct inode *inode) | |||
601 | * queue the cgroup to be handled by the release | 601 | * queue the cgroup to be handled by the release |
602 | * agent */ | 602 | * agent */ |
603 | synchronize_rcu(); | 603 | synchronize_rcu(); |
604 | kfree(cont); | 604 | kfree(cgrp); |
605 | } | 605 | } |
606 | iput(inode); | 606 | iput(inode); |
607 | } | 607 | } |
@@ -658,7 +658,7 @@ static int rebind_subsystems(struct cgroupfs_root *root, | |||
658 | unsigned long final_bits) | 658 | unsigned long final_bits) |
659 | { | 659 | { |
660 | unsigned long added_bits, removed_bits; | 660 | unsigned long added_bits, removed_bits; |
661 | struct cgroup *cont = &root->top_cgroup; | 661 | struct cgroup *cgrp = &root->top_cgroup; |
662 | int i; | 662 | int i; |
663 | 663 | ||
664 | removed_bits = root->actual_subsys_bits & ~final_bits; | 664 | removed_bits = root->actual_subsys_bits & ~final_bits; |
@@ -679,7 +679,7 @@ static int rebind_subsystems(struct cgroupfs_root *root, | |||
679 | * any child cgroups exist. This is theoretically supportable | 679 | * any child cgroups exist. This is theoretically supportable |
680 | * but involves complex error handling, so it's being left until | 680 | * but involves complex error handling, so it's being left until |
681 | * later */ | 681 | * later */ |
682 | if (!list_empty(&cont->children)) | 682 | if (!list_empty(&cgrp->children)) |
683 | return -EBUSY; | 683 | return -EBUSY; |
684 | 684 | ||
685 | /* Process each subsystem */ | 685 | /* Process each subsystem */ |
@@ -688,32 +688,32 @@ static int rebind_subsystems(struct cgroupfs_root *root, | |||
688 | unsigned long bit = 1UL << i; | 688 | unsigned long bit = 1UL << i; |
689 | if (bit & added_bits) { | 689 | if (bit & added_bits) { |
690 | /* We're binding this subsystem to this hierarchy */ | 690 | /* We're binding this subsystem to this hierarchy */ |
691 | BUG_ON(cont->subsys[i]); | 691 | BUG_ON(cgrp->subsys[i]); |
692 | BUG_ON(!dummytop->subsys[i]); | 692 | BUG_ON(!dummytop->subsys[i]); |
693 | BUG_ON(dummytop->subsys[i]->cgroup != dummytop); | 693 | BUG_ON(dummytop->subsys[i]->cgroup != dummytop); |
694 | cont->subsys[i] = dummytop->subsys[i]; | 694 | cgrp->subsys[i] = dummytop->subsys[i]; |
695 | cont->subsys[i]->cgroup = cont; | 695 | cgrp->subsys[i]->cgroup = cgrp; |
696 | list_add(&ss->sibling, &root->subsys_list); | 696 | list_add(&ss->sibling, &root->subsys_list); |
697 | rcu_assign_pointer(ss->root, root); | 697 | rcu_assign_pointer(ss->root, root); |
698 | if (ss->bind) | 698 | if (ss->bind) |
699 | ss->bind(ss, cont); | 699 | ss->bind(ss, cgrp); |
700 | 700 | ||
701 | } else if (bit & removed_bits) { | 701 | } else if (bit & removed_bits) { |
702 | /* We're removing this subsystem */ | 702 | /* We're removing this subsystem */ |
703 | BUG_ON(cont->subsys[i] != dummytop->subsys[i]); | 703 | BUG_ON(cgrp->subsys[i] != dummytop->subsys[i]); |
704 | BUG_ON(cont->subsys[i]->cgroup != cont); | 704 | BUG_ON(cgrp->subsys[i]->cgroup != cgrp); |
705 | if (ss->bind) | 705 | if (ss->bind) |
706 | ss->bind(ss, dummytop); | 706 | ss->bind(ss, dummytop); |
707 | dummytop->subsys[i]->cgroup = dummytop; | 707 | dummytop->subsys[i]->cgroup = dummytop; |
708 | cont->subsys[i] = NULL; | 708 | cgrp->subsys[i] = NULL; |
709 | rcu_assign_pointer(subsys[i]->root, &rootnode); | 709 | rcu_assign_pointer(subsys[i]->root, &rootnode); |
710 | list_del(&ss->sibling); | 710 | list_del(&ss->sibling); |
711 | } else if (bit & final_bits) { | 711 | } else if (bit & final_bits) { |
712 | /* Subsystem state should already exist */ | 712 | /* Subsystem state should already exist */ |
713 | BUG_ON(!cont->subsys[i]); | 713 | BUG_ON(!cgrp->subsys[i]); |
714 | } else { | 714 | } else { |
715 | /* Subsystem state shouldn't exist */ | 715 | /* Subsystem state shouldn't exist */ |
716 | BUG_ON(cont->subsys[i]); | 716 | BUG_ON(cgrp->subsys[i]); |
717 | } | 717 | } |
718 | } | 718 | } |
719 | root->subsys_bits = root->actual_subsys_bits = final_bits; | 719 | root->subsys_bits = root->actual_subsys_bits = final_bits; |
@@ -797,10 +797,10 @@ static int cgroup_remount(struct super_block *sb, int *flags, char *data) | |||
797 | { | 797 | { |
798 | int ret = 0; | 798 | int ret = 0; |
799 | struct cgroupfs_root *root = sb->s_fs_info; | 799 | struct cgroupfs_root *root = sb->s_fs_info; |
800 | struct cgroup *cont = &root->top_cgroup; | 800 | struct cgroup *cgrp = &root->top_cgroup; |
801 | struct cgroup_sb_opts opts; | 801 | struct cgroup_sb_opts opts; |
802 | 802 | ||
803 | mutex_lock(&cont->dentry->d_inode->i_mutex); | 803 | mutex_lock(&cgrp->dentry->d_inode->i_mutex); |
804 | mutex_lock(&cgroup_mutex); | 804 | mutex_lock(&cgroup_mutex); |
805 | 805 | ||
806 | /* See what subsystems are wanted */ | 806 | /* See what subsystems are wanted */ |
@@ -818,7 +818,7 @@ static int cgroup_remount(struct super_block *sb, int *flags, char *data) | |||
818 | 818 | ||
819 | /* (re)populate subsystem files */ | 819 | /* (re)populate subsystem files */ |
820 | if (!ret) | 820 | if (!ret) |
821 | cgroup_populate_dir(cont); | 821 | cgroup_populate_dir(cgrp); |
822 | 822 | ||
823 | if (opts.release_agent) | 823 | if (opts.release_agent) |
824 | strcpy(root->release_agent_path, opts.release_agent); | 824 | strcpy(root->release_agent_path, opts.release_agent); |
@@ -826,7 +826,7 @@ static int cgroup_remount(struct super_block *sb, int *flags, char *data) | |||
826 | if (opts.release_agent) | 826 | if (opts.release_agent) |
827 | kfree(opts.release_agent); | 827 | kfree(opts.release_agent); |
828 | mutex_unlock(&cgroup_mutex); | 828 | mutex_unlock(&cgroup_mutex); |
829 | mutex_unlock(&cont->dentry->d_inode->i_mutex); | 829 | mutex_unlock(&cgrp->dentry->d_inode->i_mutex); |
830 | return ret; | 830 | return ret; |
831 | } | 831 | } |
832 | 832 | ||
@@ -839,16 +839,16 @@ static struct super_operations cgroup_ops = { | |||
839 | 839 | ||
840 | static void init_cgroup_root(struct cgroupfs_root *root) | 840 | static void init_cgroup_root(struct cgroupfs_root *root) |
841 | { | 841 | { |
842 | struct cgroup *cont = &root->top_cgroup; | 842 | struct cgroup *cgrp = &root->top_cgroup; |
843 | INIT_LIST_HEAD(&root->subsys_list); | 843 | INIT_LIST_HEAD(&root->subsys_list); |
844 | INIT_LIST_HEAD(&root->root_list); | 844 | INIT_LIST_HEAD(&root->root_list); |
845 | root->number_of_cgroups = 1; | 845 | root->number_of_cgroups = 1; |
846 | cont->root = root; | 846 | cgrp->root = root; |
847 | cont->top_cgroup = cont; | 847 | cgrp->top_cgroup = cgrp; |
848 | INIT_LIST_HEAD(&cont->sibling); | 848 | INIT_LIST_HEAD(&cgrp->sibling); |
849 | INIT_LIST_HEAD(&cont->children); | 849 | INIT_LIST_HEAD(&cgrp->children); |
850 | INIT_LIST_HEAD(&cont->css_sets); | 850 | INIT_LIST_HEAD(&cgrp->css_sets); |
851 | INIT_LIST_HEAD(&cont->release_list); | 851 | INIT_LIST_HEAD(&cgrp->release_list); |
852 | } | 852 | } |
853 | 853 | ||
854 | static int cgroup_test_super(struct super_block *sb, void *data) | 854 | static int cgroup_test_super(struct super_block *sb, void *data) |
@@ -955,7 +955,7 @@ static int cgroup_get_sb(struct file_system_type *fs_type, | |||
955 | root = NULL; | 955 | root = NULL; |
956 | } else { | 956 | } else { |
957 | /* New superblock */ | 957 | /* New superblock */ |
958 | struct cgroup *cont = &root->top_cgroup; | 958 | struct cgroup *cgrp = &root->top_cgroup; |
959 | struct inode *inode; | 959 | struct inode *inode; |
960 | 960 | ||
961 | BUG_ON(sb->s_root != NULL); | 961 | BUG_ON(sb->s_root != NULL); |
@@ -1009,10 +1009,10 @@ static int cgroup_get_sb(struct file_system_type *fs_type, | |||
1009 | BUG_ON(list_empty(&tmp_cg_links)); | 1009 | BUG_ON(list_empty(&tmp_cg_links)); |
1010 | link = list_entry(tmp_cg_links.next, | 1010 | link = list_entry(tmp_cg_links.next, |
1011 | struct cg_cgroup_link, | 1011 | struct cg_cgroup_link, |
1012 | cont_link_list); | 1012 | cgrp_link_list); |
1013 | list_del(&link->cont_link_list); | 1013 | list_del(&link->cgrp_link_list); |
1014 | link->cg = cg; | 1014 | link->cg = cg; |
1015 | list_add(&link->cont_link_list, | 1015 | list_add(&link->cgrp_link_list, |
1016 | &root->top_cgroup.css_sets); | 1016 | &root->top_cgroup.css_sets); |
1017 | list_add(&link->cg_link_list, &cg->cg_links); | 1017 | list_add(&link->cg_link_list, &cg->cg_links); |
1018 | l = l->next; | 1018 | l = l->next; |
@@ -1021,11 +1021,11 @@ static int cgroup_get_sb(struct file_system_type *fs_type, | |||
1021 | 1021 | ||
1022 | free_cg_links(&tmp_cg_links); | 1022 | free_cg_links(&tmp_cg_links); |
1023 | 1023 | ||
1024 | BUG_ON(!list_empty(&cont->sibling)); | 1024 | BUG_ON(!list_empty(&cgrp->sibling)); |
1025 | BUG_ON(!list_empty(&cont->children)); | 1025 | BUG_ON(!list_empty(&cgrp->children)); |
1026 | BUG_ON(root->number_of_cgroups != 1); | 1026 | BUG_ON(root->number_of_cgroups != 1); |
1027 | 1027 | ||
1028 | cgroup_populate_dir(cont); | 1028 | cgroup_populate_dir(cgrp); |
1029 | mutex_unlock(&inode->i_mutex); | 1029 | mutex_unlock(&inode->i_mutex); |
1030 | mutex_unlock(&cgroup_mutex); | 1030 | mutex_unlock(&cgroup_mutex); |
1031 | } | 1031 | } |
@@ -1041,14 +1041,14 @@ static int cgroup_get_sb(struct file_system_type *fs_type, | |||
1041 | 1041 | ||
1042 | static void cgroup_kill_sb(struct super_block *sb) { | 1042 | static void cgroup_kill_sb(struct super_block *sb) { |
1043 | struct cgroupfs_root *root = sb->s_fs_info; | 1043 | struct cgroupfs_root *root = sb->s_fs_info; |
1044 | struct cgroup *cont = &root->top_cgroup; | 1044 | struct cgroup *cgrp = &root->top_cgroup; |
1045 | int ret; | 1045 | int ret; |
1046 | 1046 | ||
1047 | BUG_ON(!root); | 1047 | BUG_ON(!root); |
1048 | 1048 | ||
1049 | BUG_ON(root->number_of_cgroups != 1); | 1049 | BUG_ON(root->number_of_cgroups != 1); |
1050 | BUG_ON(!list_empty(&cont->children)); | 1050 | BUG_ON(!list_empty(&cgrp->children)); |
1051 | BUG_ON(!list_empty(&cont->sibling)); | 1051 | BUG_ON(!list_empty(&cgrp->sibling)); |
1052 | 1052 | ||
1053 | mutex_lock(&cgroup_mutex); | 1053 | mutex_lock(&cgroup_mutex); |
1054 | 1054 | ||
@@ -1062,12 +1062,12 @@ static void cgroup_kill_sb(struct super_block *sb) { | |||
1062 | * root cgroup | 1062 | * root cgroup |
1063 | */ | 1063 | */ |
1064 | write_lock(&css_set_lock); | 1064 | write_lock(&css_set_lock); |
1065 | while (!list_empty(&cont->css_sets)) { | 1065 | while (!list_empty(&cgrp->css_sets)) { |
1066 | struct cg_cgroup_link *link; | 1066 | struct cg_cgroup_link *link; |
1067 | link = list_entry(cont->css_sets.next, | 1067 | link = list_entry(cgrp->css_sets.next, |
1068 | struct cg_cgroup_link, cont_link_list); | 1068 | struct cg_cgroup_link, cgrp_link_list); |
1069 | list_del(&link->cg_link_list); | 1069 | list_del(&link->cg_link_list); |
1070 | list_del(&link->cont_link_list); | 1070 | list_del(&link->cgrp_link_list); |
1071 | kfree(link); | 1071 | kfree(link); |
1072 | } | 1072 | } |
1073 | write_unlock(&css_set_lock); | 1073 | write_unlock(&css_set_lock); |
@@ -1088,7 +1088,7 @@ static struct file_system_type cgroup_fs_type = { | |||
1088 | .kill_sb = cgroup_kill_sb, | 1088 | .kill_sb = cgroup_kill_sb, |
1089 | }; | 1089 | }; |
1090 | 1090 | ||
1091 | static inline struct cgroup *__d_cont(struct dentry *dentry) | 1091 | static inline struct cgroup *__d_cgrp(struct dentry *dentry) |
1092 | { | 1092 | { |
1093 | return dentry->d_fsdata; | 1093 | return dentry->d_fsdata; |
1094 | } | 1094 | } |
@@ -1102,11 +1102,11 @@ static inline struct cftype *__d_cft(struct dentry *dentry) | |||
1102 | * Called with cgroup_mutex held. Writes path of cgroup into buf. | 1102 | * Called with cgroup_mutex held. Writes path of cgroup into buf. |
1103 | * Returns 0 on success, -errno on error. | 1103 | * Returns 0 on success, -errno on error. |
1104 | */ | 1104 | */ |
1105 | int cgroup_path(const struct cgroup *cont, char *buf, int buflen) | 1105 | int cgroup_path(const struct cgroup *cgrp, char *buf, int buflen) |
1106 | { | 1106 | { |
1107 | char *start; | 1107 | char *start; |
1108 | 1108 | ||
1109 | if (cont == dummytop) { | 1109 | if (cgrp == dummytop) { |
1110 | /* | 1110 | /* |
1111 | * Inactive subsystems have no dentry for their root | 1111 | * Inactive subsystems have no dentry for their root |
1112 | * cgroup | 1112 | * cgroup |
@@ -1119,14 +1119,14 @@ int cgroup_path(const struct cgroup *cont, char *buf, int buflen) | |||
1119 | 1119 | ||
1120 | *--start = '\0'; | 1120 | *--start = '\0'; |
1121 | for (;;) { | 1121 | for (;;) { |
1122 | int len = cont->dentry->d_name.len; | 1122 | int len = cgrp->dentry->d_name.len; |
1123 | if ((start -= len) < buf) | 1123 | if ((start -= len) < buf) |
1124 | return -ENAMETOOLONG; | 1124 | return -ENAMETOOLONG; |
1125 | memcpy(start, cont->dentry->d_name.name, len); | 1125 | memcpy(start, cgrp->dentry->d_name.name, len); |
1126 | cont = cont->parent; | 1126 | cgrp = cgrp->parent; |
1127 | if (!cont) | 1127 | if (!cgrp) |
1128 | break; | 1128 | break; |
1129 | if (!cont->parent) | 1129 | if (!cgrp->parent) |
1130 | continue; | 1130 | continue; |
1131 | if (--start < buf) | 1131 | if (--start < buf) |
1132 | return -ENAMETOOLONG; | 1132 | return -ENAMETOOLONG; |
@@ -1141,16 +1141,16 @@ int cgroup_path(const struct cgroup *cont, char *buf, int buflen) | |||
1141 | * its subsystem id. | 1141 | * its subsystem id. |
1142 | */ | 1142 | */ |
1143 | 1143 | ||
1144 | static void get_first_subsys(const struct cgroup *cont, | 1144 | static void get_first_subsys(const struct cgroup *cgrp, |
1145 | struct cgroup_subsys_state **css, int *subsys_id) | 1145 | struct cgroup_subsys_state **css, int *subsys_id) |
1146 | { | 1146 | { |
1147 | const struct cgroupfs_root *root = cont->root; | 1147 | const struct cgroupfs_root *root = cgrp->root; |
1148 | const struct cgroup_subsys *test_ss; | 1148 | const struct cgroup_subsys *test_ss; |
1149 | BUG_ON(list_empty(&root->subsys_list)); | 1149 | BUG_ON(list_empty(&root->subsys_list)); |
1150 | test_ss = list_entry(root->subsys_list.next, | 1150 | test_ss = list_entry(root->subsys_list.next, |
1151 | struct cgroup_subsys, sibling); | 1151 | struct cgroup_subsys, sibling); |
1152 | if (css) { | 1152 | if (css) { |
1153 | *css = cont->subsys[test_ss->subsys_id]; | 1153 | *css = cgrp->subsys[test_ss->subsys_id]; |
1154 | BUG_ON(!*css); | 1154 | BUG_ON(!*css); |
1155 | } | 1155 | } |
1156 | if (subsys_id) | 1156 | if (subsys_id) |
@@ -1158,31 +1158,31 @@ static void get_first_subsys(const struct cgroup *cont, | |||
1158 | } | 1158 | } |
1159 | 1159 | ||
1160 | /* | 1160 | /* |
1161 | * Attach task 'tsk' to cgroup 'cont' | 1161 | * Attach task 'tsk' to cgroup 'cgrp' |
1162 | * | 1162 | * |
1163 | * Call holding cgroup_mutex. May take task_lock of | 1163 | * Call holding cgroup_mutex. May take task_lock of |
1164 | * the task 'pid' during call. | 1164 | * the task 'pid' during call. |
1165 | */ | 1165 | */ |
1166 | static int attach_task(struct cgroup *cont, struct task_struct *tsk) | 1166 | static int attach_task(struct cgroup *cgrp, struct task_struct *tsk) |
1167 | { | 1167 | { |
1168 | int retval = 0; | 1168 | int retval = 0; |
1169 | struct cgroup_subsys *ss; | 1169 | struct cgroup_subsys *ss; |
1170 | struct cgroup *oldcont; | 1170 | struct cgroup *oldcgrp; |
1171 | struct css_set *cg = tsk->cgroups; | 1171 | struct css_set *cg = tsk->cgroups; |
1172 | struct css_set *newcg; | 1172 | struct css_set *newcg; |
1173 | struct cgroupfs_root *root = cont->root; | 1173 | struct cgroupfs_root *root = cgrp->root; |
1174 | int subsys_id; | 1174 | int subsys_id; |
1175 | 1175 | ||
1176 | get_first_subsys(cont, NULL, &subsys_id); | 1176 | get_first_subsys(cgrp, NULL, &subsys_id); |
1177 | 1177 | ||
1178 | /* Nothing to do if the task is already in that cgroup */ | 1178 | /* Nothing to do if the task is already in that cgroup */ |
1179 | oldcont = task_cgroup(tsk, subsys_id); | 1179 | oldcgrp = task_cgroup(tsk, subsys_id); |
1180 | if (cont == oldcont) | 1180 | if (cgrp == oldcgrp) |
1181 | return 0; | 1181 | return 0; |
1182 | 1182 | ||
1183 | for_each_subsys(root, ss) { | 1183 | for_each_subsys(root, ss) { |
1184 | if (ss->can_attach) { | 1184 | if (ss->can_attach) { |
1185 | retval = ss->can_attach(ss, cont, tsk); | 1185 | retval = ss->can_attach(ss, cgrp, tsk); |
1186 | if (retval) { | 1186 | if (retval) { |
1187 | return retval; | 1187 | return retval; |
1188 | } | 1188 | } |
@@ -1193,7 +1193,7 @@ static int attach_task(struct cgroup *cont, struct task_struct *tsk) | |||
1193 | * Locate or allocate a new css_set for this task, | 1193 | * Locate or allocate a new css_set for this task, |
1194 | * based on its final set of cgroups | 1194 | * based on its final set of cgroups |
1195 | */ | 1195 | */ |
1196 | newcg = find_css_set(cg, cont); | 1196 | newcg = find_css_set(cg, cgrp); |
1197 | if (!newcg) { | 1197 | if (!newcg) { |
1198 | return -ENOMEM; | 1198 | return -ENOMEM; |
1199 | } | 1199 | } |
@@ -1217,20 +1217,20 @@ static int attach_task(struct cgroup *cont, struct task_struct *tsk) | |||
1217 | 1217 | ||
1218 | for_each_subsys(root, ss) { | 1218 | for_each_subsys(root, ss) { |
1219 | if (ss->attach) { | 1219 | if (ss->attach) { |
1220 | ss->attach(ss, cont, oldcont, tsk); | 1220 | ss->attach(ss, cgrp, oldcgrp, tsk); |
1221 | } | 1221 | } |
1222 | } | 1222 | } |
1223 | set_bit(CONT_RELEASABLE, &oldcont->flags); | 1223 | set_bit(CGRP_RELEASABLE, &oldcgrp->flags); |
1224 | synchronize_rcu(); | 1224 | synchronize_rcu(); |
1225 | put_css_set(cg); | 1225 | put_css_set(cg); |
1226 | return 0; | 1226 | return 0; |
1227 | } | 1227 | } |
1228 | 1228 | ||
1229 | /* | 1229 | /* |
1230 | * Attach task with pid 'pid' to cgroup 'cont'. Call with | 1230 | * Attach task with pid 'pid' to cgroup 'cgrp'. Call with |
1231 | * cgroup_mutex, may take task_lock of task | 1231 | * cgroup_mutex, may take task_lock of task |
1232 | */ | 1232 | */ |
1233 | static int attach_task_by_pid(struct cgroup *cont, char *pidbuf) | 1233 | static int attach_task_by_pid(struct cgroup *cgrp, char *pidbuf) |
1234 | { | 1234 | { |
1235 | pid_t pid; | 1235 | pid_t pid; |
1236 | struct task_struct *tsk; | 1236 | struct task_struct *tsk; |
@@ -1259,7 +1259,7 @@ static int attach_task_by_pid(struct cgroup *cont, char *pidbuf) | |||
1259 | get_task_struct(tsk); | 1259 | get_task_struct(tsk); |
1260 | } | 1260 | } |
1261 | 1261 | ||
1262 | ret = attach_task(cont, tsk); | 1262 | ret = attach_task(cgrp, tsk); |
1263 | put_task_struct(tsk); | 1263 | put_task_struct(tsk); |
1264 | return ret; | 1264 | return ret; |
1265 | } | 1265 | } |
@@ -1275,7 +1275,7 @@ enum cgroup_filetype { | |||
1275 | FILE_RELEASE_AGENT, | 1275 | FILE_RELEASE_AGENT, |
1276 | }; | 1276 | }; |
1277 | 1277 | ||
1278 | static ssize_t cgroup_write_uint(struct cgroup *cont, struct cftype *cft, | 1278 | static ssize_t cgroup_write_uint(struct cgroup *cgrp, struct cftype *cft, |
1279 | struct file *file, | 1279 | struct file *file, |
1280 | const char __user *userbuf, | 1280 | const char __user *userbuf, |
1281 | size_t nbytes, loff_t *unused_ppos) | 1281 | size_t nbytes, loff_t *unused_ppos) |
@@ -1302,13 +1302,13 @@ static ssize_t cgroup_write_uint(struct cgroup *cont, struct cftype *cft, | |||
1302 | return -EINVAL; | 1302 | return -EINVAL; |
1303 | 1303 | ||
1304 | /* Pass to subsystem */ | 1304 | /* Pass to subsystem */ |
1305 | retval = cft->write_uint(cont, cft, val); | 1305 | retval = cft->write_uint(cgrp, cft, val); |
1306 | if (!retval) | 1306 | if (!retval) |
1307 | retval = nbytes; | 1307 | retval = nbytes; |
1308 | return retval; | 1308 | return retval; |
1309 | } | 1309 | } |
1310 | 1310 | ||
1311 | static ssize_t cgroup_common_file_write(struct cgroup *cont, | 1311 | static ssize_t cgroup_common_file_write(struct cgroup *cgrp, |
1312 | struct cftype *cft, | 1312 | struct cftype *cft, |
1313 | struct file *file, | 1313 | struct file *file, |
1314 | const char __user *userbuf, | 1314 | const char __user *userbuf, |
@@ -1334,25 +1334,25 @@ static ssize_t cgroup_common_file_write(struct cgroup *cont, | |||
1334 | 1334 | ||
1335 | mutex_lock(&cgroup_mutex); | 1335 | mutex_lock(&cgroup_mutex); |
1336 | 1336 | ||
1337 | if (cgroup_is_removed(cont)) { | 1337 | if (cgroup_is_removed(cgrp)) { |
1338 | retval = -ENODEV; | 1338 | retval = -ENODEV; |
1339 | goto out2; | 1339 | goto out2; |
1340 | } | 1340 | } |
1341 | 1341 | ||
1342 | switch (type) { | 1342 | switch (type) { |
1343 | case FILE_TASKLIST: | 1343 | case FILE_TASKLIST: |
1344 | retval = attach_task_by_pid(cont, buffer); | 1344 | retval = attach_task_by_pid(cgrp, buffer); |
1345 | break; | 1345 | break; |
1346 | case FILE_NOTIFY_ON_RELEASE: | 1346 | case FILE_NOTIFY_ON_RELEASE: |
1347 | clear_bit(CONT_RELEASABLE, &cont->flags); | 1347 | clear_bit(CGRP_RELEASABLE, &cgrp->flags); |
1348 | if (simple_strtoul(buffer, NULL, 10) != 0) | 1348 | if (simple_strtoul(buffer, NULL, 10) != 0) |
1349 | set_bit(CONT_NOTIFY_ON_RELEASE, &cont->flags); | 1349 | set_bit(CGRP_NOTIFY_ON_RELEASE, &cgrp->flags); |
1350 | else | 1350 | else |
1351 | clear_bit(CONT_NOTIFY_ON_RELEASE, &cont->flags); | 1351 | clear_bit(CGRP_NOTIFY_ON_RELEASE, &cgrp->flags); |
1352 | break; | 1352 | break; |
1353 | case FILE_RELEASE_AGENT: | 1353 | case FILE_RELEASE_AGENT: |
1354 | { | 1354 | { |
1355 | struct cgroupfs_root *root = cont->root; | 1355 | struct cgroupfs_root *root = cgrp->root; |
1356 | /* Strip trailing newline */ | 1356 | /* Strip trailing newline */ |
1357 | if (nbytes && (buffer[nbytes-1] == '\n')) { | 1357 | if (nbytes && (buffer[nbytes-1] == '\n')) { |
1358 | buffer[nbytes-1] = 0; | 1358 | buffer[nbytes-1] = 0; |
@@ -1387,30 +1387,30 @@ static ssize_t cgroup_file_write(struct file *file, const char __user *buf, | |||
1387 | size_t nbytes, loff_t *ppos) | 1387 | size_t nbytes, loff_t *ppos) |
1388 | { | 1388 | { |
1389 | struct cftype *cft = __d_cft(file->f_dentry); | 1389 | struct cftype *cft = __d_cft(file->f_dentry); |
1390 | struct cgroup *cont = __d_cont(file->f_dentry->d_parent); | 1390 | struct cgroup *cgrp = __d_cgrp(file->f_dentry->d_parent); |
1391 | 1391 | ||
1392 | if (!cft) | 1392 | if (!cft) |
1393 | return -ENODEV; | 1393 | return -ENODEV; |
1394 | if (cft->write) | 1394 | if (cft->write) |
1395 | return cft->write(cont, cft, file, buf, nbytes, ppos); | 1395 | return cft->write(cgrp, cft, file, buf, nbytes, ppos); |
1396 | if (cft->write_uint) | 1396 | if (cft->write_uint) |
1397 | return cgroup_write_uint(cont, cft, file, buf, nbytes, ppos); | 1397 | return cgroup_write_uint(cgrp, cft, file, buf, nbytes, ppos); |
1398 | return -EINVAL; | 1398 | return -EINVAL; |
1399 | } | 1399 | } |
1400 | 1400 | ||
1401 | static ssize_t cgroup_read_uint(struct cgroup *cont, struct cftype *cft, | 1401 | static ssize_t cgroup_read_uint(struct cgroup *cgrp, struct cftype *cft, |
1402 | struct file *file, | 1402 | struct file *file, |
1403 | char __user *buf, size_t nbytes, | 1403 | char __user *buf, size_t nbytes, |
1404 | loff_t *ppos) | 1404 | loff_t *ppos) |
1405 | { | 1405 | { |
1406 | char tmp[64]; | 1406 | char tmp[64]; |
1407 | u64 val = cft->read_uint(cont, cft); | 1407 | u64 val = cft->read_uint(cgrp, cft); |
1408 | int len = sprintf(tmp, "%llu\n", (unsigned long long) val); | 1408 | int len = sprintf(tmp, "%llu\n", (unsigned long long) val); |
1409 | 1409 | ||
1410 | return simple_read_from_buffer(buf, nbytes, ppos, tmp, len); | 1410 | return simple_read_from_buffer(buf, nbytes, ppos, tmp, len); |
1411 | } | 1411 | } |
1412 | 1412 | ||
1413 | static ssize_t cgroup_common_file_read(struct cgroup *cont, | 1413 | static ssize_t cgroup_common_file_read(struct cgroup *cgrp, |
1414 | struct cftype *cft, | 1414 | struct cftype *cft, |
1415 | struct file *file, | 1415 | struct file *file, |
1416 | char __user *buf, | 1416 | char __user *buf, |
@@ -1432,7 +1432,7 @@ static ssize_t cgroup_common_file_read(struct cgroup *cont, | |||
1432 | struct cgroupfs_root *root; | 1432 | struct cgroupfs_root *root; |
1433 | size_t n; | 1433 | size_t n; |
1434 | mutex_lock(&cgroup_mutex); | 1434 | mutex_lock(&cgroup_mutex); |
1435 | root = cont->root; | 1435 | root = cgrp->root; |
1436 | n = strnlen(root->release_agent_path, | 1436 | n = strnlen(root->release_agent_path, |
1437 | sizeof(root->release_agent_path)); | 1437 | sizeof(root->release_agent_path)); |
1438 | n = min(n, (size_t) PAGE_SIZE); | 1438 | n = min(n, (size_t) PAGE_SIZE); |
@@ -1457,15 +1457,15 @@ static ssize_t cgroup_file_read(struct file *file, char __user *buf, | |||
1457 | size_t nbytes, loff_t *ppos) | 1457 | size_t nbytes, loff_t *ppos) |
1458 | { | 1458 | { |
1459 | struct cftype *cft = __d_cft(file->f_dentry); | 1459 | struct cftype *cft = __d_cft(file->f_dentry); |
1460 | struct cgroup *cont = __d_cont(file->f_dentry->d_parent); | 1460 | struct cgroup *cgrp = __d_cgrp(file->f_dentry->d_parent); |
1461 | 1461 | ||
1462 | if (!cft) | 1462 | if (!cft) |
1463 | return -ENODEV; | 1463 | return -ENODEV; |
1464 | 1464 | ||
1465 | if (cft->read) | 1465 | if (cft->read) |
1466 | return cft->read(cont, cft, file, buf, nbytes, ppos); | 1466 | return cft->read(cgrp, cft, file, buf, nbytes, ppos); |
1467 | if (cft->read_uint) | 1467 | if (cft->read_uint) |
1468 | return cgroup_read_uint(cont, cft, file, buf, nbytes, ppos); | 1468 | return cgroup_read_uint(cgrp, cft, file, buf, nbytes, ppos); |
1469 | return -EINVAL; | 1469 | return -EINVAL; |
1470 | } | 1470 | } |
1471 | 1471 | ||
@@ -1567,24 +1567,24 @@ static int cgroup_create_file(struct dentry *dentry, int mode, | |||
1567 | 1567 | ||
1568 | /* | 1568 | /* |
1569 | * cgroup_create_dir - create a directory for an object. | 1569 | * cgroup_create_dir - create a directory for an object. |
1570 | * cont: the cgroup we create the directory for. | 1570 | * cgrp: the cgroup we create the directory for. |
1571 | * It must have a valid ->parent field | 1571 | * It must have a valid ->parent field |
1572 | * And we are going to fill its ->dentry field. | 1572 | * And we are going to fill its ->dentry field. |
1573 | * dentry: dentry of the new container | 1573 | * dentry: dentry of the new cgroup |
1574 | * mode: mode to set on new directory. | 1574 | * mode: mode to set on new directory. |
1575 | */ | 1575 | */ |
1576 | static int cgroup_create_dir(struct cgroup *cont, struct dentry *dentry, | 1576 | static int cgroup_create_dir(struct cgroup *cgrp, struct dentry *dentry, |
1577 | int mode) | 1577 | int mode) |
1578 | { | 1578 | { |
1579 | struct dentry *parent; | 1579 | struct dentry *parent; |
1580 | int error = 0; | 1580 | int error = 0; |
1581 | 1581 | ||
1582 | parent = cont->parent->dentry; | 1582 | parent = cgrp->parent->dentry; |
1583 | error = cgroup_create_file(dentry, S_IFDIR | mode, cont->root->sb); | 1583 | error = cgroup_create_file(dentry, S_IFDIR | mode, cgrp->root->sb); |
1584 | if (!error) { | 1584 | if (!error) { |
1585 | dentry->d_fsdata = cont; | 1585 | dentry->d_fsdata = cgrp; |
1586 | inc_nlink(parent->d_inode); | 1586 | inc_nlink(parent->d_inode); |
1587 | cont->dentry = dentry; | 1587 | cgrp->dentry = dentry; |
1588 | dget(dentry); | 1588 | dget(dentry); |
1589 | } | 1589 | } |
1590 | dput(dentry); | 1590 | dput(dentry); |
@@ -1592,16 +1592,16 @@ static int cgroup_create_dir(struct cgroup *cont, struct dentry *dentry, | |||
1592 | return error; | 1592 | return error; |
1593 | } | 1593 | } |
1594 | 1594 | ||
1595 | int cgroup_add_file(struct cgroup *cont, | 1595 | int cgroup_add_file(struct cgroup *cgrp, |
1596 | struct cgroup_subsys *subsys, | 1596 | struct cgroup_subsys *subsys, |
1597 | const struct cftype *cft) | 1597 | const struct cftype *cft) |
1598 | { | 1598 | { |
1599 | struct dentry *dir = cont->dentry; | 1599 | struct dentry *dir = cgrp->dentry; |
1600 | struct dentry *dentry; | 1600 | struct dentry *dentry; |
1601 | int error; | 1601 | int error; |
1602 | 1602 | ||
1603 | char name[MAX_CGROUP_TYPE_NAMELEN + MAX_CFTYPE_NAME + 2] = { 0 }; | 1603 | char name[MAX_CGROUP_TYPE_NAMELEN + MAX_CFTYPE_NAME + 2] = { 0 }; |
1604 | if (subsys && !test_bit(ROOT_NOPREFIX, &cont->root->flags)) { | 1604 | if (subsys && !test_bit(ROOT_NOPREFIX, &cgrp->root->flags)) { |
1605 | strcpy(name, subsys->name); | 1605 | strcpy(name, subsys->name); |
1606 | strcat(name, "."); | 1606 | strcat(name, "."); |
1607 | } | 1607 | } |
@@ -1610,7 +1610,7 @@ int cgroup_add_file(struct cgroup *cont, | |||
1610 | dentry = lookup_one_len(name, dir, strlen(name)); | 1610 | dentry = lookup_one_len(name, dir, strlen(name)); |
1611 | if (!IS_ERR(dentry)) { | 1611 | if (!IS_ERR(dentry)) { |
1612 | error = cgroup_create_file(dentry, 0644 | S_IFREG, | 1612 | error = cgroup_create_file(dentry, 0644 | S_IFREG, |
1613 | cont->root->sb); | 1613 | cgrp->root->sb); |
1614 | if (!error) | 1614 | if (!error) |
1615 | dentry->d_fsdata = (void *)cft; | 1615 | dentry->d_fsdata = (void *)cft; |
1616 | dput(dentry); | 1616 | dput(dentry); |
@@ -1619,14 +1619,14 @@ int cgroup_add_file(struct cgroup *cont, | |||
1619 | return error; | 1619 | return error; |
1620 | } | 1620 | } |
1621 | 1621 | ||
1622 | int cgroup_add_files(struct cgroup *cont, | 1622 | int cgroup_add_files(struct cgroup *cgrp, |
1623 | struct cgroup_subsys *subsys, | 1623 | struct cgroup_subsys *subsys, |
1624 | const struct cftype cft[], | 1624 | const struct cftype cft[], |
1625 | int count) | 1625 | int count) |
1626 | { | 1626 | { |
1627 | int i, err; | 1627 | int i, err; |
1628 | for (i = 0; i < count; i++) { | 1628 | for (i = 0; i < count; i++) { |
1629 | err = cgroup_add_file(cont, subsys, &cft[i]); | 1629 | err = cgroup_add_file(cgrp, subsys, &cft[i]); |
1630 | if (err) | 1630 | if (err) |
1631 | return err; | 1631 | return err; |
1632 | } | 1632 | } |
@@ -1635,16 +1635,16 @@ int cgroup_add_files(struct cgroup *cont, | |||
1635 | 1635 | ||
1636 | /* Count the number of tasks in a cgroup. */ | 1636 | /* Count the number of tasks in a cgroup. */ |
1637 | 1637 | ||
1638 | int cgroup_task_count(const struct cgroup *cont) | 1638 | int cgroup_task_count(const struct cgroup *cgrp) |
1639 | { | 1639 | { |
1640 | int count = 0; | 1640 | int count = 0; |
1641 | struct list_head *l; | 1641 | struct list_head *l; |
1642 | 1642 | ||
1643 | read_lock(&css_set_lock); | 1643 | read_lock(&css_set_lock); |
1644 | l = cont->css_sets.next; | 1644 | l = cgrp->css_sets.next; |
1645 | while (l != &cont->css_sets) { | 1645 | while (l != &cgrp->css_sets) { |
1646 | struct cg_cgroup_link *link = | 1646 | struct cg_cgroup_link *link = |
1647 | list_entry(l, struct cg_cgroup_link, cont_link_list); | 1647 | list_entry(l, struct cg_cgroup_link, cgrp_link_list); |
1648 | count += atomic_read(&link->cg->ref.refcount); | 1648 | count += atomic_read(&link->cg->ref.refcount); |
1649 | l = l->next; | 1649 | l = l->next; |
1650 | } | 1650 | } |
@@ -1656,7 +1656,7 @@ int cgroup_task_count(const struct cgroup *cont) | |||
1656 | * Advance a list_head iterator. The iterator should be positioned at | 1656 | * Advance a list_head iterator. The iterator should be positioned at |
1657 | * the start of a css_set | 1657 | * the start of a css_set |
1658 | */ | 1658 | */ |
1659 | static void cgroup_advance_iter(struct cgroup *cont, | 1659 | static void cgroup_advance_iter(struct cgroup *cgrp, |
1660 | struct cgroup_iter *it) | 1660 | struct cgroup_iter *it) |
1661 | { | 1661 | { |
1662 | struct list_head *l = it->cg_link; | 1662 | struct list_head *l = it->cg_link; |
@@ -1666,18 +1666,18 @@ static void cgroup_advance_iter(struct cgroup *cont, | |||
1666 | /* Advance to the next non-empty css_set */ | 1666 | /* Advance to the next non-empty css_set */ |
1667 | do { | 1667 | do { |
1668 | l = l->next; | 1668 | l = l->next; |
1669 | if (l == &cont->css_sets) { | 1669 | if (l == &cgrp->css_sets) { |
1670 | it->cg_link = NULL; | 1670 | it->cg_link = NULL; |
1671 | return; | 1671 | return; |
1672 | } | 1672 | } |
1673 | link = list_entry(l, struct cg_cgroup_link, cont_link_list); | 1673 | link = list_entry(l, struct cg_cgroup_link, cgrp_link_list); |
1674 | cg = link->cg; | 1674 | cg = link->cg; |
1675 | } while (list_empty(&cg->tasks)); | 1675 | } while (list_empty(&cg->tasks)); |
1676 | it->cg_link = l; | 1676 | it->cg_link = l; |
1677 | it->task = cg->tasks.next; | 1677 | it->task = cg->tasks.next; |
1678 | } | 1678 | } |
1679 | 1679 | ||
1680 | void cgroup_iter_start(struct cgroup *cont, struct cgroup_iter *it) | 1680 | void cgroup_iter_start(struct cgroup *cgrp, struct cgroup_iter *it) |
1681 | { | 1681 | { |
1682 | /* | 1682 | /* |
1683 | * The first time anyone tries to iterate across a cgroup, | 1683 | * The first time anyone tries to iterate across a cgroup, |
@@ -1697,11 +1697,11 @@ void cgroup_iter_start(struct cgroup *cont, struct cgroup_iter *it) | |||
1697 | write_unlock(&css_set_lock); | 1697 | write_unlock(&css_set_lock); |
1698 | } | 1698 | } |
1699 | read_lock(&css_set_lock); | 1699 | read_lock(&css_set_lock); |
1700 | it->cg_link = &cont->css_sets; | 1700 | it->cg_link = &cgrp->css_sets; |
1701 | cgroup_advance_iter(cont, it); | 1701 | cgroup_advance_iter(cgrp, it); |
1702 | } | 1702 | } |
1703 | 1703 | ||
1704 | struct task_struct *cgroup_iter_next(struct cgroup *cont, | 1704 | struct task_struct *cgroup_iter_next(struct cgroup *cgrp, |
1705 | struct cgroup_iter *it) | 1705 | struct cgroup_iter *it) |
1706 | { | 1706 | { |
1707 | struct task_struct *res; | 1707 | struct task_struct *res; |
@@ -1716,14 +1716,14 @@ struct task_struct *cgroup_iter_next(struct cgroup *cont, | |||
1716 | if (l == &res->cgroups->tasks) { | 1716 | if (l == &res->cgroups->tasks) { |
1717 | /* We reached the end of this task list - move on to | 1717 | /* We reached the end of this task list - move on to |
1718 | * the next cg_cgroup_link */ | 1718 | * the next cg_cgroup_link */ |
1719 | cgroup_advance_iter(cont, it); | 1719 | cgroup_advance_iter(cgrp, it); |
1720 | } else { | 1720 | } else { |
1721 | it->task = l; | 1721 | it->task = l; |
1722 | } | 1722 | } |
1723 | return res; | 1723 | return res; |
1724 | } | 1724 | } |
1725 | 1725 | ||
1726 | void cgroup_iter_end(struct cgroup *cont, struct cgroup_iter *it) | 1726 | void cgroup_iter_end(struct cgroup *cgrp, struct cgroup_iter *it) |
1727 | { | 1727 | { |
1728 | read_unlock(&css_set_lock); | 1728 | read_unlock(&css_set_lock); |
1729 | } | 1729 | } |
@@ -1749,23 +1749,23 @@ struct ctr_struct { | |||
1749 | 1749 | ||
1750 | /* | 1750 | /* |
1751 | * Load into 'pidarray' up to 'npids' of the tasks using cgroup | 1751 | * Load into 'pidarray' up to 'npids' of the tasks using cgroup |
1752 | * 'cont'. Return actual number of pids loaded. No need to | 1752 | * 'cgrp'. Return actual number of pids loaded. No need to |
1753 | * task_lock(p) when reading out p->cgroup, since we're in an RCU | 1753 | * task_lock(p) when reading out p->cgroup, since we're in an RCU |
1754 | * read section, so the css_set can't go away, and is | 1754 | * read section, so the css_set can't go away, and is |
1755 | * immutable after creation. | 1755 | * immutable after creation. |
1756 | */ | 1756 | */ |
1757 | static int pid_array_load(pid_t *pidarray, int npids, struct cgroup *cont) | 1757 | static int pid_array_load(pid_t *pidarray, int npids, struct cgroup *cgrp) |
1758 | { | 1758 | { |
1759 | int n = 0; | 1759 | int n = 0; |
1760 | struct cgroup_iter it; | 1760 | struct cgroup_iter it; |
1761 | struct task_struct *tsk; | 1761 | struct task_struct *tsk; |
1762 | cgroup_iter_start(cont, &it); | 1762 | cgroup_iter_start(cgrp, &it); |
1763 | while ((tsk = cgroup_iter_next(cont, &it))) { | 1763 | while ((tsk = cgroup_iter_next(cgrp, &it))) { |
1764 | if (unlikely(n == npids)) | 1764 | if (unlikely(n == npids)) |
1765 | break; | 1765 | break; |
1766 | pidarray[n++] = task_pid_nr(tsk); | 1766 | pidarray[n++] = task_pid_nr(tsk); |
1767 | } | 1767 | } |
1768 | cgroup_iter_end(cont, &it); | 1768 | cgroup_iter_end(cgrp, &it); |
1769 | return n; | 1769 | return n; |
1770 | } | 1770 | } |
1771 | 1771 | ||
@@ -1780,7 +1780,7 @@ static int pid_array_load(pid_t *pidarray, int npids, struct cgroup *cont) | |||
1780 | int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry) | 1780 | int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry) |
1781 | { | 1781 | { |
1782 | int ret = -EINVAL; | 1782 | int ret = -EINVAL; |
1783 | struct cgroup *cont; | 1783 | struct cgroup *cgrp; |
1784 | struct cgroup_iter it; | 1784 | struct cgroup_iter it; |
1785 | struct task_struct *tsk; | 1785 | struct task_struct *tsk; |
1786 | /* | 1786 | /* |
@@ -1790,11 +1790,11 @@ int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry) | |||
1790 | goto err; | 1790 | goto err; |
1791 | 1791 | ||
1792 | ret = 0; | 1792 | ret = 0; |
1793 | cont = dentry->d_fsdata; | 1793 | cgrp = dentry->d_fsdata; |
1794 | rcu_read_lock(); | 1794 | rcu_read_lock(); |
1795 | 1795 | ||
1796 | cgroup_iter_start(cont, &it); | 1796 | cgroup_iter_start(cgrp, &it); |
1797 | while ((tsk = cgroup_iter_next(cont, &it))) { | 1797 | while ((tsk = cgroup_iter_next(cgrp, &it))) { |
1798 | switch (tsk->state) { | 1798 | switch (tsk->state) { |
1799 | case TASK_RUNNING: | 1799 | case TASK_RUNNING: |
1800 | stats->nr_running++; | 1800 | stats->nr_running++; |
@@ -1814,7 +1814,7 @@ int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry) | |||
1814 | break; | 1814 | break; |
1815 | } | 1815 | } |
1816 | } | 1816 | } |
1817 | cgroup_iter_end(cont, &it); | 1817 | cgroup_iter_end(cgrp, &it); |
1818 | 1818 | ||
1819 | rcu_read_unlock(); | 1819 | rcu_read_unlock(); |
1820 | err: | 1820 | err: |
@@ -1849,7 +1849,7 @@ static int pid_array_to_buf(char *buf, int sz, pid_t *a, int npids) | |||
1849 | */ | 1849 | */ |
1850 | static int cgroup_tasks_open(struct inode *unused, struct file *file) | 1850 | static int cgroup_tasks_open(struct inode *unused, struct file *file) |
1851 | { | 1851 | { |
1852 | struct cgroup *cont = __d_cont(file->f_dentry->d_parent); | 1852 | struct cgroup *cgrp = __d_cgrp(file->f_dentry->d_parent); |
1853 | struct ctr_struct *ctr; | 1853 | struct ctr_struct *ctr; |
1854 | pid_t *pidarray; | 1854 | pid_t *pidarray; |
1855 | int npids; | 1855 | int npids; |
@@ -1868,13 +1868,13 @@ static int cgroup_tasks_open(struct inode *unused, struct file *file) | |||
1868 | * caller from the case that the additional cgroup users didn't | 1868 | * caller from the case that the additional cgroup users didn't |
1869 | * show up until sometime later on. | 1869 | * show up until sometime later on. |
1870 | */ | 1870 | */ |
1871 | npids = cgroup_task_count(cont); | 1871 | npids = cgroup_task_count(cgrp); |
1872 | if (npids) { | 1872 | if (npids) { |
1873 | pidarray = kmalloc(npids * sizeof(pid_t), GFP_KERNEL); | 1873 | pidarray = kmalloc(npids * sizeof(pid_t), GFP_KERNEL); |
1874 | if (!pidarray) | 1874 | if (!pidarray) |
1875 | goto err1; | 1875 | goto err1; |
1876 | 1876 | ||
1877 | npids = pid_array_load(pidarray, npids, cont); | 1877 | npids = pid_array_load(pidarray, npids, cgrp); |
1878 | sort(pidarray, npids, sizeof(pid_t), cmppid, NULL); | 1878 | sort(pidarray, npids, sizeof(pid_t), cmppid, NULL); |
1879 | 1879 | ||
1880 | /* Call pid_array_to_buf() twice, first just to get bufsz */ | 1880 | /* Call pid_array_to_buf() twice, first just to get bufsz */ |
@@ -1900,7 +1900,7 @@ err0: | |||
1900 | return -ENOMEM; | 1900 | return -ENOMEM; |
1901 | } | 1901 | } |
1902 | 1902 | ||
1903 | static ssize_t cgroup_tasks_read(struct cgroup *cont, | 1903 | static ssize_t cgroup_tasks_read(struct cgroup *cgrp, |
1904 | struct cftype *cft, | 1904 | struct cftype *cft, |
1905 | struct file *file, char __user *buf, | 1905 | struct file *file, char __user *buf, |
1906 | size_t nbytes, loff_t *ppos) | 1906 | size_t nbytes, loff_t *ppos) |
@@ -1923,15 +1923,15 @@ static int cgroup_tasks_release(struct inode *unused_inode, | |||
1923 | return 0; | 1923 | return 0; |
1924 | } | 1924 | } |
1925 | 1925 | ||
1926 | static u64 cgroup_read_notify_on_release(struct cgroup *cont, | 1926 | static u64 cgroup_read_notify_on_release(struct cgroup *cgrp, |
1927 | struct cftype *cft) | 1927 | struct cftype *cft) |
1928 | { | 1928 | { |
1929 | return notify_on_release(cont); | 1929 | return notify_on_release(cgrp); |
1930 | } | 1930 | } |
1931 | 1931 | ||
1932 | static u64 cgroup_read_releasable(struct cgroup *cont, struct cftype *cft) | 1932 | static u64 cgroup_read_releasable(struct cgroup *cgrp, struct cftype *cft) |
1933 | { | 1933 | { |
1934 | return test_bit(CONT_RELEASABLE, &cont->flags); | 1934 | return test_bit(CGRP_RELEASABLE, &cgrp->flags); |
1935 | } | 1935 | } |
1936 | 1936 | ||
1937 | /* | 1937 | /* |
@@ -1968,25 +1968,25 @@ static struct cftype cft_release_agent = { | |||
1968 | .private = FILE_RELEASE_AGENT, | 1968 | .private = FILE_RELEASE_AGENT, |
1969 | }; | 1969 | }; |
1970 | 1970 | ||
1971 | static int cgroup_populate_dir(struct cgroup *cont) | 1971 | static int cgroup_populate_dir(struct cgroup *cgrp) |
1972 | { | 1972 | { |
1973 | int err; | 1973 | int err; |
1974 | struct cgroup_subsys *ss; | 1974 | struct cgroup_subsys *ss; |
1975 | 1975 | ||
1976 | /* First clear out any existing files */ | 1976 | /* First clear out any existing files */ |
1977 | cgroup_clear_directory(cont->dentry); | 1977 | cgroup_clear_directory(cgrp->dentry); |
1978 | 1978 | ||
1979 | err = cgroup_add_files(cont, NULL, files, ARRAY_SIZE(files)); | 1979 | err = cgroup_add_files(cgrp, NULL, files, ARRAY_SIZE(files)); |
1980 | if (err < 0) | 1980 | if (err < 0) |
1981 | return err; | 1981 | return err; |
1982 | 1982 | ||
1983 | if (cont == cont->top_cgroup) { | 1983 | if (cgrp == cgrp->top_cgroup) { |
1984 | if ((err = cgroup_add_file(cont, NULL, &cft_release_agent)) < 0) | 1984 | if ((err = cgroup_add_file(cgrp, NULL, &cft_release_agent)) < 0) |
1985 | return err; | 1985 | return err; |
1986 | } | 1986 | } |
1987 | 1987 | ||
1988 | for_each_subsys(cont->root, ss) { | 1988 | for_each_subsys(cgrp->root, ss) { |
1989 | if (ss->populate && (err = ss->populate(ss, cont)) < 0) | 1989 | if (ss->populate && (err = ss->populate(ss, cgrp)) < 0) |
1990 | return err; | 1990 | return err; |
1991 | } | 1991 | } |
1992 | 1992 | ||
@@ -1995,15 +1995,15 @@ static int cgroup_populate_dir(struct cgroup *cont) | |||
1995 | 1995 | ||
1996 | static void init_cgroup_css(struct cgroup_subsys_state *css, | 1996 | static void init_cgroup_css(struct cgroup_subsys_state *css, |
1997 | struct cgroup_subsys *ss, | 1997 | struct cgroup_subsys *ss, |
1998 | struct cgroup *cont) | 1998 | struct cgroup *cgrp) |
1999 | { | 1999 | { |
2000 | css->cgroup = cont; | 2000 | css->cgroup = cgrp; |
2001 | atomic_set(&css->refcnt, 0); | 2001 | atomic_set(&css->refcnt, 0); |
2002 | css->flags = 0; | 2002 | css->flags = 0; |
2003 | if (cont == dummytop) | 2003 | if (cgrp == dummytop) |
2004 | set_bit(CSS_ROOT, &css->flags); | 2004 | set_bit(CSS_ROOT, &css->flags); |
2005 | BUG_ON(cont->subsys[ss->subsys_id]); | 2005 | BUG_ON(cgrp->subsys[ss->subsys_id]); |
2006 | cont->subsys[ss->subsys_id] = css; | 2006 | cgrp->subsys[ss->subsys_id] = css; |
2007 | } | 2007 | } |
2008 | 2008 | ||
2009 | /* | 2009 | /* |
@@ -2018,14 +2018,14 @@ static void init_cgroup_css(struct cgroup_subsys_state *css, | |||
2018 | static long cgroup_create(struct cgroup *parent, struct dentry *dentry, | 2018 | static long cgroup_create(struct cgroup *parent, struct dentry *dentry, |
2019 | int mode) | 2019 | int mode) |
2020 | { | 2020 | { |
2021 | struct cgroup *cont; | 2021 | struct cgroup *cgrp; |
2022 | struct cgroupfs_root *root = parent->root; | 2022 | struct cgroupfs_root *root = parent->root; |
2023 | int err = 0; | 2023 | int err = 0; |
2024 | struct cgroup_subsys *ss; | 2024 | struct cgroup_subsys *ss; |
2025 | struct super_block *sb = root->sb; | 2025 | struct super_block *sb = root->sb; |
2026 | 2026 | ||
2027 | cont = kzalloc(sizeof(*cont), GFP_KERNEL); | 2027 | cgrp = kzalloc(sizeof(*cgrp), GFP_KERNEL); |
2028 | if (!cont) | 2028 | if (!cgrp) |
2029 | return -ENOMEM; | 2029 | return -ENOMEM; |
2030 | 2030 | ||
2031 | /* Grab a reference on the superblock so the hierarchy doesn't | 2031 | /* Grab a reference on the superblock so the hierarchy doesn't |
@@ -2037,53 +2037,53 @@ static long cgroup_create(struct cgroup *parent, struct dentry *dentry, | |||
2037 | 2037 | ||
2038 | mutex_lock(&cgroup_mutex); | 2038 | mutex_lock(&cgroup_mutex); |
2039 | 2039 | ||
2040 | cont->flags = 0; | 2040 | cgrp->flags = 0; |
2041 | INIT_LIST_HEAD(&cont->sibling); | 2041 | INIT_LIST_HEAD(&cgrp->sibling); |
2042 | INIT_LIST_HEAD(&cont->children); | 2042 | INIT_LIST_HEAD(&cgrp->children); |
2043 | INIT_LIST_HEAD(&cont->css_sets); | 2043 | INIT_LIST_HEAD(&cgrp->css_sets); |
2044 | INIT_LIST_HEAD(&cont->release_list); | 2044 | INIT_LIST_HEAD(&cgrp->release_list); |
2045 | 2045 | ||
2046 | cont->parent = parent; | 2046 | cgrp->parent = parent; |
2047 | cont->root = parent->root; | 2047 | cgrp->root = parent->root; |
2048 | cont->top_cgroup = parent->top_cgroup; | 2048 | cgrp->top_cgroup = parent->top_cgroup; |
2049 | 2049 | ||
2050 | for_each_subsys(root, ss) { | 2050 | for_each_subsys(root, ss) { |
2051 | struct cgroup_subsys_state *css = ss->create(ss, cont); | 2051 | struct cgroup_subsys_state *css = ss->create(ss, cgrp); |
2052 | if (IS_ERR(css)) { | 2052 | if (IS_ERR(css)) { |
2053 | err = PTR_ERR(css); | 2053 | err = PTR_ERR(css); |
2054 | goto err_destroy; | 2054 | goto err_destroy; |
2055 | } | 2055 | } |
2056 | init_cgroup_css(css, ss, cont); | 2056 | init_cgroup_css(css, ss, cgrp); |
2057 | } | 2057 | } |
2058 | 2058 | ||
2059 | list_add(&cont->sibling, &cont->parent->children); | 2059 | list_add(&cgrp->sibling, &cgrp->parent->children); |
2060 | root->number_of_cgroups++; | 2060 | root->number_of_cgroups++; |
2061 | 2061 | ||
2062 | err = cgroup_create_dir(cont, dentry, mode); | 2062 | err = cgroup_create_dir(cgrp, dentry, mode); |
2063 | if (err < 0) | 2063 | if (err < 0) |
2064 | goto err_remove; | 2064 | goto err_remove; |
2065 | 2065 | ||
2066 | /* The cgroup directory was pre-locked for us */ | 2066 | /* The cgroup directory was pre-locked for us */ |
2067 | BUG_ON(!mutex_is_locked(&cont->dentry->d_inode->i_mutex)); | 2067 | BUG_ON(!mutex_is_locked(&cgrp->dentry->d_inode->i_mutex)); |
2068 | 2068 | ||
2069 | err = cgroup_populate_dir(cont); | 2069 | err = cgroup_populate_dir(cgrp); |
2070 | /* If err < 0, we have a half-filled directory - oh well ;) */ | 2070 | /* If err < 0, we have a half-filled directory - oh well ;) */ |
2071 | 2071 | ||
2072 | mutex_unlock(&cgroup_mutex); | 2072 | mutex_unlock(&cgroup_mutex); |
2073 | mutex_unlock(&cont->dentry->d_inode->i_mutex); | 2073 | mutex_unlock(&cgrp->dentry->d_inode->i_mutex); |
2074 | 2074 | ||
2075 | return 0; | 2075 | return 0; |
2076 | 2076 | ||
2077 | err_remove: | 2077 | err_remove: |
2078 | 2078 | ||
2079 | list_del(&cont->sibling); | 2079 | list_del(&cgrp->sibling); |
2080 | root->number_of_cgroups--; | 2080 | root->number_of_cgroups--; |
2081 | 2081 | ||
2082 | err_destroy: | 2082 | err_destroy: |
2083 | 2083 | ||
2084 | for_each_subsys(root, ss) { | 2084 | for_each_subsys(root, ss) { |
2085 | if (cont->subsys[ss->subsys_id]) | 2085 | if (cgrp->subsys[ss->subsys_id]) |
2086 | ss->destroy(ss, cont); | 2086 | ss->destroy(ss, cgrp); |
2087 | } | 2087 | } |
2088 | 2088 | ||
2089 | mutex_unlock(&cgroup_mutex); | 2089 | mutex_unlock(&cgroup_mutex); |
@@ -2091,7 +2091,7 @@ static long cgroup_create(struct cgroup *parent, struct dentry *dentry, | |||
2091 | /* Release the reference count that we took on the superblock */ | 2091 | /* Release the reference count that we took on the superblock */ |
2092 | deactivate_super(sb); | 2092 | deactivate_super(sb); |
2093 | 2093 | ||
2094 | kfree(cont); | 2094 | kfree(cgrp); |
2095 | return err; | 2095 | return err; |
2096 | } | 2096 | } |
2097 | 2097 | ||
@@ -2103,7 +2103,7 @@ static int cgroup_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
2103 | return cgroup_create(c_parent, dentry, mode | S_IFDIR); | 2103 | return cgroup_create(c_parent, dentry, mode | S_IFDIR); |
2104 | } | 2104 | } |
2105 | 2105 | ||
2106 | static inline int cgroup_has_css_refs(struct cgroup *cont) | 2106 | static inline int cgroup_has_css_refs(struct cgroup *cgrp) |
2107 | { | 2107 | { |
2108 | /* Check the reference count on each subsystem. Since we | 2108 | /* Check the reference count on each subsystem. Since we |
2109 | * already established that there are no tasks in the | 2109 | * already established that there are no tasks in the |
@@ -2119,9 +2119,9 @@ static inline int cgroup_has_css_refs(struct cgroup *cont) | |||
2119 | struct cgroup_subsys *ss = subsys[i]; | 2119 | struct cgroup_subsys *ss = subsys[i]; |
2120 | struct cgroup_subsys_state *css; | 2120 | struct cgroup_subsys_state *css; |
2121 | /* Skip subsystems not in this hierarchy */ | 2121 | /* Skip subsystems not in this hierarchy */ |
2122 | if (ss->root != cont->root) | 2122 | if (ss->root != cgrp->root) |
2123 | continue; | 2123 | continue; |
2124 | css = cont->subsys[ss->subsys_id]; | 2124 | css = cgrp->subsys[ss->subsys_id]; |
2125 | /* When called from check_for_release() it's possible | 2125 | /* When called from check_for_release() it's possible |
2126 | * that by this point the cgroup has been removed | 2126 | * that by this point the cgroup has been removed |
2127 | * and the css deleted. But a false-positive doesn't | 2127 | * and the css deleted. But a false-positive doesn't |
@@ -2137,7 +2137,7 @@ static inline int cgroup_has_css_refs(struct cgroup *cont) | |||
2137 | 2137 | ||
2138 | static int cgroup_rmdir(struct inode *unused_dir, struct dentry *dentry) | 2138 | static int cgroup_rmdir(struct inode *unused_dir, struct dentry *dentry) |
2139 | { | 2139 | { |
2140 | struct cgroup *cont = dentry->d_fsdata; | 2140 | struct cgroup *cgrp = dentry->d_fsdata; |
2141 | struct dentry *d; | 2141 | struct dentry *d; |
2142 | struct cgroup *parent; | 2142 | struct cgroup *parent; |
2143 | struct cgroup_subsys *ss; | 2143 | struct cgroup_subsys *ss; |
@@ -2147,46 +2147,46 @@ static int cgroup_rmdir(struct inode *unused_dir, struct dentry *dentry) | |||
2147 | /* the vfs holds both inode->i_mutex already */ | 2147 | /* the vfs holds both inode->i_mutex already */ |
2148 | 2148 | ||
2149 | mutex_lock(&cgroup_mutex); | 2149 | mutex_lock(&cgroup_mutex); |
2150 | if (atomic_read(&cont->count) != 0) { | 2150 | if (atomic_read(&cgrp->count) != 0) { |
2151 | mutex_unlock(&cgroup_mutex); | 2151 | mutex_unlock(&cgroup_mutex); |
2152 | return -EBUSY; | 2152 | return -EBUSY; |
2153 | } | 2153 | } |
2154 | if (!list_empty(&cont->children)) { | 2154 | if (!list_empty(&cgrp->children)) { |
2155 | mutex_unlock(&cgroup_mutex); | 2155 | mutex_unlock(&cgroup_mutex); |
2156 | return -EBUSY; | 2156 | return -EBUSY; |
2157 | } | 2157 | } |
2158 | 2158 | ||
2159 | parent = cont->parent; | 2159 | parent = cgrp->parent; |
2160 | root = cont->root; | 2160 | root = cgrp->root; |
2161 | sb = root->sb; | 2161 | sb = root->sb; |
2162 | 2162 | ||
2163 | if (cgroup_has_css_refs(cont)) { | 2163 | if (cgroup_has_css_refs(cgrp)) { |
2164 | mutex_unlock(&cgroup_mutex); | 2164 | mutex_unlock(&cgroup_mutex); |
2165 | return -EBUSY; | 2165 | return -EBUSY; |
2166 | } | 2166 | } |
2167 | 2167 | ||
2168 | for_each_subsys(root, ss) { | 2168 | for_each_subsys(root, ss) { |
2169 | if (cont->subsys[ss->subsys_id]) | 2169 | if (cgrp->subsys[ss->subsys_id]) |
2170 | ss->destroy(ss, cont); | 2170 | ss->destroy(ss, cgrp); |
2171 | } | 2171 | } |
2172 | 2172 | ||
2173 | spin_lock(&release_list_lock); | 2173 | spin_lock(&release_list_lock); |
2174 | set_bit(CONT_REMOVED, &cont->flags); | 2174 | set_bit(CGRP_REMOVED, &cgrp->flags); |
2175 | if (!list_empty(&cont->release_list)) | 2175 | if (!list_empty(&cgrp->release_list)) |
2176 | list_del(&cont->release_list); | 2176 | list_del(&cgrp->release_list); |
2177 | spin_unlock(&release_list_lock); | 2177 | spin_unlock(&release_list_lock); |
2178 | /* delete my sibling from parent->children */ | 2178 | /* delete my sibling from parent->children */ |
2179 | list_del(&cont->sibling); | 2179 | list_del(&cgrp->sibling); |
2180 | spin_lock(&cont->dentry->d_lock); | 2180 | spin_lock(&cgrp->dentry->d_lock); |
2181 | d = dget(cont->dentry); | 2181 | d = dget(cgrp->dentry); |
2182 | cont->dentry = NULL; | 2182 | cgrp->dentry = NULL; |
2183 | spin_unlock(&d->d_lock); | 2183 | spin_unlock(&d->d_lock); |
2184 | 2184 | ||
2185 | cgroup_d_remove_dir(d); | 2185 | cgroup_d_remove_dir(d); |
2186 | dput(d); | 2186 | dput(d); |
2187 | root->number_of_cgroups--; | 2187 | root->number_of_cgroups--; |
2188 | 2188 | ||
2189 | set_bit(CONT_RELEASABLE, &parent->flags); | 2189 | set_bit(CGRP_RELEASABLE, &parent->flags); |
2190 | check_for_release(parent); | 2190 | check_for_release(parent); |
2191 | 2191 | ||
2192 | mutex_unlock(&cgroup_mutex); | 2192 | mutex_unlock(&cgroup_mutex); |
@@ -2260,7 +2260,7 @@ int __init cgroup_init_early(void) | |||
2260 | init_task.cgroups = &init_css_set; | 2260 | init_task.cgroups = &init_css_set; |
2261 | 2261 | ||
2262 | init_css_set_link.cg = &init_css_set; | 2262 | init_css_set_link.cg = &init_css_set; |
2263 | list_add(&init_css_set_link.cont_link_list, | 2263 | list_add(&init_css_set_link.cgrp_link_list, |
2264 | &rootnode.top_cgroup.css_sets); | 2264 | &rootnode.top_cgroup.css_sets); |
2265 | list_add(&init_css_set_link.cg_link_list, | 2265 | list_add(&init_css_set_link.cg_link_list, |
2266 | &init_css_set.cg_links); | 2266 | &init_css_set.cg_links); |
@@ -2357,7 +2357,7 @@ static int proc_cgroup_show(struct seq_file *m, void *v) | |||
2357 | 2357 | ||
2358 | for_each_root(root) { | 2358 | for_each_root(root) { |
2359 | struct cgroup_subsys *ss; | 2359 | struct cgroup_subsys *ss; |
2360 | struct cgroup *cont; | 2360 | struct cgroup *cgrp; |
2361 | int subsys_id; | 2361 | int subsys_id; |
2362 | int count = 0; | 2362 | int count = 0; |
2363 | 2363 | ||
@@ -2368,8 +2368,8 @@ static int proc_cgroup_show(struct seq_file *m, void *v) | |||
2368 | seq_printf(m, "%s%s", count++ ? "," : "", ss->name); | 2368 | seq_printf(m, "%s%s", count++ ? "," : "", ss->name); |
2369 | seq_putc(m, ':'); | 2369 | seq_putc(m, ':'); |
2370 | get_first_subsys(&root->top_cgroup, NULL, &subsys_id); | 2370 | get_first_subsys(&root->top_cgroup, NULL, &subsys_id); |
2371 | cont = task_cgroup(tsk, subsys_id); | 2371 | cgrp = task_cgroup(tsk, subsys_id); |
2372 | retval = cgroup_path(cont, buf, PAGE_SIZE); | 2372 | retval = cgroup_path(cgrp, buf, PAGE_SIZE); |
2373 | if (retval < 0) | 2373 | if (retval < 0) |
2374 | goto out_unlock; | 2374 | goto out_unlock; |
2375 | seq_puts(m, buf); | 2375 | seq_puts(m, buf); |
@@ -2614,7 +2614,7 @@ int cgroup_clone(struct task_struct *tsk, struct cgroup_subsys *subsys) | |||
2614 | 2614 | ||
2615 | /* Create the cgroup directory, which also creates the cgroup */ | 2615 | /* Create the cgroup directory, which also creates the cgroup */ |
2616 | ret = vfs_mkdir(inode, dentry, S_IFDIR | 0755); | 2616 | ret = vfs_mkdir(inode, dentry, S_IFDIR | 0755); |
2617 | child = __d_cont(dentry); | 2617 | child = __d_cgrp(dentry); |
2618 | dput(dentry); | 2618 | dput(dentry); |
2619 | if (ret) { | 2619 | if (ret) { |
2620 | printk(KERN_INFO | 2620 | printk(KERN_INFO |
@@ -2671,7 +2671,7 @@ int cgroup_clone(struct task_struct *tsk, struct cgroup_subsys *subsys) | |||
2671 | } | 2671 | } |
2672 | 2672 | ||
2673 | /* | 2673 | /* |
2674 | * See if "cont" is a descendant of the current task's cgroup in | 2674 | * See if "cgrp" is a descendant of the current task's cgroup in |
2675 | * the appropriate hierarchy | 2675 | * the appropriate hierarchy |
2676 | * | 2676 | * |
2677 | * If we are sending in dummytop, then presumably we are creating | 2677 | * If we are sending in dummytop, then presumably we are creating |
@@ -2679,37 +2679,37 @@ int cgroup_clone(struct task_struct *tsk, struct cgroup_subsys *subsys) | |||
2679 | * | 2679 | * |
2680 | * Called only by the ns (nsproxy) cgroup. | 2680 | * Called only by the ns (nsproxy) cgroup. |
2681 | */ | 2681 | */ |
2682 | int cgroup_is_descendant(const struct cgroup *cont) | 2682 | int cgroup_is_descendant(const struct cgroup *cgrp) |
2683 | { | 2683 | { |
2684 | int ret; | 2684 | int ret; |
2685 | struct cgroup *target; | 2685 | struct cgroup *target; |
2686 | int subsys_id; | 2686 | int subsys_id; |
2687 | 2687 | ||
2688 | if (cont == dummytop) | 2688 | if (cgrp == dummytop) |
2689 | return 1; | 2689 | return 1; |
2690 | 2690 | ||
2691 | get_first_subsys(cont, NULL, &subsys_id); | 2691 | get_first_subsys(cgrp, NULL, &subsys_id); |
2692 | target = task_cgroup(current, subsys_id); | 2692 | target = task_cgroup(current, subsys_id); |
2693 | while (cont != target && cont!= cont->top_cgroup) | 2693 | while (cgrp != target && cgrp!= cgrp->top_cgroup) |
2694 | cont = cont->parent; | 2694 | cgrp = cgrp->parent; |
2695 | ret = (cont == target); | 2695 | ret = (cgrp == target); |
2696 | return ret; | 2696 | return ret; |
2697 | } | 2697 | } |
2698 | 2698 | ||
2699 | static void check_for_release(struct cgroup *cont) | 2699 | static void check_for_release(struct cgroup *cgrp) |
2700 | { | 2700 | { |
2701 | /* All of these checks rely on RCU to keep the cgroup | 2701 | /* All of these checks rely on RCU to keep the cgroup |
2702 | * structure alive */ | 2702 | * structure alive */ |
2703 | if (cgroup_is_releasable(cont) && !atomic_read(&cont->count) | 2703 | if (cgroup_is_releasable(cgrp) && !atomic_read(&cgrp->count) |
2704 | && list_empty(&cont->children) && !cgroup_has_css_refs(cont)) { | 2704 | && list_empty(&cgrp->children) && !cgroup_has_css_refs(cgrp)) { |
2705 | /* Control Group is currently removeable. If it's not | 2705 | /* Control Group is currently removeable. If it's not |
2706 | * already queued for a userspace notification, queue | 2706 | * already queued for a userspace notification, queue |
2707 | * it now */ | 2707 | * it now */ |
2708 | int need_schedule_work = 0; | 2708 | int need_schedule_work = 0; |
2709 | spin_lock(&release_list_lock); | 2709 | spin_lock(&release_list_lock); |
2710 | if (!cgroup_is_removed(cont) && | 2710 | if (!cgroup_is_removed(cgrp) && |
2711 | list_empty(&cont->release_list)) { | 2711 | list_empty(&cgrp->release_list)) { |
2712 | list_add(&cont->release_list, &release_list); | 2712 | list_add(&cgrp->release_list, &release_list); |
2713 | need_schedule_work = 1; | 2713 | need_schedule_work = 1; |
2714 | } | 2714 | } |
2715 | spin_unlock(&release_list_lock); | 2715 | spin_unlock(&release_list_lock); |
@@ -2720,11 +2720,11 @@ static void check_for_release(struct cgroup *cont) | |||
2720 | 2720 | ||
2721 | void __css_put(struct cgroup_subsys_state *css) | 2721 | void __css_put(struct cgroup_subsys_state *css) |
2722 | { | 2722 | { |
2723 | struct cgroup *cont = css->cgroup; | 2723 | struct cgroup *cgrp = css->cgroup; |
2724 | rcu_read_lock(); | 2724 | rcu_read_lock(); |
2725 | if (atomic_dec_and_test(&css->refcnt) && notify_on_release(cont)) { | 2725 | if (atomic_dec_and_test(&css->refcnt) && notify_on_release(cgrp)) { |
2726 | set_bit(CONT_RELEASABLE, &cont->flags); | 2726 | set_bit(CGRP_RELEASABLE, &cgrp->flags); |
2727 | check_for_release(cont); | 2727 | check_for_release(cgrp); |
2728 | } | 2728 | } |
2729 | rcu_read_unlock(); | 2729 | rcu_read_unlock(); |
2730 | } | 2730 | } |
@@ -2763,10 +2763,10 @@ static void cgroup_release_agent(struct work_struct *work) | |||
2763 | char *argv[3], *envp[3]; | 2763 | char *argv[3], *envp[3]; |
2764 | int i; | 2764 | int i; |
2765 | char *pathbuf; | 2765 | char *pathbuf; |
2766 | struct cgroup *cont = list_entry(release_list.next, | 2766 | struct cgroup *cgrp = list_entry(release_list.next, |
2767 | struct cgroup, | 2767 | struct cgroup, |
2768 | release_list); | 2768 | release_list); |
2769 | list_del_init(&cont->release_list); | 2769 | list_del_init(&cgrp->release_list); |
2770 | spin_unlock(&release_list_lock); | 2770 | spin_unlock(&release_list_lock); |
2771 | pathbuf = kmalloc(PAGE_SIZE, GFP_KERNEL); | 2771 | pathbuf = kmalloc(PAGE_SIZE, GFP_KERNEL); |
2772 | if (!pathbuf) { | 2772 | if (!pathbuf) { |
@@ -2774,14 +2774,14 @@ static void cgroup_release_agent(struct work_struct *work) | |||
2774 | continue; | 2774 | continue; |
2775 | } | 2775 | } |
2776 | 2776 | ||
2777 | if (cgroup_path(cont, pathbuf, PAGE_SIZE) < 0) { | 2777 | if (cgroup_path(cgrp, pathbuf, PAGE_SIZE) < 0) { |
2778 | kfree(pathbuf); | 2778 | kfree(pathbuf); |
2779 | spin_lock(&release_list_lock); | 2779 | spin_lock(&release_list_lock); |
2780 | continue; | 2780 | continue; |
2781 | } | 2781 | } |
2782 | 2782 | ||
2783 | i = 0; | 2783 | i = 0; |
2784 | argv[i++] = cont->root->release_agent_path; | 2784 | argv[i++] = cgrp->root->release_agent_path; |
2785 | argv[i++] = (char *)pathbuf; | 2785 | argv[i++] = (char *)pathbuf; |
2786 | argv[i] = NULL; | 2786 | argv[i] = NULL; |
2787 | 2787 | ||