Hello, Linus. A lot updates for cgroup. * The biggest one is cgroup's conversion to kernfs. cgroup took after the long abandoned vfs-entangled sysfs implementation and made it even more convoluted over time. cgroup's internal objects were fused with vfs objects which also brought in vfs locking and object lifetime rules. Naturally, there are places where vfs rules don't fit and nasty hacks, such as credential switching or lock dance interleaving inode mutex and cgroup_mutex with object serial number comparison thrown in to decide whether the operation is actually necessary, needed to be employed. After conversion to kernfs, internal object lifetime and locking rules are mostly isolated from vfs interactions allowing shedding of several nasty hacks and overall simplification. This will also allow implmentation of operations which may affect multiple cgroups which weren't possible before as it would have required nesting i_mutexes. * Various simplifications including dropping of module support, easier cgroup name/path handling, simplified cgroup file type handling and task_cg_lists optimization. * Prepatory changes for the planned unified hierarchy, which is still a patchset away from being actually operational. The dummy hierarchy is updated to serve as the default unified hierarchy. Controllers which aren't claimed by other hierarchies are associated with it, which BTW was what the dummy hierarchy was for anyway. * Various fixes from Li and others. This pull request includes some patches to add missing slab.h to various subsystems. This was triggered xattr.h include removal from cgroup.h. cgroup.h indirectly got included a lot of files which brought in xattr.h which brought in slab.h. There are several merge commits - one to pull in kernfs updates necessary for converting cgroup (already in upstream through driver-core), others for interfering changes in the fixes branch. Pulling in this branch creates four conflicts - two detected during merge and two silent. C1. e61734c55c24 ("cgroup: remove cgroup->name") dropped a bunch of vars from mem_cgroup_print_oom_info and 08088cb9ac0a ("memcg: change oom_info_lock to mutex") changed one of them. Can be combined by dropping what's dropped in the former and updating oom_info_lock according to the latter. void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p) { <<<<<<< HEAD /* * protects memcg_name and makes sure that parallel ooms do not * interleave */ static DEFINE_MUTEX(oom_info_lock); struct cgroup *task_cgrp; struct cgroup *mem_cgrp; static char memcg_name[PATH_MAX]; int ret; ======= /* oom_info_lock ensures that parallel ooms do not interleave */ static DEFINE_SPINLOCK(oom_info_lock); >>>>>>> 1ec41830e087cda1f62dda4182c2b62811eb0ffc struct mem_cgroup *iter; unsigned int i; ******* RESOLUTION ******* void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p) { /* oom_info_lock ensures that parallel ooms do not interleave */ static DEFINE_MUTEX(oom_info_lock); struct mem_cgroup *iter; unsigned int i; C2. b8dadcb58d54 ("cpuset: use rcu_read_lock() to protect task_cs()") replaced task_lock() with rcu_read_lock() and 99afb0fd5f05 ("cpuset: fix a race condition in __cpuset_node_allowed_softwall()") relocated a line into the locked region from after. The resolution is straight-forward. rcu_read_lock(); cs = nearest_hardwall_ancestor(task_cs(current)); <<<<<<< HEAD allowed = node_isset(node, cs->mems_allowed); task_unlock(current); ======= rcu_read_unlock(); >>>>>>> 1ec41830e087cda1f62dda4182c2b62811eb0ffc mutex_unlock(&callback_mutex); return allowed; ******* RESOLUTION ******* rcu_read_lock(); cs = nearest_hardwall_ancestor(task_cs(current)); allowed = node_isset(node, cs->mems_allowed); rcu_read_unlock(); mutex_unlock(&callback_mutex); return allowed; C3. fed95bab8d29 ("sysfs: fix namespace refcnt leak") added an argument to kernfs_mount() and was routed through driver-core-next after cgroup pulled the tree. cgroup's usage needs to be updated accordingly. C4. 3eb59ec64fc7 ("cgroup: fix a failure path in create_css()") routed through cgroup/for-3.14-fixes added new usage of ss->subsys_id which was renamed to ss->id in the devel branch. The new usage needs to be updated accordingly. The following patch resolves C3 and C4. index 432bdec..fede3d3 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c @@ -1603,7 +1603,7 @@ out_unlock: if (ret) return ERR_PTR(ret); - dentry = kernfs_mount(fs_type, flags, root->kf_root); + dentry = kernfs_mount(fs_type, flags, root->kf_root, NULL); if (IS_ERR(dentry)) cgroup_put(&root->cgrp); return dentry; @@ -3654,7 +3654,7 @@ static int create_css(struct cgroup *cgrp, struct cgroup_subsys *ss) return 0; err_clear_dir: - cgroup_clear_dir(css->cgroup, 1 << css->ss->subsys_id); + cgroup_clear_dir(css->cgroup, 1 << css->ss->id); err_free_percpu_ref: percpu_ref_cancel_init(&css->refcnt); err_free_css: Due to the intermediate merges, git-request-pull's diffstat didn't match the changes made by pulling in the tree. diffstat is generated by comparing pre and post merge trees. The test merge is available in test-merge-3.15 branch. The following changes since commit 532de3fc72adc2a6525c4d53c07bf81e1732083d: cgroup: update cgroup_enable_task_cg_lists() to grab siglock (2014-02-18 18:23:18 -0500) are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git for-3.15 for you to fetch changes up to 1ec41830e087cda1f62dda4182c2b62811eb0ffc: cgroup: remove useless argument from cgroup_exit() (2014-03-29 09:15:54 -0400) Thanks. ---------------------------------------------------------------- Fengguang Wu (1): cgroup: fix coccinelle warnings Li Zefan (7): cgroup: fix locking in cgroupstats_build() cgroup: fix memory leak in cgroup_mount() cgroup: deal with dummp_top in cgroup_name() and cgroup_path() cgroup: add a validation check to cgroup_add_cftyps() cpuset: use rcu_read_lock() to protect task_cs() cgroup: fix spurious lockdep warning in cgroup_exit() cgroup: remove useless argument from cgroup_exit() Monam Agarwal (1): cgroup: Use RCU_INIT_POINTER(x, NULL) in cgroup.c Paul Gortmaker (1): sparc: fix implicit include of slab.h in leon_pci_grpci2.c Stephen Rothwell (1): sun4M: add include of slab.h for kzalloc Tejun Heo (67): cgroup: make CONFIG_CGROUP_NET_PRIO bool and drop unnecessary init_netclassid_cgroup() cgroup: drop module support cgroup: clean up cgroup_subsys names and initialization cgroup: rename cgroup_subsys->subsys_id to ->id cgroup: update locking in cgroup_show_options() cgroup: remove cgroup_root_mutex Merge branch 'for-3.14-fixes' into for-3.15 Merge branch 'driver-core-next' into cgroup/for-3.15 Merge branch 'cgroup/for-3.14-fixes' into cgroup/for-3.15 cgroup: improve css_from_dir() into css_tryget_from_dir() cgroup: introduce cgroup_tree_mutex cgroup: release cgroup_mutex over file removals cgroup: restructure locking and error handling in cgroup_mount() cgroup: factor out cgroup_setup_root() from cgroup_mount() cgroup: update cgroup name handling cgroup: make cgroup_subsys->base_cftypes use cgroup_add_cftypes() cgroup: update the meaning of cftype->max_write_len cgroup: introduce cgroup_init/exit_cftypes() cgroup: introduce cgroup_ino() cgroup: misc preps for kernfs conversion cgroup: relocate functions in preparation of kernfs conversion cgroup: convert to kernfs cgroup: warn if "xattr" is specified with "sane_behavior" cgroup: relocate cgroup_rm_cftypes() cgroup: remove cftype_set cgroup: simplify dynamic cftype addition and removal cgroup: make cgroup hold onto its kernfs_node cgroup: remove cgroup->name cgroup: rename cgroupfs_root->number_of_cgroups to ->nr_cgrps and make it atomic_t cgroup: remove cgroupfs_root->refcnt cgroup: disallow xattr, release_agent and name if sane_behavior cgroup: drop CGRP_ROOT_SUBSYS_BOUND cgroup: enable task_cg_lists on the first cgroup mount cgroup: relocate cgroup_enable_task_cg_lists() cgroup: implement cgroup_has_tasks() and unexport cgroup_task_count() cgroup: reimplement cgroup_transfer_tasks() without using css_scan_tasks() cgroup: make css_set_lock a rwsem and rename it to css_set_rwsem cpuset: use css_task_iter_start/next/end() instead of css_scan_tasks() cgroup: remove css_scan_tasks() cgroup: separate out put_css_set_locked() and remove put_css_set_taskexit() cgroup: move css_set_rwsem locking outside of cgroup_task_migrate() cgroup: drop @skip_css from cgroup_taskset_for_each() cpuset: don't use cgroup_taskset_cur_css() cgroup: remove cgroup_taskset_cur_css() and cgroup_taskset_size() cgroup: cosmetic updates to cgroup_attach_task() cgroup: unexport functions Merge branch 'cgroup/for-3.14-fixes' into cgroup/for-3.15 cgroup: add css_set->mg_tasks cgroup: use css_set->mg_tasks to track target tasks during migration cgroup: separate out cset_group_from_root() from task_cgroup_from_root() cgroup: split process / task migration into four steps cgroup: update how a newly forked task gets associated with css_set cgroup: drop task_lock() protection around task->cgroups cgroup: update cgroup_transfer_tasks() to either succeed or fail cgroup_freezer: document freezer_fork() subtleties cgroup: relocate setting of CGRP_DEAD cgroup: reorganize cgroup bootstrapping cgroup: use cgroup_setup_root() to initialize cgroup_dummy_root cgroup: remove NULL checks from [pr_cont_]cgroup_{name|path}() cgroup: treat cgroup_dummy_root as an equivalent hierarchy during rebinding cgroup: move ->subsys_mask from cgroupfs_root to cgroup cgroup: rename cgroup_dummy_root and related names cgroup: drop const from @buffer of cftype->write_string() cgroup: make cgrp_dfl_root mountable cgroup: implement CFTYPE_ONLY_ON_DFL cgroup: fix cgroup_taskset walking order cgroup: break kernfs active_ref protection in cgroup directory operations arch/sparc/kernel/leon_pci_grpci2.c | 1 arch/sparc/kernel/sun4m_irq.c | 2 block/blk-cgroup.c | 11 block/blk-cgroup.h | 14 block/blk-throttle.c | 8 block/cfq-iosched.c | 7 fs/bio.c | 2 fs/kernfs/dir.c | 1 include/linux/cgroup.h | 275 +- include/linux/cgroup_subsys.h | 30 include/linux/hugetlb_cgroup.h | 2 include/linux/memcontrol.h | 2 include/net/cls_cgroup.h | 2 include/net/netprio_cgroup.h | 17 init/Kconfig | 1 kernel/cgroup.c | 3721 ++++++++++++++---------------------- kernel/cgroup_freezer.c | 40 kernel/cpuset.c | 262 -- kernel/events/core.c | 25 kernel/exit.c | 2 kernel/fork.c | 5 kernel/sched/core.c | 10 kernel/sched/cpuacct.c | 6 kernel/sched/debug.c | 3 mm/hugetlb_cgroup.c | 11 mm/memcontrol.c | 110 - mm/memory-failure.c | 8 net/Kconfig | 2 net/core/netclassid_cgroup.c | 15 net/core/netprio_cgroup.c | 41 net/ipv4/tcp_memcontrol.c | 4 security/device_cgroup.c | 12 32 files changed, 1913 insertions(+), 2739 deletions(-) -- tejun _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/containers