1 #ifndef _LINUX_CGROUP_H 2 #define _LINUX_CGROUP_H 3 /* 4 * cgroup interface 5 * 6 * Copyright (C) 2003 BULL SA 7 * Copyright (C) 2004-2006 Silicon Graphics, Inc. 8 * 9 */ 10 11 #include <linux/sched.h> 12 #include <linux/cpumask.h> 13 #include <linux/nodemask.h> 14 #include <linux/rcupdate.h> 15 #include <linux/rculist.h> 16 #include <linux/cgroupstats.h> 17 #include <linux/prio_heap.h> 18 #include <linux/rwsem.h> 19 #include <linux/idr.h> 20 #include <linux/workqueue.h> 21 #include <linux/xattr.h> 22 #include <linux/fs.h> 23 #include <linux/percpu-refcount.h> 24 25 #ifdef CONFIG_CGROUPS 26 27 struct cgroupfs_root; 28 struct cgroup_subsys; 29 struct inode; 30 struct cgroup; 31 struct css_id; 32 struct eventfd_ctx; 33 34 extern int cgroup_init_early(void); 35 extern int cgroup_init(void); 36 extern void cgroup_fork(struct task_struct *p); 37 extern void cgroup_post_fork(struct task_struct *p); 38 extern void cgroup_exit(struct task_struct *p, int run_callbacks); 39 extern int cgroupstats_build(struct cgroupstats *stats, 40 struct dentry *dentry); 41 extern int cgroup_load_subsys(struct cgroup_subsys *ss); 42 extern void cgroup_unload_subsys(struct cgroup_subsys *ss); 43 44 extern int proc_cgroup_show(struct seq_file *, void *); 45 46 /* 47 * Define the enumeration of all cgroup subsystems. 48 * 49 * We define ids for builtin subsystems and then modular ones. 50 */ 51 #define SUBSYS(_x) _x ## _subsys_id, 52 enum cgroup_subsys_id { 53 #define IS_SUBSYS_ENABLED(option) IS_BUILTIN(option) 54 #include <linux/cgroup_subsys.h> 55 #undef IS_SUBSYS_ENABLED 56 CGROUP_BUILTIN_SUBSYS_COUNT, 57 58 __CGROUP_SUBSYS_TEMP_PLACEHOLDER = CGROUP_BUILTIN_SUBSYS_COUNT - 1, 59 60 #define IS_SUBSYS_ENABLED(option) IS_MODULE(option) 61 #include <linux/cgroup_subsys.h> 62 #undef IS_SUBSYS_ENABLED 63 CGROUP_SUBSYS_COUNT, 64 }; 65 #undef SUBSYS 66 67 /* Per-subsystem/per-cgroup state maintained by the system. */ 68 struct cgroup_subsys_state { 69 /* 70 * The cgroup that this subsystem is attached to. Useful 71 * for subsystems that want to know about the cgroup 72 * hierarchy structure 73 */ 74 struct cgroup *cgroup; 75 76 /* reference count - access via css_[try]get() and css_put() */ 77 struct percpu_ref refcnt; 78 79 unsigned long flags; 80 /* ID for this css, if possible */ 81 struct css_id __rcu *id; 82 83 /* Used to put @cgroup->dentry on the last css_put() */ 84 struct work_struct dput_work; 85 }; 86 87 /* bits in struct cgroup_subsys_state flags field */ 88 enum { 89 CSS_ROOT = (1 << 0), /* this CSS is the root of the subsystem */ 90 CSS_ONLINE = (1 << 1), /* between ->css_online() and ->css_offline() */ 91 }; 92 93 /** 94 * css_get - obtain a reference on the specified css 95 * @css: target css 96 * 97 * The caller must already have a reference. 98 */ 99 static inline void css_get(struct cgroup_subsys_state *css) 100 { 101 /* We don't need to reference count the root state */ 102 if (!(css->flags & CSS_ROOT)) 103 percpu_ref_get(&css->refcnt); 104 } 105 106 /** 107 * css_tryget - try to obtain a reference on the specified css 108 * @css: target css 109 * 110 * Obtain a reference on @css if it's alive. The caller naturally needs to 111 * ensure that @css is accessible but doesn't have to be holding a 112 * reference on it - IOW, RCU protected access is good enough for this 113 * function. Returns %true if a reference count was successfully obtained; 114 * %false otherwise. 115 */ 116 static inline bool css_tryget(struct cgroup_subsys_state *css) 117 { 118 if (css->flags & CSS_ROOT) 119 return true; 120 return percpu_ref_tryget(&css->refcnt); 121 } 122 123 /** 124 * css_put - put a css reference 125 * @css: target css 126 * 127 * Put a reference obtained via css_get() and css_tryget(). 128 */ 129 static inline void css_put(struct cgroup_subsys_state *css) 130 { 131 if (!(css->flags & CSS_ROOT)) 132 percpu_ref_put(&css->refcnt); 133 } 134 135 /* bits in struct cgroup flags field */ 136 enum { 137 /* Control Group is dead */ 138 CGRP_DEAD, 139 /* 140 * Control Group has previously had a child cgroup or a task, 141 * but no longer (only if CGRP_NOTIFY_ON_RELEASE is set) 142 */ 143 CGRP_RELEASABLE, 144 /* Control Group requires release notifications to userspace */ 145 CGRP_NOTIFY_ON_RELEASE, 146 /* 147 * Clone the parent's configuration when creating a new child 148 * cpuset cgroup. For historical reasons, this option can be 149 * specified at mount time and thus is implemented here. 150 */ 151 CGRP_CPUSET_CLONE_CHILDREN, 152 /* see the comment above CGRP_ROOT_SANE_BEHAVIOR for details */ 153 CGRP_SANE_BEHAVIOR, 154 }; 155 156 struct cgroup_name { 157 struct rcu_head rcu_head; 158 char name[]; 159 }; 160 161 struct cgroup { 162 unsigned long flags; /* "unsigned long" so bitops work */ 163 164 int id; /* ida allocated in-hierarchy ID */ 165 166 /* 167 * We link our 'sibling' struct into our parent's 'children'. 168 * Our children link their 'sibling' into our 'children'. 169 */ 170 struct list_head sibling; /* my parent's children */ 171 struct list_head children; /* my children */ 172 struct list_head files; /* my files */ 173 174 struct cgroup *parent; /* my parent */ 175 struct dentry *dentry; /* cgroup fs entry, RCU protected */ 176 177 /* 178 * Monotonically increasing unique serial number which defines a 179 * uniform order among all cgroups. It's guaranteed that all 180 * ->children lists are in the ascending order of ->serial_nr. 181 * It's used to allow interrupting and resuming iterations. 182 */ 183 u64 serial_nr; 184 185 /* 186 * This is a copy of dentry->d_name, and it's needed because 187 * we can't use dentry->d_name in cgroup_path(). 188 * 189 * You must acquire rcu_read_lock() to access cgrp->name, and 190 * the only place that can change it is rename(), which is 191 * protected by parent dir's i_mutex. 192 * 193 * Normally you should use cgroup_name() wrapper rather than 194 * access it directly. 195 */ 196 struct cgroup_name __rcu *name; 197 198 /* Private pointers for each registered subsystem */ 199 struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT]; 200 201 struct cgroupfs_root *root; 202 203 /* 204 * List of cgrp_cset_links pointing at css_sets with tasks in this 205 * cgroup. Protected by css_set_lock. 206 */ 207 struct list_head cset_links; 208 209 /* 210 * Linked list running through all cgroups that can 211 * potentially be reaped by the release agent. Protected by 212 * release_list_lock 213 */ 214 struct list_head release_list; 215 216 /* 217 * list of pidlists, up to two for each namespace (one for procs, one 218 * for tasks); created on demand. 219 */ 220 struct list_head pidlists; 221 struct mutex pidlist_mutex; 222 223 /* For css percpu_ref killing and RCU-protected deletion */ 224 struct rcu_head rcu_head; 225 struct work_struct destroy_work; 226 atomic_t css_kill_cnt; 227 228 /* List of events which userspace want to receive */ 229 struct list_head event_list; 230 spinlock_t event_list_lock; 231 232 /* directory xattrs */ 233 struct simple_xattrs xattrs; 234 }; 235 236 #define MAX_CGROUP_ROOT_NAMELEN 64 237 238 /* cgroupfs_root->flags */ 239 enum { 240 /* 241 * Unfortunately, cgroup core and various controllers are riddled 242 * with idiosyncrasies and pointless options. The following flag, 243 * when set, will force sane behavior - some options are forced on, 244 * others are disallowed, and some controllers will change their 245 * hierarchical or other behaviors. 246 * 247 * The set of behaviors affected by this flag are still being 248 * determined and developed and the mount option for this flag is 249 * prefixed with __DEVEL__. The prefix will be dropped once we 250 * reach the point where all behaviors are compatible with the 251 * planned unified hierarchy, which will automatically turn on this 252 * flag. 253 * 254 * The followings are the behaviors currently affected this flag. 255 * 256 * - Mount options "noprefix" and "clone_children" are disallowed. 257 * Also, cgroupfs file cgroup.clone_children is not created. 258 * 259 * - When mounting an existing superblock, mount options should 260 * match. 261 * 262 * - Remount is disallowed. 263 * 264 * - rename(2) is disallowed. 265 * 266 * - "tasks" is removed. Everything should be at process 267 * granularity. Use "cgroup.procs" instead. 268 * 269 * - "release_agent" and "notify_on_release" are removed. 270 * Replacement notification mechanism will be implemented. 271 * 272 * - cpuset: tasks will be kept in empty cpusets when hotplug happens 273 * and take masks of ancestors with non-empty cpus/mems, instead of 274 * being moved to an ancestor. 275 * 276 * - cpuset: a task can be moved into an empty cpuset, and again it 277 * takes masks of ancestors. 278 * 279 * - memcg: use_hierarchy is on by default and the cgroup file for 280 * the flag is not created. 281 */ 282 CGRP_ROOT_SANE_BEHAVIOR = (1 << 0), 283 284 CGRP_ROOT_NOPREFIX = (1 << 1), /* mounted subsystems have no named prefix */ 285 CGRP_ROOT_XATTR = (1 << 2), /* supports extended attributes */ 286 287 /* mount options live below bit 16 */ 288 CGRP_ROOT_OPTION_MASK = (1 << 16) - 1, 289 290 CGRP_ROOT_SUBSYS_BOUND = (1 << 16), /* subsystems finished binding */ 291 }; 292 293 /* 294 * A cgroupfs_root represents the root of a cgroup hierarchy, and may be 295 * associated with a superblock to form an active hierarchy. This is 296 * internal to cgroup core. Don't access directly from controllers. 297 */ 298 struct cgroupfs_root { 299 struct super_block *sb; 300 301 /* The bitmask of subsystems attached to this hierarchy */ 302 unsigned long subsys_mask; 303 304 /* Unique id for this hierarchy. */ 305 int hierarchy_id; 306 307 /* A list running through the attached subsystems */ 308 struct list_head subsys_list; 309 310 /* The root cgroup for this hierarchy */ 311 struct cgroup top_cgroup; 312 313 /* Tracks how many cgroups are currently defined in hierarchy.*/ 314 int number_of_cgroups; 315 316 /* A list running through the active hierarchies */ 317 struct list_head root_list; 318 319 /* Hierarchy-specific flags */ 320 unsigned long flags; 321 322 /* IDs for cgroups in this hierarchy */ 323 struct ida cgroup_ida; 324 325 /* The path to use for release notifications. */ 326 char release_agent_path[PATH_MAX]; 327 328 /* The name for this hierarchy - may be empty */ 329 char name[MAX_CGROUP_ROOT_NAMELEN]; 330 }; 331 332 /* 333 * A css_set is a structure holding pointers to a set of 334 * cgroup_subsys_state objects. This saves space in the task struct 335 * object and speeds up fork()/exit(), since a single inc/dec and a 336 * list_add()/del() can bump the reference count on the entire cgroup 337 * set for a task. 338 */ 339 340 struct css_set { 341 342 /* Reference count */ 343 atomic_t refcount; 344 345 /* 346 * List running through all cgroup groups in the same hash 347 * slot. Protected by css_set_lock 348 */ 349 struct hlist_node hlist; 350 351 /* 352 * List running through all tasks using this cgroup 353 * group. Protected by css_set_lock 354 */ 355 struct list_head tasks; 356 357 /* 358 * List of cgrp_cset_links pointing at cgroups referenced from this 359 * css_set. Protected by css_set_lock. 360 */ 361 struct list_head cgrp_links; 362 363 /* 364 * Set of subsystem states, one for each subsystem. This array 365 * is immutable after creation apart from the init_css_set 366 * during subsystem registration (at boot time) and modular subsystem 367 * loading/unloading. 368 */ 369 struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT]; 370 371 /* For RCU-protected deletion */ 372 struct rcu_head rcu_head; 373 }; 374 375 /* 376 * cgroup_map_cb is an abstract callback API for reporting map-valued 377 * control files 378 */ 379 380 struct cgroup_map_cb { 381 int (*fill)(struct cgroup_map_cb *cb, const char *key, u64 value); 382 void *state; 383 }; 384 385 /* 386 * struct cftype: handler definitions for cgroup control files 387 * 388 * When reading/writing to a file: 389 * - the cgroup to use is file->f_dentry->d_parent->d_fsdata 390 * - the 'cftype' of the file is file->f_dentry->d_fsdata 391 */ 392 393 /* cftype->flags */ 394 enum { 395 CFTYPE_ONLY_ON_ROOT = (1 << 0), /* only create on root cg */ 396 CFTYPE_NOT_ON_ROOT = (1 << 1), /* don't create on root cg */ 397 CFTYPE_INSANE = (1 << 2), /* don't create if sane_behavior */ 398 }; 399 400 #define MAX_CFTYPE_NAME 64 401 402 struct cftype { 403 /* 404 * By convention, the name should begin with the name of the 405 * subsystem, followed by a period. Zero length string indicates 406 * end of cftype array. 407 */ 408 char name[MAX_CFTYPE_NAME]; 409 int private; 410 /* 411 * If not 0, file mode is set to this value, otherwise it will 412 * be figured out automatically 413 */ 414 umode_t mode; 415 416 /* 417 * If non-zero, defines the maximum length of string that can 418 * be passed to write_string; defaults to 64 419 */ 420 size_t max_write_len; 421 422 /* CFTYPE_* flags */ 423 unsigned int flags; 424 425 int (*open)(struct inode *inode, struct file *file); 426 ssize_t (*read)(struct cgroup *cgrp, struct cftype *cft, 427 struct file *file, 428 char __user *buf, size_t nbytes, loff_t *ppos); 429 /* 430 * read_u64() is a shortcut for the common case of returning a 431 * single integer. Use it in place of read() 432 */ 433 u64 (*read_u64)(struct cgroup *cgrp, struct cftype *cft); 434 /* 435 * read_s64() is a signed version of read_u64() 436 */ 437 s64 (*read_s64)(struct cgroup *cgrp, struct cftype *cft); 438 /* 439 * read_map() is used for defining a map of key/value 440 * pairs. It should call cb->fill(cb, key, value) for each 441 * entry. The key/value pairs (and their ordering) should not 442 * change between reboots. 443 */ 444 int (*read_map)(struct cgroup *cgrp, struct cftype *cft, 445 struct cgroup_map_cb *cb); 446 /* 447 * read_seq_string() is used for outputting a simple sequence 448 * using seqfile. 449 */ 450 int (*read_seq_string)(struct cgroup *cgrp, struct cftype *cft, 451 struct seq_file *m); 452 453 ssize_t (*write)(struct cgroup *cgrp, struct cftype *cft, 454 struct file *file, 455 const char __user *buf, size_t nbytes, loff_t *ppos); 456 457 /* 458 * write_u64() is a shortcut for the common case of accepting 459 * a single integer (as parsed by simple_strtoull) from 460 * userspace. Use in place of write(); return 0 or error. 461 */ 462 int (*write_u64)(struct cgroup *cgrp, struct cftype *cft, u64 val); 463 /* 464 * write_s64() is a signed version of write_u64() 465 */ 466 int (*write_s64)(struct cgroup *cgrp, struct cftype *cft, s64 val); 467 468 /* 469 * write_string() is passed a nul-terminated kernelspace 470 * buffer of maximum length determined by max_write_len. 471 * Returns 0 or -ve error code. 472 */ 473 int (*write_string)(struct cgroup *cgrp, struct cftype *cft, 474 const char *buffer); 475 /* 476 * trigger() callback can be used to get some kick from the 477 * userspace, when the actual string written is not important 478 * at all. The private field can be used to determine the 479 * kick type for multiplexing. 480 */ 481 int (*trigger)(struct cgroup *cgrp, unsigned int event); 482 483 int (*release)(struct inode *inode, struct file *file); 484 485 /* 486 * register_event() callback will be used to add new userspace 487 * waiter for changes related to the cftype. Implement it if 488 * you want to provide this functionality. Use eventfd_signal() 489 * on eventfd to send notification to userspace. 490 */ 491 int (*register_event)(struct cgroup *cgrp, struct cftype *cft, 492 struct eventfd_ctx *eventfd, const char *args); 493 /* 494 * unregister_event() callback will be called when userspace 495 * closes the eventfd or on cgroup removing. 496 * This callback must be implemented, if you want provide 497 * notification functionality. 498 */ 499 void (*unregister_event)(struct cgroup *cgrp, struct cftype *cft, 500 struct eventfd_ctx *eventfd); 501 }; 502 503 /* 504 * cftype_sets describe cftypes belonging to a subsystem and are chained at 505 * cgroup_subsys->cftsets. Each cftset points to an array of cftypes 506 * terminated by zero length name. 507 */ 508 struct cftype_set { 509 struct list_head node; /* chained at subsys->cftsets */ 510 struct cftype *cfts; 511 }; 512 513 struct cgroup_scanner { 514 struct cgroup *cg; 515 int (*test_task)(struct task_struct *p, struct cgroup_scanner *scan); 516 void (*process_task)(struct task_struct *p, 517 struct cgroup_scanner *scan); 518 struct ptr_heap *heap; 519 void *data; 520 }; 521 522 /* 523 * See the comment above CGRP_ROOT_SANE_BEHAVIOR for details. This 524 * function can be called as long as @cgrp is accessible. 525 */ 526 static inline bool cgroup_sane_behavior(const struct cgroup *cgrp) 527 { 528 return cgrp->root->flags & CGRP_ROOT_SANE_BEHAVIOR; 529 } 530 531 /* Caller should hold rcu_read_lock() */ 532 static inline const char *cgroup_name(const struct cgroup *cgrp) 533 { 534 return rcu_dereference(cgrp->name)->name; 535 } 536 537 int cgroup_add_cftypes(struct cgroup_subsys *ss, struct cftype *cfts); 538 int cgroup_rm_cftypes(struct cgroup_subsys *ss, struct cftype *cfts); 539 540 bool cgroup_is_descendant(struct cgroup *cgrp, struct cgroup *ancestor); 541 542 int cgroup_path(const struct cgroup *cgrp, char *buf, int buflen); 543 int task_cgroup_path_from_hierarchy(struct task_struct *task, int hierarchy_id, 544 char *buf, size_t buflen); 545 546 int cgroup_task_count(const struct cgroup *cgrp); 547 548 /* 549 * Control Group taskset, used to pass around set of tasks to cgroup_subsys 550 * methods. 551 */ 552 struct cgroup_taskset; 553 struct task_struct *cgroup_taskset_first(struct cgroup_taskset *tset); 554 struct task_struct *cgroup_taskset_next(struct cgroup_taskset *tset); 555 struct cgroup *cgroup_taskset_cur_cgroup(struct cgroup_taskset *tset); 556 int cgroup_taskset_size(struct cgroup_taskset *tset); 557 558 /** 559 * cgroup_taskset_for_each - iterate cgroup_taskset 560 * @task: the loop cursor 561 * @skip_cgrp: skip if task's cgroup matches this, %NULL to iterate through all 562 * @tset: taskset to iterate 563 */ 564 #define cgroup_taskset_for_each(task, skip_cgrp, tset) \ 565 for ((task) = cgroup_taskset_first((tset)); (task); \ 566 (task) = cgroup_taskset_next((tset))) \ 567 if (!(skip_cgrp) || \ 568 cgroup_taskset_cur_cgroup((tset)) != (skip_cgrp)) 569 570 /* 571 * Control Group subsystem type. 572 * See Documentation/cgroups/cgroups.txt for details 573 */ 574 575 struct cgroup_subsys { 576 struct cgroup_subsys_state *(*css_alloc)(struct cgroup *cgrp); 577 int (*css_online)(struct cgroup *cgrp); 578 void (*css_offline)(struct cgroup *cgrp); 579 void (*css_free)(struct cgroup *cgrp); 580 581 int (*can_attach)(struct cgroup *cgrp, struct cgroup_taskset *tset); 582 void (*cancel_attach)(struct cgroup *cgrp, struct cgroup_taskset *tset); 583 void (*attach)(struct cgroup *cgrp, struct cgroup_taskset *tset); 584 void (*fork)(struct task_struct *task); 585 void (*exit)(struct cgroup *cgrp, struct cgroup *old_cgrp, 586 struct task_struct *task); 587 void (*bind)(struct cgroup *root); 588 589 int subsys_id; 590 int disabled; 591 int early_init; 592 /* 593 * True if this subsys uses ID. ID is not available before cgroup_init() 594 * (not available in early_init time.) 595 */ 596 bool use_id; 597 598 /* 599 * If %false, this subsystem is properly hierarchical - 600 * configuration, resource accounting and restriction on a parent 601 * cgroup cover those of its children. If %true, hierarchy support 602 * is broken in some ways - some subsystems ignore hierarchy 603 * completely while others are only implemented half-way. 604 * 605 * It's now disallowed to create nested cgroups if the subsystem is 606 * broken and cgroup core will emit a warning message on such 607 * cases. Eventually, all subsystems will be made properly 608 * hierarchical and this will go away. 609 */ 610 bool broken_hierarchy; 611 bool warned_broken_hierarchy; 612 613 #define MAX_CGROUP_TYPE_NAMELEN 32 614 const char *name; 615 616 /* 617 * Link to parent, and list entry in parent's children. 618 * Protected by cgroup_lock() 619 */ 620 struct cgroupfs_root *root; 621 struct list_head sibling; 622 /* used when use_id == true */ 623 struct idr idr; 624 spinlock_t id_lock; 625 626 /* list of cftype_sets */ 627 struct list_head cftsets; 628 629 /* base cftypes, automatically [de]registered with subsys itself */ 630 struct cftype *base_cftypes; 631 struct cftype_set base_cftset; 632 633 /* should be defined only by modular subsystems */ 634 struct module *module; 635 }; 636 637 #define SUBSYS(_x) extern struct cgroup_subsys _x ## _subsys; 638 #define IS_SUBSYS_ENABLED(option) IS_BUILTIN(option) 639 #include <linux/cgroup_subsys.h> 640 #undef IS_SUBSYS_ENABLED 641 #undef SUBSYS 642 643 static inline struct cgroup_subsys_state *cgroup_subsys_state( 644 struct cgroup *cgrp, int subsys_id) 645 { 646 return cgrp->subsys[subsys_id]; 647 } 648 649 /** 650 * task_css_set_check - obtain a task's css_set with extra access conditions 651 * @task: the task to obtain css_set for 652 * @__c: extra condition expression to be passed to rcu_dereference_check() 653 * 654 * A task's css_set is RCU protected, initialized and exited while holding 655 * task_lock(), and can only be modified while holding both cgroup_mutex 656 * and task_lock() while the task is alive. This macro verifies that the 657 * caller is inside proper critical section and returns @task's css_set. 658 * 659 * The caller can also specify additional allowed conditions via @__c, such 660 * as locks used during the cgroup_subsys::attach() methods. 661 */ 662 #ifdef CONFIG_PROVE_RCU 663 extern struct mutex cgroup_mutex; 664 #define task_css_set_check(task, __c) \ 665 rcu_dereference_check((task)->cgroups, \ 666 lockdep_is_held(&(task)->alloc_lock) || \ 667 lockdep_is_held(&cgroup_mutex) || (__c)) 668 #else 669 #define task_css_set_check(task, __c) \ 670 rcu_dereference((task)->cgroups) 671 #endif 672 673 /** 674 * task_subsys_state_check - obtain css for (task, subsys) w/ extra access conds 675 * @task: the target task 676 * @subsys_id: the target subsystem ID 677 * @__c: extra condition expression to be passed to rcu_dereference_check() 678 * 679 * Return the cgroup_subsys_state for the (@task, @subsys_id) pair. The 680 * synchronization rules are the same as task_css_set_check(). 681 */ 682 #define task_subsys_state_check(task, subsys_id, __c) \ 683 task_css_set_check((task), (__c))->subsys[(subsys_id)] 684 685 /** 686 * task_css_set - obtain a task's css_set 687 * @task: the task to obtain css_set for 688 * 689 * See task_css_set_check(). 690 */ 691 static inline struct css_set *task_css_set(struct task_struct *task) 692 { 693 return task_css_set_check(task, false); 694 } 695 696 /** 697 * task_subsys_state - obtain css for (task, subsys) 698 * @task: the target task 699 * @subsys_id: the target subsystem ID 700 * 701 * See task_subsys_state_check(). 702 */ 703 static inline struct cgroup_subsys_state * 704 task_subsys_state(struct task_struct *task, int subsys_id) 705 { 706 return task_subsys_state_check(task, subsys_id, false); 707 } 708 709 static inline struct cgroup* task_cgroup(struct task_struct *task, 710 int subsys_id) 711 { 712 return task_subsys_state(task, subsys_id)->cgroup; 713 } 714 715 struct cgroup *cgroup_next_sibling(struct cgroup *pos); 716 717 /** 718 * cgroup_for_each_child - iterate through children of a cgroup 719 * @pos: the cgroup * to use as the loop cursor 720 * @cgrp: cgroup whose children to walk 721 * 722 * Walk @cgrp's children. Must be called under rcu_read_lock(). A child 723 * cgroup which hasn't finished ->css_online() or already has finished 724 * ->css_offline() may show up during traversal and it's each subsystem's 725 * responsibility to verify that each @pos is alive. 726 * 727 * If a subsystem synchronizes against the parent in its ->css_online() and 728 * before starting iterating, a cgroup which finished ->css_online() is 729 * guaranteed to be visible in the future iterations. 730 * 731 * It is allowed to temporarily drop RCU read lock during iteration. The 732 * caller is responsible for ensuring that @pos remains accessible until 733 * the start of the next iteration by, for example, bumping the css refcnt. 734 */ 735 #define cgroup_for_each_child(pos, cgrp) \ 736 for ((pos) = list_first_or_null_rcu(&(cgrp)->children, \ 737 struct cgroup, sibling); \ 738 (pos); (pos) = cgroup_next_sibling((pos))) 739 740 struct cgroup *cgroup_next_descendant_pre(struct cgroup *pos, 741 struct cgroup *cgroup); 742 struct cgroup *cgroup_rightmost_descendant(struct cgroup *pos); 743 744 /** 745 * cgroup_for_each_descendant_pre - pre-order walk of a cgroup's descendants 746 * @pos: the cgroup * to use as the loop cursor 747 * @cgroup: cgroup whose descendants to walk 748 * 749 * Walk @cgroup's descendants. Must be called under rcu_read_lock(). A 750 * descendant cgroup which hasn't finished ->css_online() or already has 751 * finished ->css_offline() may show up during traversal and it's each 752 * subsystem's responsibility to verify that each @pos is alive. 753 * 754 * If a subsystem synchronizes against the parent in its ->css_online() and 755 * before starting iterating, and synchronizes against @pos on each 756 * iteration, any descendant cgroup which finished ->css_online() is 757 * guaranteed to be visible in the future iterations. 758 * 759 * In other words, the following guarantees that a descendant can't escape 760 * state updates of its ancestors. 761 * 762 * my_online(@cgrp) 763 * { 764 * Lock @cgrp->parent and @cgrp; 765 * Inherit state from @cgrp->parent; 766 * Unlock both. 767 * } 768 * 769 * my_update_state(@cgrp) 770 * { 771 * Lock @cgrp; 772 * Update @cgrp's state; 773 * Unlock @cgrp; 774 * 775 * cgroup_for_each_descendant_pre(@pos, @cgrp) { 776 * Lock @pos; 777 * Verify @pos is alive and inherit state from @pos->parent; 778 * Unlock @pos; 779 * } 780 * } 781 * 782 * As long as the inheriting step, including checking the parent state, is 783 * enclosed inside @pos locking, double-locking the parent isn't necessary 784 * while inheriting. The state update to the parent is guaranteed to be 785 * visible by walking order and, as long as inheriting operations to the 786 * same @pos are atomic to each other, multiple updates racing each other 787 * still result in the correct state. It's guaranateed that at least one 788 * inheritance happens for any cgroup after the latest update to its 789 * parent. 790 * 791 * If checking parent's state requires locking the parent, each inheriting 792 * iteration should lock and unlock both @pos->parent and @pos. 793 * 794 * Alternatively, a subsystem may choose to use a single global lock to 795 * synchronize ->css_online() and ->css_offline() against tree-walking 796 * operations. 797 * 798 * It is allowed to temporarily drop RCU read lock during iteration. The 799 * caller is responsible for ensuring that @pos remains accessible until 800 * the start of the next iteration by, for example, bumping the css refcnt. 801 */ 802 #define cgroup_for_each_descendant_pre(pos, cgroup) \ 803 for (pos = cgroup_next_descendant_pre(NULL, (cgroup)); (pos); \ 804 pos = cgroup_next_descendant_pre((pos), (cgroup))) 805 806 struct cgroup *cgroup_next_descendant_post(struct cgroup *pos, 807 struct cgroup *cgroup); 808 809 /** 810 * cgroup_for_each_descendant_post - post-order walk of a cgroup's descendants 811 * @pos: the cgroup * to use as the loop cursor 812 * @cgroup: cgroup whose descendants to walk 813 * 814 * Similar to cgroup_for_each_descendant_pre() but performs post-order 815 * traversal instead. Note that the walk visibility guarantee described in 816 * pre-order walk doesn't apply the same to post-order walks. 817 */ 818 #define cgroup_for_each_descendant_post(pos, cgroup) \ 819 for (pos = cgroup_next_descendant_post(NULL, (cgroup)); (pos); \ 820 pos = cgroup_next_descendant_post((pos), (cgroup))) 821 822 /* A cgroup_iter should be treated as an opaque object */ 823 struct cgroup_iter { 824 struct list_head *cset_link; 825 struct list_head *task; 826 }; 827 828 /* 829 * To iterate across the tasks in a cgroup: 830 * 831 * 1) call cgroup_iter_start to initialize an iterator 832 * 833 * 2) call cgroup_iter_next() to retrieve member tasks until it 834 * returns NULL or until you want to end the iteration 835 * 836 * 3) call cgroup_iter_end() to destroy the iterator. 837 * 838 * Or, call cgroup_scan_tasks() to iterate through every task in a 839 * cgroup - cgroup_scan_tasks() holds the css_set_lock when calling 840 * the test_task() callback, but not while calling the process_task() 841 * callback. 842 */ 843 void cgroup_iter_start(struct cgroup *cgrp, struct cgroup_iter *it); 844 struct task_struct *cgroup_iter_next(struct cgroup *cgrp, 845 struct cgroup_iter *it); 846 void cgroup_iter_end(struct cgroup *cgrp, struct cgroup_iter *it); 847 int cgroup_scan_tasks(struct cgroup_scanner *scan); 848 int cgroup_attach_task_all(struct task_struct *from, struct task_struct *); 849 int cgroup_transfer_tasks(struct cgroup *to, struct cgroup *from); 850 851 /* 852 * CSS ID is ID for cgroup_subsys_state structs under subsys. This only works 853 * if cgroup_subsys.use_id == true. It can be used for looking up and scanning. 854 * CSS ID is assigned at cgroup allocation (create) automatically 855 * and removed when subsys calls free_css_id() function. This is because 856 * the lifetime of cgroup_subsys_state is subsys's matter. 857 * 858 * Looking up and scanning function should be called under rcu_read_lock(). 859 * Taking cgroup_mutex is not necessary for following calls. 860 * But the css returned by this routine can be "not populated yet" or "being 861 * destroyed". The caller should check css and cgroup's status. 862 */ 863 864 /* 865 * Typically Called at ->destroy(), or somewhere the subsys frees 866 * cgroup_subsys_state. 867 */ 868 void free_css_id(struct cgroup_subsys *ss, struct cgroup_subsys_state *css); 869 870 /* Find a cgroup_subsys_state which has given ID */ 871 872 struct cgroup_subsys_state *css_lookup(struct cgroup_subsys *ss, int id); 873 874 /* Returns true if root is ancestor of cg */ 875 bool css_is_ancestor(struct cgroup_subsys_state *cg, 876 const struct cgroup_subsys_state *root); 877 878 /* Get id and depth of css */ 879 unsigned short css_id(struct cgroup_subsys_state *css); 880 struct cgroup_subsys_state *cgroup_css_from_dir(struct file *f, int id); 881 882 #else /* !CONFIG_CGROUPS */ 883 884 static inline int cgroup_init_early(void) { return 0; } 885 static inline int cgroup_init(void) { return 0; } 886 static inline void cgroup_fork(struct task_struct *p) {} 887 static inline void cgroup_post_fork(struct task_struct *p) {} 888 static inline void cgroup_exit(struct task_struct *p, int callbacks) {} 889 890 static inline int cgroupstats_build(struct cgroupstats *stats, 891 struct dentry *dentry) 892 { 893 return -EINVAL; 894 } 895 896 /* No cgroups - nothing to do */ 897 static inline int cgroup_attach_task_all(struct task_struct *from, 898 struct task_struct *t) 899 { 900 return 0; 901 } 902 903 #endif /* !CONFIG_CGROUPS */ 904 905 #endif /* _LINUX_CGROUP_H */ 906