)]}'
{
  "log": [
    {
      "commit": "c2468d32f5a57298b732826af84cdc39745d179c",
      "tree": "adcb5668dbe43a173002f23107e3df8d2a1be396",
      "parents": [
        "549f3a1218ba18fcde11ef0e22b07e6365645788",
        "913ffdb54366f94eec65c656cae8c6e00e1ab1b0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 23 15:48:35 2013 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 23 15:48:35 2013 -0700"
      },
      "message": "Merge branch \u0027for-3.11-fixes\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup\n\nPull cgroup changes from Tejun Heo:\n \"This contains two patches, both of which aren\u0027t fixes per-se but I\n  think it\u0027d be better to fast-track them.\n\n  One removes bcache_subsys_id which was added without proper review\n  through the block tree.  Fortunately, bcache cgroup code is\n  unconditionally disabled, so this was never exposed to userland.  The\n  cgroup subsys_id is removed.  Kent will remove the affected (disabled)\n  code through bcache branch.\n\n  The other simplifies task_group_path_from_hierarchy().  The function\n  doesn\u0027t currently have in-kernel users but there are external code and\n  development going on dependent on the function and making the function\n  available for 3.11 would make things go smoother\"\n\n* \u0027for-3.11-fixes\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup:\n  cgroup: replace task_cgroup_path_from_hierarchy() with task_cgroup_path()\n  cgroup: remove bcache_subsys_id which got added stealthily\n"
    },
    {
      "commit": "913ffdb54366f94eec65c656cae8c6e00e1ab1b0",
      "tree": "55dae8f32f7a0a64ed6b665497e12414fb6d3103",
      "parents": [
        "add0c59d802e6118e51e21244c3871be35164e4b"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jul 11 16:34:48 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 12 12:49:05 2013 -0700"
      },
      "message": "cgroup: replace task_cgroup_path_from_hierarchy() with task_cgroup_path()\n\ntask_cgroup_path_from_hierarchy() was added for the planned new users\nand none of the currently planned users wants to know about multiple\nhierarchies.  This patch drops the multiple hierarchy part and makes\nit always return the path in the first non-dummy hierarchy.\n\nAs unified hierarchy will always have id 1, this is guaranteed to\nreturn the path for the unified hierarchy if mounted; otherwise, it\nwill return the path from the hierarchy which happens to occupy the\nlowest hierarchy id, which will usually be the first hierarchy mounted\nafter boot.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Lennart Poettering \u003clennart@poettering.net\u003e\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nCc: Jan Kaluža \u003cjkaluza@redhat.com\u003e\n"
    },
    {
      "commit": "36805aaea5ae3cf1bb32f1643e0a800bb69f0d5b",
      "tree": "5565132549a0733772b3a2ac6b5cda516ea8cdce",
      "parents": [
        "6d2fa9e141ea56a571ec842fd4f3a86bea44a203",
        "d50235b7bc3ee0a0427984d763ea7534149531b4"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 11 13:03:24 2013 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 11 13:03:24 2013 -0700"
      },
      "message": "Merge branch \u0027for-3.11/core\u0027 of git://git.kernel.dk/linux-block\n\nPull core block IO updates from Jens Axboe:\n \"Here are the core IO block bits for 3.11. It contains:\n\n   - A tweak to the reserved tag logic from Jan, for weirdo devices with\n     just 3 free tags.  But for those it improves things substantially\n     for random writes.\n\n   - Periodic writeback fix from Jan.  Marked for stable as well.\n\n   - Fix for a race condition in IO scheduler switching from Jianpeng.\n\n   - The hierarchical blk-cgroup support from Tejun.  This is the grunt\n     of the series.\n\n   - blk-throttle fix from Vivek.\n\n  Just a note that I\u0027m in the middle of a relocation, whole family is\n  flying out tomorrow.  Hence I will be awal the remainder of this week,\n  but back at work again on Monday the 15th.  CC\u0027ing Tejun, since any\n  potential \"surprises\" will most likely be from the blk-cgroup work.\n  But it\u0027s been brewing for a while and sitting in my tree and\n  linux-next for a long time, so should be solid.\"\n\n* \u0027for-3.11/core\u0027 of git://git.kernel.dk/linux-block: (36 commits)\n  elevator: Fix a race in elevator switching\n  block: Reserve only one queue tag for sync IO if only 3 tags are available\n  writeback: Fix periodic writeback after fs mount\n  blk-throttle: implement proper hierarchy support\n  blk-throttle: implement throtl_grp-\u003ehas_rules[]\n  blk-throttle: Account for child group\u0027s start time in parent while bio climbs up\n  blk-throttle: add throtl_qnode for dispatch fairness\n  blk-throttle: make throtl_pending_timer_fn() ready for hierarchy\n  blk-throttle: make tg_dispatch_one_bio() ready for hierarchy\n  blk-throttle: make blk_throtl_bio() ready for hierarchy\n  blk-throttle: make blk_throtl_drain() ready for hierarchy\n  blk-throttle: dispatch from throtl_pending_timer_fn()\n  blk-throttle: implement dispatch looping\n  blk-throttle: separate out throtl_service_queue-\u003epending_timer from throtl_data-\u003edispatch_work\n  blk-throttle: set REQ_THROTTLED from throtl_charge_bio() and gate stats update with it\n  blk-throttle: implement sq_to_tg(), sq_to_td() and throtl_log()\n  blk-throttle: add throtl_service_queue-\u003eparent_sq\n  blk-throttle: generalize update_disptime optimization in blk_throtl_bio()\n  blk-throttle: dispatch to throtl_data-\u003eservice_queue.bio_lists[]\n  blk-throttle: move bio_lists[] and friends to throtl_service_queue\n  ...\n"
    },
    {
      "commit": "0b0585c3e192967cb2ef0ac0816eb8a8c8d99840",
      "tree": "9f655158a396623736b8cc94c2a27a2fce4ab644",
      "parents": [
        "b028161fbba178ccd35aa69051c04d7673fe9d80",
        "c9e5fe66f5947c9e56dfc7655e5b4b127ca2120f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 02 20:04:25 2013 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 02 20:04:25 2013 -0700"
      },
      "message": "Merge branch \u0027for-3.11-cpuset\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup\n\nPull cpuset changes from Tejun Heo:\n \"cpuset has always been rather odd about its configurations - a cgroup\n  right after creation didn\u0027t allow any task executions before\n  configuration, changing configuration in the parent modifies the\n  descendants irreversibly and so on.  These behaviors are inherently\n  nasty and almost hostile against sharing the hierarchy with other\n  controllers making it very difficult to use in unified hierarchy.\n\n  Li is currently in the process of updating the behaviors for\n  __DEVEL__sane_behavior which is the bulk of changes in this pull\n  request.  It isn\u0027t complete yet and the behaviors will change further\n  but all changes are gated behind sane_behavior.  In the process, the\n  rather hairy work-item punting which was used to work around the\n  limitations of cgroup descendant iterator was simplified.\"\n\n* \u0027for-3.11-cpuset\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup:\n  cpuset: rename @cont to @cgrp\n  cpuset: fix to migrate mm correctly in a corner case\n  cpuset: allow to move tasks to empty cpusets\n  cpuset: allow to keep tasks in empty cpusets\n  cpuset: introduce effective_{cpumask|nodemask}_cpuset()\n  cpuset: record old_mems_allowed in struct cpuset\n  cpuset: remove async hotplug propagation work\n  cpuset: let hotplug propagation work wait for task attaching\n  cpuset: re-structure update_cpumask() a bit\n  cpuset: remove cpuset_test_cpumask()\n  cpuset: remove unnecessary variable in cpuset_attach()\n  cpuset: cleanup guarantee_online_{cpus|mems}()\n  cpuset: remove redundant check in cpuset_cpus_allowed_fallback()\n"
    },
    {
      "commit": "0ce6cba35777cf96a54ce0d5856dc962566b8717",
      "tree": "c03ee20f1c6deff5494a4ca86802ea053c6d5667",
      "parents": [
        "e2bd416f6246d11be29999c177d2534943a5c2df"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 27 19:37:26 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 27 19:37:26 2013 -0700"
      },
      "message": "cgroup: CGRP_ROOT_SUBSYS_BOUND should be ignored when comparing mount options\n\n1672d04070 (\"cgroup: fix cgroupfs_root early destruction path\")\nintroduced CGRP_ROOT_SUBSYS_BOUND which is used to mark completion of\nsubsys binding on a new root; however, this broke remounts.\ncgroup_remount() doesn\u0027t allow changing root options via remount and\nCGRP_ROOT_SUBSYS_BOUND, which is set on all fully initialized roots,\nmakes the function reject all remounts.\n\nFix it by putting the options part in the lower 16 bits of root-\u003eflags\nand masking the comparions.  While at it, make cgroup_remount() emit\nan error message explaining why it\u0027s rejecting a remount request, so\nthat it\u0027s less of a mystery.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "14611e51a57df10240817d8ada510842faf0ec51",
      "tree": "d2b3ba10386a98a867fac435625cee580f9b5047",
      "parents": [
        "eb178d063324d9c30f673db3877b892a48ade21e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 25 11:48:32 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jun 26 10:42:46 2013 -0700"
      },
      "message": "cgroup: fix RCU accesses to task-\u003ecgroups\n\ntask-\u003ecgroups is a RCU pointer pointing to struct css_set.  A task\nswitches to a different css_set on cgroup migration but a css_set\ndoesn\u0027t change once created and its pointers to cgroup_subsys_states\naren\u0027t RCU protected.\n\ntask_subsys_state[_check]() is the macro to acquire css given a task\nand subsys_id pair.  It RCU-dereferences task-\u003ecgroups-\u003esubsys[] not\ntask-\u003ecgroups, so the RCU pointer task-\u003ecgroups ends up being\ndereferenced without read_barrier_depends() after it.  It\u0027s broken.\n\nFix it by introducing task_css_set[_check]() which does\nRCU-dereference on task-\u003ecgroups.  task_subsys_state[_check]() is\nreimplemented to directly dereference -\u003esubsys[] of the css_set\nreturned from task_css_set[_check]().\n\nThis removes some of sparse RCU warnings in cgroup.\n\nv2: Fixed unbalanced parenthsis and there\u0027s no need to use\n    rcu_dereference_raw() when !CONFIG_PROVE_RCU.  Both spotted by Li.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "1672d040709b789671c0502e7aac9d632c2f9175",
      "tree": "eceebdf6be0c9769e2c10270b4389c402d4a0df9",
      "parents": [
        "fc76df706123602214da494ba98bccea83e2cfff"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 25 18:04:54 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jun 26 10:39:46 2013 -0700"
      },
      "message": "cgroup: fix cgroupfs_root early destruction path\n\ncgroupfs_root used to have -\u003eactual_subsys_mask in addition to\n-\u003esubsys_mask.  a8a648c4ac (\"cgroup: remove\ncgroup-\u003eactual_subsys_mask\") removed it noting that the subsys_mask is\nessentially temporary and doesn\u0027t belong in cgroupfs_root; however,\nthe patch made it impossible to tell whether a cgroupfs_root actually\nhas the subsystems bound or just have the bits set leading to the\nfollowing BUG when trying to mount with subsystems which are already\nmounted elsewhere.\n\n kernel BUG at kernel/cgroup.c:1038!\n invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC\n ...\n CPU: 1 PID: 7973 Comm: mount Tainted: G        W    3.10.0-rc7-next-20130625-sasha-00011-g1c1dc0e #1105\n task: ffff880fc0ae8000 ti: ffff880fc0b9a000 task.ti: ffff880fc0b9a000\n RIP: 0010:[\u003cffffffff81249b29\u003e]  [\u003cffffffff81249b29\u003e] rebind_subsystems+0x409/0x5f0\n ...\n Call Trace:\n  [\u003cffffffff8124bd4f\u003e] cgroup_kill_sb+0xff/0x210\n  [\u003cffffffff813d21af\u003e] deactivate_locked_super+0x4f/0x90\n  [\u003cffffffff8124f3b3\u003e] cgroup_mount+0x673/0x6e0\n  [\u003cffffffff81257169\u003e] cpuset_mount+0xd9/0x110\n  [\u003cffffffff813d2580\u003e] mount_fs+0xb0/0x2d0\n  [\u003cffffffff81404afd\u003e] vfs_kern_mount+0xbd/0x180\n  [\u003cffffffff814070b5\u003e] do_new_mount+0x145/0x2c0\n  [\u003cffffffff814085d6\u003e] do_mount+0x356/0x3c0\n  [\u003cffffffff8140873d\u003e] SyS_mount+0xfd/0x140\n  [\u003cffffffff854eb600\u003e] tracesys+0xdd/0xe2\n\nWe still want rebind_subsystems() to take added/removed masks, so\nlet\u0027s fix it by marking whether a cgroupfs_root has finished binding\nor not.  Also, document what\u0027s going on around -\u003esubsys_mask\ninitialization so that similar mistakes aren\u0027t repeated.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Sasha Levin \u003csasha.levin@oracle.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "a8a648c4acee2095262f7fa65b0d8a68a03c32e4",
      "tree": "8547cf0629054715b3541b9bbf2de6642ec9deba",
      "parents": [
        "9871bf9550d25e488cd2f0ce958d3f59f17fa720"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jun 24 15:21:47 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jun 24 15:21:47 2013 -0700"
      },
      "message": "cgroup: remove cgroup-\u003eactual_subsys_mask\n\ncgroup curiously has two subsystem masks, -\u003esubsys_mask and\n-\u003eactual_subsys_mask.  The latter only exists because the new target\nsubsys_mask is passed into rebind_subsystems() via @root\u003esubsys_mask.\nrebind_subsystems() needs to know what the current mask is to decide\nhow to reach the target mask so -\u003eactual_subsys_mask is used as the\ntemp location to remember the current state.\n\nAdding a temporary field to a permanent data structure is rather silly\nand can be misleading.  Update rebind_subsystems() to take @added_mask\nand @removed_mask instead and remove @root-\u003eactual_subsys_mask.\n\nThis patch shouldn\u0027t introduce any behavior changes.\n\nv2: Comment and description updated as suggested by Li.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "02c402d98588bdfd3bebd267db574e13afdef722",
      "tree": "1287cb3545c2096f164ce0989f7af7bb416698d7",
      "parents": [
        "03c78cbebb323fc97295ff97dc5e009d56371d57"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jun 24 15:21:47 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jun 24 15:21:47 2013 -0700"
      },
      "message": "cgroup: convert CFTYPE_* flags to enums\n\nPurely cosmetic.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "03c78cbebb323fc97295ff97dc5e009d56371d57",
      "tree": "d6df12606b2eedc81f2da4ce0e3f9e9856ac338b",
      "parents": [
        "00356bd5f0f5e04183fb15805eb29e97c2fc20ac"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Fri Jun 14 11:17:19 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jun 19 01:22:50 2013 -0700"
      },
      "message": "cgroup: rename cont to cgrp\n\nCont is short for container. control group was named process container\nat first, but then people found container already has a meaning in\nlinux kernel.\n\nClean up the leftover variable name @cont.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "e8c82d20a9f729cf4b9f73043f7fd4e0872bebfd",
      "tree": "fc45f039baee86a1b867d6c55cb05ea7e8c47288",
      "parents": [
        "794611a1dfcb055d7d41ce133378dd8197d73e38"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Tue Jun 18 18:48:37 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 18 11:14:22 2013 -0700"
      },
      "message": "cgroup: convert cgroup_cft_commit() to use cgroup_for_each_descendant_pre()\n\nWe used root-\u003eallcg_list to iterate cgroup hierarchy because at that time\ncgroup_for_each_descendant_pre() hasn\u0027t been invented.\n\ntj: In cgroup_cfts_commit(), s/@serial_nr/@update_upto/, move the\n    assignment right above releasing cgroup_mutex and explain what\u0027s\n    going on there.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "6db8e85c5c1f89cd0183b76dab027c81009f129f",
      "tree": "6195edbc8abb6645d39a4986fd2d48c89bbefa92",
      "parents": [
        "f63674fd0d6afa1ba24309aee1f8c60195d39041"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jun 14 11:18:22 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 18 08:14:23 2013 -0700"
      },
      "message": "cgroup: disallow rename(2) if sane_behavior\n\ncgroup\u0027s rename(2) isn\u0027t a proper migration implementation - it can\u0027t\nmove the cgroup to a different parent in the hierarchy.  All it can do\nis swapping the name string for that cgroup.  This isn\u0027t useful and\ncan mislead users to think that cgroup supports proper cgroup-level\nmigration.  Disallow rename(2) if sane_behavior.\n\nv2: Fail with -EPERM instead of -EINVAL so that it matches the vfs\n    return value when -\u003erename is not implemented as suggested by Li.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "f63674fd0d6afa1ba24309aee1f8c60195d39041",
      "tree": "032c58b8c71a984c6313abd64091ec2905bb770f",
      "parents": [
        "d3daf28da16a30af95bfb303189a634a87606725"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 13 19:58:38 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 13 20:02:26 2013 -0700"
      },
      "message": "cgroup: update sane_behavior documentation\n\nf12dc02014 (\"cgroup: mark \"tasks\" cgroup file as insane\") and\ncc5943a781 (\"cgroup: mark \"notify_on_release\" and \"release_agent\"\ncgroup files insane\") forgot to update the changed behavior\ndocumentation in cgroup.h.  Update it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "d3daf28da16a30af95bfb303189a634a87606725",
      "tree": "d73530e2b759b2f180daec0814124e71e8bb149b",
      "parents": [
        "2b0e53a7c8a6972755c0f0152d7fad2289fdc5eb"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 13 19:39:16 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 13 19:43:12 2013 -0700"
      },
      "message": "cgroup: use percpu refcnt for cgroup_subsys_states\n\nA css (cgroup_subsys_state) is how each cgroup is represented to a\ncontroller.  As such, it can be used in hot paths across the various\nsubsystems different controllers are associated with.\n\nOne of the common operations is reference counting, which up until now\nhas been implemented using a global atomic counter and can have\nsignificant adverse impact on scalability.  For example, css refcnt\ncan be gotten and put multiple times by blkcg for each IO request.\nFor highops configurations which try to do as much per-cpu as\npossible, the global frequent refcnting can be very expensive.\n\nIn general, given the various and hugely diverse paths css\u0027s end up\nbeing used from, we need to make it cheap and highly scalable.  In its\nusage, css refcnting isn\u0027t very different from module refcnting.\n\nThis patch converts css refcnting to use the recently added\npercpu_ref.  css_get/tryget/put() directly maps to the matching\npercpu_ref operations and the deactivation logic is no longer\nnecessary as percpu_ref already has refcnt killing.\n\nThe only complication is that as the refcnt is per-cpu,\npercpu_ref_kill() in itself doesn\u0027t ensure that further tryget\noperations will fail, which we need to guarantee before invoking\n-\u003ecss_offline()\u0027s.  This is resolved collecting kill confirmation\nusing percpu_ref_kill_and_confirm() and initiating the offline phase\nof destruction after all css refcnt\u0027s are confirmed to be seen as\nkilled on all CPUs.  The previous patches already splitted destruction\ninto two phases, so percpu_ref_kill_and_confirm() can be hooked up\neasily.\n\nThis patch removes css_refcnt() which is used for rcu dereference\nsanity check in css_id().  While we can add a percpu refcnt API to ask\nthe same question, css_id() itself is scheduled to be removed fairly\nsoon, so let\u0027s not bother with it.  Just drop the sanity check and use\nrcu_dereference_raw() instead.\n\nv2: - init_cgroup_css() was calling percpu_ref_init() without checking\n      the return value.  This causes two problems - the obvious lack\n      of error handling and percpu_ref_init() being called from\n      cgroup_init_subsys() before the allocators are up, which\n      triggers warnings but doesn\u0027t cause actual problems as the\n      refcnt isn\u0027t used for roots anyway.  Fix both by moving\n      percpu_ref_init() to cgroup_create().\n\n    - The base references were put too early by\n      percpu_ref_kill_and_confirm() and cgroup_offline_fn() put the\n      refs one extra time.  This wasn\u0027t noticeable because css\u0027s go\n      through another RCU grace period before being freed.  Update\n      cgroup_destroy_locked() to grab an extra reference before\n      killing the refcnts.  This problem was noticed by Kent.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Kent Overstreet \u003ckoverstreet@google.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Mike Snitzer \u003csnitzer@redhat.com\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nCc: \"Alasdair G. Kergon\" \u003cagk@redhat.com\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nCc: Glauber Costa \u003cglommer@gmail.com\u003e\n"
    },
    {
      "commit": "ea15f8ccdb430af1e8bc9b4e19a230eb4c356777",
      "tree": "e75aa3f5ddac2a7092c0f16361d72f9b25232832",
      "parents": [
        "455050d23e1bfc47ca98e943ad5b2f3a9bbe45fb"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 13 19:27:42 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 13 19:27:42 2013 -0700"
      },
      "message": "cgroup: split cgroup destruction into two steps\n\nSplit cgroup_destroy_locked() into two steps and put the latter half\ninto cgroup_offline_fn() which is executed from a work item.  The\nlatter half is responsible for offlining the css\u0027s, removing the\ncgroup from internal lists, and propagating release notification to\nthe parent.  The separation is to allow using percpu refcnt for css.\n\nNote that this allows for other cgroup operations to happen between\nthe first and second halves of destruction, including creating a new\ncgroup with the same name.  As the target cgroup is marked DEAD in the\nfirst half and cgroup internals don\u0027t care about the names of cgroups,\nthis should be fine.  A comment explaining this will be added by the\nnext patch which implements the actual percpu refcnting.\n\nAs RCU freeing is guaranteed to happen after the second step of\ndestruction, we can use the same work item for both.  This patch\nrenames cgroup-\u003efree_work to -\u003edestroy_work and uses it for both\npurposes.  INIT_WORK() is now performed right before queueing the work\nitem.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "6f3d828f0fb7fdaffc6f32cb8a1cb7fcf8824598",
      "tree": "662fa290a077ebe5113c877040cb4b891b72d311",
      "parents": [
        "ddd69148bdc45e5e3e55bfde3571daecd5a96d75"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jun 12 21:04:55 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 13 10:55:18 2013 -0700"
      },
      "message": "cgroup: remove cgroup-\u003ecount and use\n\ncgroup-\u003ecount tracks the number of css_sets associated with the cgroup\nand used only to verify that no css_set is associated when the cgroup\nis being destroyed.  It\u0027s superflous as the destruction path can\nsimply check whether cgroup-\u003ecset_links is empty instead.\n\nDrop cgroup-\u003ecount and check -\u003ecset_links directly from\ncgroup_destroy_locked().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "54766d4a1d3d6f84ff8fa475cd8f165c0a0000eb",
      "tree": "8a897b12cfe0f2e373eceffd3eddb095efd23844",
      "parents": [
        "5de0107e634ce862f16360139709d9d3a656463e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jun 12 21:04:53 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 13 10:55:18 2013 -0700"
      },
      "message": "cgroup: rename CGRP_REMOVED to CGRP_DEAD\n\nWe will add another flag indicating that the cgroup is in the process\nof being killed.  REMOVING / REMOVED is more difficult to distinguish\nand cgroup_is_removing()/cgroup_is_removed() are a bit awkward.  Also,\nlater percpu_ref usage will involve \"kill\"ing the refcnt.\n\n s/CGRP_REMOVED/CGRP_DEAD/\n s/cgroup_is_removed()/cgroup_is_dead()\n\nThis patch is purely cosmetic.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "5de0107e634ce862f16360139709d9d3a656463e",
      "tree": "07e964c35fae8a82fa86275d1c46517403096f06",
      "parents": [
        "f4f4be2bd2889c69a8698edef8dbfd4f6759aa87"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jun 12 21:04:52 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 13 10:55:17 2013 -0700"
      },
      "message": "cgroup: clean up css_[try]get() and css_put()\n\n* __css_get() isn\u0027t used by anyone.  Fold it into css_get().\n\n* Add proper function comments to all css reference functions.\n\nThis patch is purely cosmetic.\n\nv2: Typo fix as per Li.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "69d0206c793a17431eacee2694ee7a4b25df76b7",
      "tree": "f242ce2e576886a18bec4ff6adc9cd7ba9bbe722",
      "parents": [
        "5abb8855734fd7b3fa7f91c13916d0e35d99763c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jun 12 21:04:50 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 13 10:55:17 2013 -0700"
      },
      "message": "cgroup: bring some sanity to naming around cg_cgroup_link\n\ncgroups and css_sets are mapped M:N and this M:N mapping is\nrepresented by struct cg_cgroup_link which forms linked lists on both\nsides.  The naming around this mapping is already confusing and struct\ncg_cgroup_link exacerbates the situation quite a bit.\n\n\u003eFrom cgroup side, it starts off -\u003ecss_sets and runs through\n-\u003ecgrp_link_list.  From css_set side, it starts off -\u003ecg_links and\nruns through -\u003ecg_link_list.  This is rather reversed as\ncgrp_link_list is used to iterate css_sets and cg_link_list cgroups.\nAlso, this is the only place which is still using the confusing \"cg\"\nfor css_sets.  This patch cleans it up a bit.\n\n* s/cgroup-\u003ecss_sets/cgroup-\u003ecset_links/\n  s/css_set-\u003ecg_links/css_set-\u003ecgrp_links/\n  s/cgroup_iter-\u003ecg_link/cgroup_iter-\u003ecset_link/\n\n* s/cg_cgroup_link/cgrp_cset_link/\n\n* s/cgrp_cset_link-\u003ecg/cgrp_cset_link-\u003ecset/\n  s/cgrp_cset_link-\u003ecgrp_link_list/cgrp_cset_link-\u003ecset_link/\n  s/cgrp_cset_link-\u003ecg_link_list/cgrp_cset_link-\u003ecgrp_link/\n\n* s/init_css_set_link/init_cgrp_cset_link/\n  s/free_cg_links/free_cgrp_cset_links/\n  s/allocate_cg_links/allocate_cgrp_cset_links/\n\n* s/cgl[12]/link[12]/ in compare_css_sets()\n\n* s/saved_link/tmp_link/ s/tmp/tmp_links/ and a couple similar\n  adustments.\n\n* Comment and whiteline adjustments.\n\nAfter the changes, we have\n\n\tlist_for_each_entry(link, \u0026cont-\u003ecset_links, cset_link) {\n\t\tstruct css_set *cset \u003d link-\u003ecset;\n\ninstead of\n\n\tlist_for_each_entry(link, \u0026cont-\u003ecss_sets, cgrp_link_list) {\n\t\tstruct css_set *cset \u003d link-\u003ecg;\n\nThis patch is purely cosmetic.\n\nv2: Fix broken sentences in the patch description.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "3fc3db9a3ae0ce108badf31a4a00e41b4236f5fc",
      "tree": "7067660f54e2c407cfd705fc3c36a14a6d9820dd",
      "parents": [
        "d5c56ced775f6bdc32b689b01c9c4f9b66e18610"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jun 12 21:04:48 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 13 10:55:17 2013 -0700"
      },
      "message": "cgroup: remove now unused css_depth()\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "88fa523bff295f1d60244a54833480b02f775152",
      "tree": "45231f9e9d1ec3612bbe3ce5d14673f27c4cbb12",
      "parents": [
        "5c5cc62321d9df7a9a608346fc649c4528380c8f"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Sun Jun 09 17:16:46 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 13 10:48:33 2013 -0700"
      },
      "message": "cpuset: allow to move tasks to empty cpusets\n\nCurrently some cpuset behaviors are not friendly when cpuset is co-mounted\nwith other cgroup controllers.\n\nNow with this patchset if cpuset is mounted with sane_behavior option,\nit behaves differently:\n\n- Tasks will be kept in empty cpusets when hotplug happens and take\n  masks of ancestors with non-empty cpus/mems, instead of being moved to\n  an ancestor.\n\n- A task can be moved into an empty cpuset, and again it takes masks of\n  ancestors, so the user can drop a task into a newly created cgroup without\n  having to do anything for it.\n\nAs tasks can reside in empy cpusets, here\u0027re some rules:\n\n- They can be moved to another cpuset, regardless it\u0027s empty or not.\n\n- Though it takes masks from ancestors, it takes other configs from the\n  empty cpuset.\n\n- If the ancestors\u0027 masks are changed, those tasks will also be updated\n  to take new masks.\n\nv2: add documentation in include/linux/cgroup.h\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "5c5cc62321d9df7a9a608346fc649c4528380c8f",
      "tree": "e7e04867979f4f6920d6d1244057112ceb235390",
      "parents": [
        "070b57fcacc9dfc23a180290079078373fb697e1"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Sun Jun 09 17:16:29 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 13 10:48:32 2013 -0700"
      },
      "message": "cpuset: allow to keep tasks in empty cpusets\n\nTo achieve this:\n\n- We call update_tasks_cpumask/nodemask() for empty cpusets when\nhotplug happens, instead of moving tasks out of them.\n\n- When a cpuset\u0027s masks are changed by writing cpuset.cpus/mems,\nwe also update tasks in child cpusets which are empty.\n\nv3:\n- do propagation work in one place for both hotplug and unplug\n\nv2:\n- drop rcu_read_lock before calling update_task_nodemask() and\n  update_task_cpumask(), instead of using workqueue.\n- add documentation in include/linux/cgroup.h\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "75501a6d59e989e5c286716e5b3b66ace4660e83",
      "tree": "087af4f93bba2257ae139c5e4a0f3b850954ed81",
      "parents": [
        "53fa5261747a90746531e8a1c81eeb78fedc2f71"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri May 24 10:55:38 2013 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri May 24 10:55:38 2013 +0900"
      },
      "message": "cgroup: update iterators to use cgroup_next_sibling()\n\nThis patch converts cgroup_for_each_child(),\ncgroup_next_descendant_pre/post() and thus\ncgroup_for_each_descendant_pre/post() to use cgroup_next_sibling()\ninstead of manually dereferencing -\u003esibling.next.\n\nThe only reason the iterators couldn\u0027t allow dropping RCU read lock\nwhile iteration is in progress was because they couldn\u0027t determine the\nnext sibling safely once RCU read lock is dropped.  Using\ncgroup_next_sibling() removes that problem and enables all iterators\nto allow dropping RCU read lock in the middle.  Comments are updated\naccordingly.\n\nThis makes the iterators easier to use and will simplify controllers.\n\nNote that @cgroup argument is renamed to @cgrp in\ncgroup_for_each_child() because it conflicts with \"struct cgroup\" used\nin the new macro body.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Serge E. Hallyn \u003cserge.hallyn@ubuntu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\n"
    },
    {
      "commit": "53fa5261747a90746531e8a1c81eeb78fedc2f71",
      "tree": "b615f4ac453b9f40d412b5ba22498b827902f438",
      "parents": [
        "bdc7119f1bdd0632d42f435941dc290216a436e7"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri May 24 10:55:38 2013 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri May 24 10:55:38 2013 +0900"
      },
      "message": "cgroup: add cgroup-\u003eserial_nr and implement cgroup_next_sibling()\n\nCurrently, there\u0027s no easy way to find out the next sibling cgroup\nunless it\u0027s known that the current cgroup is accessed from the\nparent\u0027s children list in a single RCU critical section.  This in turn\nforces all iterators to require whole iteration to be enclosed in a\nsingle RCU critical section, which sometimes is too restrictive.  This\npatch implements cgroup_next_sibling() which can reliably determine\nthe next sibling regardless of the state of the current cgroup as long\nas it\u0027s accessible.\n\nIt currently is impossible to determine the next sibling after\ndropping RCU read lock because the cgroup being iterated could be\nremoved anytime and if RCU read lock is dropped, nothing guarantess\nits -\u003esibling.next pointer is accessible.  A removed cgroup would\ncontinue to point to its next sibling for RCU accesses but stop\nreceiving updates from the sibling.  IOW, the next sibling could be\nremoved and then complete its grace period while RCU read lock is\ndropped, making it unsafe to dereference -\u003esibling.next after dropping\nand re-acquiring RCU read lock.\n\nThis can be solved by adding a way to traverse to the next sibling\nwithout dereferencing -\u003esibling.next.  This patch adds a monotonically\nincreasing cgroup serial number, cgroup-\u003eserial_nr, which guarantees\nthat all cgroup-\u003echildren lists are kept in increasing serial_nr\norder.  A new function, cgroup_next_sibling(), is implemented, which,\nif CGRP_REMOVED is not set on the current cgroup, follows\n-\u003esibling.next; otherwise, traverses the parent\u0027s -\u003echildren list\nuntil it sees a sibling with higher -\u003eserial_nr.\n\nThis allows the function to always return the next sibling regardless\nof the state of the current cgroup without adding overhead in the fast\npath.\n\nFurther patches will update the iterators to use cgroup_next_sibling()\nso that they allow dropping RCU read lock and blocking while iteration\nis in progress which in turn will be used to simplify controllers.\n\nv2: Typo fix as per Serge.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Serge E. Hallyn \u003cserge.hallyn@ubuntu.com\u003e\n"
    },
    {
      "commit": "bdc7119f1bdd0632d42f435941dc290216a436e7",
      "tree": "3e33099f7e22b637e3ffa9f558938e92e94fd9a6",
      "parents": [
        "3f33e64f4a212771a0b5c63eddaa7f81e65223e3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri May 24 10:55:38 2013 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri May 24 10:55:38 2013 +0900"
      },
      "message": "cgroup: make cgroup_is_removed() static\n\ncgroup_is_removed() no longer has external users and it shouldn\u0027t grow\nany - controllers should deal with cgroup_subsys_state on/offline\nstate instead of cgroup removal state.  Make it static.\n\nWhile at it, make it return bool.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "3f33e64f4a212771a0b5c63eddaa7f81e65223e3",
      "tree": "a212de935bb984849a5bf3bed3618dc9975203db",
      "parents": [
        "23958e729e7029678e746bf8f4094c8863a79c3d",
        "7805d000db30a3787a4c969bab6ae4d8a5fd8ce6"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri May 24 10:53:09 2013 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri May 24 10:53:09 2013 +0900"
      },
      "message": "Merge branch \u0027for-3.10-fixes\u0027 into for-3.11\n\nMerging to receive 7805d000db (\"cgroup: fix a subtle bug in descendant\npre-order walk\") so that further iterator updates can build upon it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "7805d000db30a3787a4c969bab6ae4d8a5fd8ce6",
      "tree": "5178e1adaa4f398d2c1367fb38633191e81764e5",
      "parents": [
        "d6cbf35dac8a3dadb9103379820c96d7c85df3d9"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri May 24 10:50:24 2013 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri May 24 10:50:24 2013 +0900"
      },
      "message": "cgroup: fix a subtle bug in descendant pre-order walk\n\nWhen cgroup_next_descendant_pre() initiates a walk, it checks whether\nthe subtree root doesn\u0027t have any children and if not returns NULL.\nLater code assumes that the subtree isn\u0027t empty.  This is broken\nbecause the subtree may become empty inbetween, which can lead to the\ntraversal escaping the subtree by walking to the sibling of the\nsubtree root.\n\nThere\u0027s no reason to have the early exit path.  Remove it along with\nthe later assumption that the subtree isn\u0027t empty.  This simplifies\nthe code a bit and fixes the subtle bug.\n\nWhile at it, fix the comment of cgroup_for_each_descendant_pre() which\nwas incorrectly referring to -\u003ecss_offline() instead of\n-\u003ecss_online().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "9138125beabbb76b4a373d4a619870f6f5d86fc5",
      "tree": "61ccabf042ff21b81c6dcd074ea8edeb77fedfa8",
      "parents": [
        "693e751e70843c29884cde326016e746fa16073a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue May 14 13:52:38 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue May 14 13:52:38 2013 -0700"
      },
      "message": "blk-throttle: implement proper hierarchy support\n\nWith the recent updates, blk-throttle is finally ready for proper\nhierarchy support.  Dispatching now honors service_queue-\u003eparent_sq\nand propagates correctly.  The only thing missing is setting\n-\u003eparent_sq correctly so that throtl_grp hierarchy matches the cgroup\nhierarchy.\n\nThis patch updates throtl_pd_init() such that service_queues form the\nsame hierarchy as the cgroup hierarchy if sane_behavior is enabled.\nAs this concludes proper hierarchy support for blkcg, the shameful\n.broken_hierarchy tag is removed from blkio_subsys.\n\nv2: Updated blkio-controller.txt as suggested by Vivek.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nCc: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "23958e729e7029678e746bf8f4094c8863a79c3d",
      "tree": "32bc3679396093ae3d456b4504e52cf71267f3fb",
      "parents": [
        "857a2beb09ab83e9a8185821ae16db7dfbe8b837"
      ],
      "author": {
        "name": "Greg KH",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri May 03 16:26:59 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue May 14 11:50:42 2013 -0700"
      },
      "message": "cgroup.h: remove some functions that are now gone\n\ncgroup_lock() and cgroup_unlock() are now no longer exported, so fix\ncgroup.h to not declare them if CONFIG_CGROUPS is not enabled.\n\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "857a2beb09ab83e9a8185821ae16db7dfbe8b837",
      "tree": "2ea1456855d7046dd5503cd7a0a6c78e804aa299",
      "parents": [
        "1a574231669f8c3065c83974e9557fcbbd94b8a6"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 14 20:50:08 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue May 14 11:42:07 2013 -0700"
      },
      "message": "cgroup: implement task_cgroup_path_from_hierarchy()\n\nkdbus folks want a sane way to determine the cgroup path that a given\ntask belongs to on a given hierarchy, which is a reasonble thing to\nexpect from cgroup core.\n\nImplement task_cgroup_path_from_hierarchy().\n\nv2: Dropped unnecessary NULL check on the return value of\n    task_cgroup_from_root() as suggested by Li Zefan.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Greg Kroah-Hartman \u003cgreg@kroah.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Kay Sievers \u003ckay@vrfy.org\u003e\nCc: Lennart Poettering \u003clennart@poettering.net\u003e\nCc: Daniel Mack \u003cdaniel@zonque.org\u003e\n"
    },
    {
      "commit": "a27bb332c04cec8c4afd7912df0dc7890db27560",
      "tree": "86e6c41c2012f24c40ab455e2449d76346ae8956",
      "parents": [
        "41ef4eb8eef8d06bc1399e7b00c940d771554711"
      ],
      "author": {
        "name": "Kent Overstreet",
        "email": "koverstreet@google.com",
        "time": "Tue May 07 16:19:08 2013 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 07 20:16:25 2013 -0700"
      },
      "message": "aio: don\u0027t include aio.h in sched.h\n\nFaster kernel compiles by way of fewer unnecessary includes.\n\n[akpm@linux-foundation.org: fix fallout]\n[akpm@linux-foundation.org: fix build]\nSigned-off-by: Kent Overstreet \u003ckoverstreet@google.com\u003e\nCc: Zach Brown \u003czab@redhat.com\u003e\nCc: Felipe Balbi \u003cbalbi@ti.com\u003e\nCc: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\nCc: Mark Fasheh \u003cmfasheh@suse.com\u003e\nCc: Joel Becker \u003cjlbec@evilplan.org\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Asai Thambi S P \u003casamymuthupa@micron.com\u003e\nCc: Selvan Mani \u003csmani@micron.com\u003e\nCc: Sam Bradshaw \u003csbradshaw@micron.com\u003e\nCc: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Benjamin LaHaise \u003cbcrl@kvack.org\u003e\nReviewed-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "20b4fb485227404329e41ad15588afad3df23050",
      "tree": "f3e099f0ab3da8a93b447203e294d2bb22f6dc05",
      "parents": [
        "b9394d8a657cd3c064fa432aa0905c1b58b38fe9",
        "ac3e3c5b1164397656df81b9e9ab4991184d3236"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 01 17:51:54 2013 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 01 17:51:54 2013 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs\n\nPull VFS updates from Al Viro,\n\nMisc cleanups all over the place, mainly wrt /proc interfaces (switch\ncreate_proc_entry to proc_create(), get rid of the deprecated\ncreate_proc_read_entry() in favor of using proc_create_data() and\nseq_file etc).\n\n7kloc removed.\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (204 commits)\n  don\u0027t bother with deferred freeing of fdtables\n  proc: Move non-public stuff from linux/proc_fs.h to fs/proc/internal.h\n  proc: Make the PROC_I() and PDE() macros internal to procfs\n  proc: Supply a function to remove a proc entry by PDE\n  take cgroup_open() and cpuset_open() to fs/proc/base.c\n  ppc: Clean up scanlog\n  ppc: Clean up rtas_flash driver somewhat\n  hostap: proc: Use remove_proc_subtree()\n  drm: proc: Use remove_proc_subtree()\n  drm: proc: Use minor-\u003eindex to label things, not PDE-\u003ename\n  drm: Constify drm_proc_list[]\n  zoran: Don\u0027t print proc_dir_entry data in debug\n  reiserfs: Don\u0027t access the proc_dir_entry in r_open(), r_start() r_show()\n  proc: Supply an accessor for getting the data from a PDE\u0027s parent\n  airo: Use remove_proc_subtree()\n  rtl8192u: Don\u0027t need to save device proc dir PDE\n  rtl8187se: Use a dir under /proc/net/r8180/\n  proc: Add proc_mkdir_data()\n  proc: Move some bits from linux/proc_fs.h to linux/{of.h,signal.h,tty.h}\n  proc: Move PDE_NET() to fs/proc/proc_net.c\n  ...\n"
    },
    {
      "commit": "8d8b97ba499cb69fccb5fd9f2b439e3265fc3f27",
      "tree": "7058d6aedd3bbf160144565dc13d92a9e20b797c",
      "parents": [
        "4c23782091dc98221dc149e844ab128771a78ea2"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Apr 19 23:11:24 2013 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed May 01 17:29:46 2013 -0400"
      },
      "message": "take cgroup_open() and cpuset_open() to fs/proc/base.c\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "16fa94b532b1958f508e07eca1a9256351241fbc",
      "tree": "90012a7b7fe2b8cf96f6f5ec12490e0c5e152291",
      "parents": [
        "e0972916e8fe943f342b0dd1c9d43dbf5bc261c2",
        "25f55d9d01ad7a7ad248fd5af1d22675ffd202c5"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Apr 30 07:43:28 2013 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Apr 30 07:43:28 2013 -0700"
      },
      "message": "Merge branch \u0027sched-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip\n\nPull scheduler changes from Ingo Molnar:\n \"The main changes in this development cycle were:\n\n   - full dynticks preparatory work by Frederic Weisbecker\n\n   - factor out the cpu time accounting code better, by Li Zefan\n\n   - multi-CPU load balancer cleanups and improvements by Joonsoo Kim\n\n   - various smaller fixes and cleanups\"\n\n* \u0027sched-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (45 commits)\n  sched: Fix init NOHZ_IDLE flag\n  sched: Prevent to re-select dst-cpu in load_balance()\n  sched: Rename load_balance_tmpmask to load_balance_mask\n  sched: Move up affinity check to mitigate useless redoing overhead\n  sched: Don\u0027t consider other cpus in our group in case of NEWLY_IDLE\n  sched: Explicitly cpu_idle_type checking in rebalance_domains()\n  sched: Change position of resched_cpu() in load_balance()\n  sched: Fix wrong rq\u0027s runnable_avg update with rt tasks\n  sched: Document task_struct::personality field\n  sched/cpuacct/UML: Fix header file dependency bug on the UML build\n  cgroup: Kill subsys.active flag\n  sched/cpuacct: No need to check subsys active state\n  sched/cpuacct: Initialize cpuacct subsystem earlier\n  sched/cpuacct: Initialize root cpuacct earlier\n  sched/cpuacct: Allocate per_cpu cpuusage for root cpuacct statically\n  sched/cpuacct: Clean up cpuacct.h\n  sched/cpuacct: Remove redundant NULL checks in cpuacct_acount_field()\n  sched/cpuacct: Remove redundant NULL checks in cpuacct_charge()\n  sched/cpuacct: Add cpuacct_acount_field()\n  sched/cpuacct: Add cpuacct_init()\n  ...\n"
    },
    {
      "commit": "191a712090bb8a10e6f129360eeed2d68f3d4c9a",
      "tree": "17e2d6c27fb8a7c3a61828fbcc7c343a4966a0a9",
      "parents": [
        "46d9be3e5eb01f71fc02653755d970247174b400",
        "2a0010af17b1739ef8ea8cf02647a127241ee674"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 29 19:14:20 2013 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 29 19:14:20 2013 -0700"
      },
      "message": "Merge branch \u0027for-3.10\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup\n\nPull cgroup updates from Tejun Heo:\n\n - Fixes and a lot of cleanups.  Locking cleanup is finally complete.\n   cgroup_mutex is no longer exposed to individual controlelrs which\n   used to cause nasty deadlock issues.  Li fixed and cleaned up quite a\n   bit including long standing ones like racy cgroup_path().\n\n - device cgroup now supports proper hierarchy thanks to Aristeu.\n\n - perf_event cgroup now supports proper hierarchy.\n\n - A new mount option \"__DEVEL__sane_behavior\" is added.  As indicated\n   by the name, this option is to be used for development only at this\n   point and generates a warning message when used.  Unfortunately,\n   cgroup interface currently has too many brekages and inconsistencies\n   to implement a consistent and unified hierarchy on top.  The new flag\n   is used to collect the behavior changes which are necessary to\n   implement consistent unified hierarchy.  It\u0027s likely that this flag\n   won\u0027t be used verbatim when it becomes ready but will be enabled\n   implicitly along with unified hierarchy.\n\n   The option currently disables some of broken behaviors in cgroup core\n   and also .use_hierarchy switch in memcg (will be routed through -mm),\n   which can be used to make very unusual hierarchy where nesting is\n   partially honored.  It will also be used to implement hierarchy\n   support for blk-throttle which would be impossible otherwise without\n   introducing a full separate set of control knobs.\n\n   This is essentially versioning of interface which isn\u0027t very nice but\n   at this point I can\u0027t see any other options which would allow keeping\n   the interface the same while moving towards hierarchy behavior which\n   is at least somewhat sane.  The planned unified hierarchy is likely\n   to require some level of adaptation from userland anyway, so I think\n   it\u0027d be best to take the chance and update the interface such that\n   it\u0027s supportable in the long term.\n\n   Maintaining the existing interface does complicate cgroup core but\n   shouldn\u0027t put too much strain on individual controllers and I think\n   it\u0027d be manageable for the foreseeable future.  Maybe we\u0027ll be able\n   to drop it in a decade.\n\nFix up conflicts (including a semantic one adding a new #include to ppc\nthat was uncovered by header the file changes) as per Tejun.\n\n* \u0027for-3.10\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup: (45 commits)\n  cpuset: fix compile warning when CONFIG_SMP\u003dn\n  cpuset: fix cpu hotplug vs rebuild_sched_domains() race\n  cpuset: use rebuild_sched_domains() in cpuset_hotplug_workfn()\n  cgroup: restore the call to eventfd-\u003epoll()\n  cgroup: fix use-after-free when umounting cgroupfs\n  cgroup: fix broken file xattrs\n  devcg: remove parent_cgroup.\n  memcg: force use_hierarchy if sane_behavior\n  cgroup: remove cgrp-\u003etop_cgroup\n  cgroup: introduce sane_behavior mount option\n  move cgroupfs_root to include/linux/cgroup.h\n  cgroup: convert cgroupfs_root flag bits to masks and add CGRP_ prefix\n  cgroup: make cgroup_path() not print double slashes\n  Revert \"cgroup: remove bind() method from cgroup_subsys.\"\n  perf: make perf_event cgroup hierarchical\n  cgroup: implement cgroup_is_descendant()\n  cgroup: make sure parent won\u0027t be destroyed before its children\n  cgroup: remove bind() method from cgroup_subsys.\n  devcg: remove broken_hierarchy tag\n  cgroup: remove cgroup_lock_is_held()\n  ...\n"
    },
    {
      "commit": "6d2488f64a240191f0733c1f32d73607916b01b7",
      "tree": "8e83c602ae560623ee9a8fc2959ce8d61e52eb03",
      "parents": [
        "16248d8fe65ea116cc30b915e05a1c29496da120"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Mon Apr 29 15:07:21 2013 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 29 15:54:33 2013 -0700"
      },
      "message": "cgroup: remove css_get_next\n\nNow that we have generic and well ordered cgroup tree walkers there is\nno need to keep css_get_next in the place.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Tejun Heo \u003chtejun@gmail.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "712317ad97f41e738e1a19aa0a6392a78a84094e",
      "tree": "66988449eb8cca53e032eed6ddc1169f9296eeac",
      "parents": [
        "e57d5cf2f894e3f2727f8cf74bed0bc81cae70c8"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Thu Apr 18 23:09:52 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Apr 18 23:11:40 2013 -0700"
      },
      "message": "cgroup: fix broken file xattrs\n\nWe should store file xattrs in struct cfent instead of struct cftype,\nbecause cftype is a type while cfent is object instance of cftype.\n\nFor example each cgroup has a tasks file, and each tasks file is\nassociated with a uniq cfent, but all those files share the same\nstruct cftype.\n\nAlexey Kodanev reported a crash, which can be reproduced:\n\n  # mount -t cgroup -o xattr /sys/fs/cgroup\n  # mkdir /sys/fs/cgroup/test\n  # setfattr -n trusted.value -v test_value /sys/fs/cgroup/tasks\n  # rmdir /sys/fs/cgroup/test\n  # umount /sys/fs/cgroup\n  oops!\n\nIn this case, simple_xattrs_free() will free the same struct simple_xattrs\ntwice.\n\ntj: Dropped unused local variable @cft from cgroup_diput().\n\nCc: \u003cstable@vger.kernel.org\u003e # 3.8.x\nReported-by: Alexey Kodanev \u003calexey.kodanev@oracle.com\u003e\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "f00baae7ad6c5f1503528efa852f0be8e9513f0e",
      "tree": "6d07f953aa06f01b67ed5161073778118b90e6b9",
      "parents": [
        "05fb22ec5456a472a5eadcaacb3e51eca1f8c79c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Apr 15 13:41:15 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Apr 15 13:46:27 2013 -0700"
      },
      "message": "memcg: force use_hierarchy if sane_behavior\n\nTurn on use_hierarchy by default if sane_behavior is specified and\ndon\u0027t create .use_hierarchy file.\n\nIt is debatable whether to remove .use_hierarchy file or make it ro as\nthe former could make transition easier in certain cases; however, the\nbehavior changes which will be gated by sane_behavior are intensive\nincluding changing basic meaning of certain control knobs in a few\ncontrollers and I don\u0027t really think keeping this piece would make\nthings easier in any noticeable way, so let\u0027s remove it.\n\nv2: Explain that mem_cgroup_bind() doesn\u0027t have to worry about\n    children as suggested by Michal Hocko.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Serge E. Hallyn \u003cserge.hallyn@ubuntu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\n"
    },
    {
      "commit": "05fb22ec5456a472a5eadcaacb3e51eca1f8c79c",
      "tree": "37be0dd3b40b8bf6fc3f4933703543423c39d311",
      "parents": [
        "873fe09ea5df6ccf6bb34811d8c9992aacb67598"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Mon Apr 15 14:25:05 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 14 23:26:10 2013 -0700"
      },
      "message": "cgroup: remove cgrp-\u003etop_cgroup\n\nIt\u0027s not used, and it can be retrieved via cgrp-\u003eroot-\u003etop_cgroup.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "873fe09ea5df6ccf6bb34811d8c9992aacb67598",
      "tree": "ef8d3afc31460ed9fdfd16e70e4c0916d42bcbd6",
      "parents": [
        "25a7e6848db76e22677aff202d9c4ef3503be15b"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 14 20:15:26 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 14 20:15:26 2013 -0700"
      },
      "message": "cgroup: introduce sane_behavior mount option\n\nIt\u0027s a sad fact that at this point various cgroup controllers are\ncarrying so many idiosyncrasies and pure insanities that it simply\nisn\u0027t possible to reach any sort of sane consistent behavior while\nmaintaining staying fully compatible with what already has been\nexposed to userland.\n\nAs we can\u0027t break exposed userland interface, transitioning to sane\nbehaviors can only be done in steps while maintaining backwards\ncompatibility.  This patch introduces a new mount option -\n__DEVEL__sane_behavior - which disables crazy features and enforces\nconsistent behaviors in cgroup core proper and various controllers.\nAs exactly which behaviors it changes are still being determined, the\nmount option, at this point, is useful only for development of the new\nbehaviors.  As such, the mount option is prefixed with __DEVEL__ and\ngenerates a warning message when used.\n\nEventually, once we get to the point where all controller\u0027s behaviors\nare consistent enough to implement unified hierarchy, the __DEVEL__\nprefix will be dropped, and more importantly, unified-hierarchy will\nenforce sane_behavior by default.  Maybe we\u0027ll able to completely drop\nthe crazy stuff after a while, maybe not, but we at least have a\nstrategy to move on to saner behaviors.\n\nThis patch introduces the mount option and changes the following\nbehaviors in cgroup core.\n\n* Mount options \"noprefix\" and \"clone_children\" are disallowed.  Also,\n  cgroupfs file cgroup.clone_children is not created.\n\n* When mounting an existing superblock, mount options should match.\n  This is currently pretty crazy.  If one mounts a cgroup, creates a\n  subdirectory, unmounts it and then mount it again with different\n  option, it looks like the new options are applied but they aren\u0027t.\n\n* Remount is disallowed.\n\nThe behaviors changes are documented in the comment above\nCGRP_ROOT_SANE_BEHAVIOR enum and will be expanded as different\ncontrollers are converted and planned improvements progress.\n\nv2: Dropped unnecessary explicit file permission setting sane_behavior\n    cftype entry as suggested by Li Zefan.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Serge E. Hallyn \u003cserge.hallyn@ubuntu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\n"
    },
    {
      "commit": "25a7e6848db76e22677aff202d9c4ef3503be15b",
      "tree": "e3f944266f4a6ded61ce5d88a5c2c9c33794c366",
      "parents": [
        "9343862945fdd3dd5cb7648bb24cabe40faa9ad9"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 14 20:15:25 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 14 20:15:25 2013 -0700"
      },
      "message": "move cgroupfs_root to include/linux/cgroup.h\n\nWhile controllers shouldn\u0027t be accessing cgroupfs_root directly, it\nbeing hidden inside kern/cgroup.c makes somethings pretty silly.  This\nmakes routing hierarchy-wide settings which need to be visible to\ncontrollers cumbersome.\n\nWe\u0027re gonna add another hierarchy-wide setting which needs to be\naccessed from controllers.  Move cgroupfs_root and its flags to the\nheader file so that we can access root settings with inline helpers.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Serge E. Hallyn \u003cserge.hallyn@ubuntu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "26d5bbe5ba2073fc7ef9e69a55543b2376f5bad0",
      "tree": "d4dcfdec4d3046bb3cee35864264669d44a3a3dc",
      "parents": [
        "ef824fa129b7579f56b92d466ecda2e378879806"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 12 10:29:04 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 12 10:29:04 2013 -0700"
      },
      "message": "Revert \"cgroup: remove bind() method from cgroup_subsys.\"\n\nThis reverts commit 84cfb6ab484b442d5115eb3baf9db7d74a3ea626.  There\nare scheduled changes which make use of the removed callback.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Rami Rosen \u003cramirose@gmail.com\u003e\nCc: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "78574cf981cd3d9ae9f6adbd466a772310ec24ff",
      "tree": "50e9da6e2e201663a22e02240d927592e893780d",
      "parents": [
        "415cf07a1c1c65249773330434878ae7bcd92d0f"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Mon Apr 08 19:00:38 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Apr 10 11:07:08 2013 -0700"
      },
      "message": "cgroup: implement cgroup_is_descendant()\n\nA couple controllers want to determine whether two cgroups are in\nancestor/descendant relationship.  As it\u0027s more likely that the\ndescendant is the primary subject of interest and there are other\noperations focusing on the descendants, let\u0027s ask is_descendent rather\nthan is_ancestor.\n\nImplementation is trivial as the previous patch guarantees that all\nancestors of a cgroup stay accessible as long as the cgroup is\naccessible.\n\ntj: Removed depth optimization, renamed from cgroup_is_ancestor(),\n    rewrote descriptions.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "84cfb6ab484b442d5115eb3baf9db7d74a3ea626",
      "tree": "3a3d52372b7b6f0e42662103baa8f0ef24789bf2",
      "parents": [
        "8adf12b0ffd0a10340bab355e586f8533a69630d"
      ],
      "author": {
        "name": "Rami Rosen",
        "email": "ramirose@gmail.com",
        "time": "Wed Apr 10 14:41:17 2013 +0300"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Apr 10 10:46:59 2013 -0700"
      },
      "message": "cgroup: remove bind() method from cgroup_subsys.\n\nThe bind() method of cgroup_subsys is not used in any of the\ncontrollers (cpuset, freezer, blkio, net_cls, memcg, net_prio,\ndevices, perf, hugetlb, cpu and cpuacct)\n\ntj: Removed the entry on -\u003ebind() from\n    Documentation/cgroups/cgroups.txt.  Also updated a couple\n    paragraphs which were suggesting that dynamic re-binding may be\n    implemented.  It\u0027s not gonna.\n\nSigned-off-by: Rami Rosen \u003cramirose@gmail.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "479f614110b889d5783acdaec865ede3cdb96b97",
      "tree": "d125a16e1118d7d42125d764843a3869e2f60d4a",
      "parents": [
        "a2b0ae25fc8bfeeb4022b8e847ab811b3c8368d1"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Fri Mar 29 14:44:42 2013 +0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@kernel.org",
        "time": "Wed Apr 10 13:54:22 2013 +0200"
      },
      "message": "cgroup: Kill subsys.active flag\n\nThe only user was cpuacct.\n\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nLink: http://lkml.kernel.org/r/5155385A.4040207@huawei.com\nSigned-off-by: Ingo Molnar \u003cmingo@kernel.org\u003e\n"
    },
    {
      "commit": "2219449a65ace0290cd9c2260ff337e326b8be8a",
      "tree": "ca93a1567a9e07adec09a3384d23536dca44603f",
      "parents": [
        "47cfcd0922454e49f4923b1e2d31a5bf199237c3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 07 09:29:51 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 07 09:29:51 2013 -0700"
      },
      "message": "cgroup: remove cgroup_lock_is_held()\n\nWe don\u0027t want controllers to assume that the information is officially\navailable and do funky things with it.\n\nThe only user is task_subsys_state_check() which uses it to verify RCU\naccess context.  We can move cgroup_lock_is_held() inside\nCONFIG_PROVE_RCU but that doesn\u0027t add meaningful protection compared\nto conditionally exposing cgroup_mutex.\n\nRemove cgroup_lock_is_held(), export cgroup_mutex iff CONFIG_PROVE_RCU\nand use lockdep_is_held() directly on the mutex in\ntask_subsys_state_check().\n\nWhile at it, add parentheses around macro arguments in\ntask_subsys_state_check().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "b9777cf8d7c7854c3c38bd6621d993b85c2afcdf",
      "tree": "d3f0275df187bb01a4262971f8fea6f4dbf7f26d",
      "parents": [
        "7ae1bad99e27b8838d480a24edf4646a2fc547df"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 07 09:29:51 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 07 09:29:51 2013 -0700"
      },
      "message": "cgroup: unexport locking interface and cgroup_attach_task()\n\nNow that all external cgroup_lock() users are gone, we can finally\nunexport the locking interface and prevent future abuse of\ncgroup_mutex.\n\nMake cgroup_[un]lock() and cgroup_lock_live_group() static.  Also,\ncgroup_attach_task() doesn\u0027t have any user left and can\u0027t be used\nwithout locking interface anyway.  Make it static too.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "8cc9934520e7f752fe45d5199664d741ba24a932",
      "tree": "881744c4c1c69f4c5afc46b80adb1dd71caf58ff",
      "parents": [
        "d9c10ddddc98db0a316243cd266c466875975a94"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 07 09:29:50 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 07 09:29:50 2013 -0700"
      },
      "message": "cgroup, cpuset: replace move_member_tasks_to_cpuset() with cgroup_transfer_tasks()\n\nWhen a cpuset becomes empty (no CPU or memory), its tasks are\ntransferred with the nearest ancestor with execution resources.  This\nis implemented using cgroup_scan_tasks() with a callback which grabs\ncgroup_mutex and invokes cgroup_attach_task() on each task.\n\nBoth cgroup_mutex and cgroup_attach_task() are scheduled to be\nunexported.  Implement cgroup_transfer_tasks() in cgroup proper which\nis essentially the same as move_member_tasks_to_cpuset() except that\nit takes cgroups instead of cpusets and @to comes before @from like\nnormal functions with those arguments, and replace\nmove_member_tasks_to_cpuset() with it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "081aa458c38ba576bdd4265fc807fa95b48b9e79",
      "tree": "b080dbb2d1fed0b53193b8552f561d8bab39d6b5",
      "parents": [
        "bd2953ebbb533aeda9b86c82a53d5197a9a38f1b"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Wed Mar 13 09:17:09 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 20 07:50:25 2013 -0700"
      },
      "message": "cgroup: consolidate cgroup_attach_task() and cgroup_attach_proc()\n\nThese two functions share most of the code.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "e7b2dcc52b0e2d598a469f01cc460ccdde6869f2",
      "tree": "c716655a75a9f91de5f21f94fe53e96fbf680fe9",
      "parents": [
        "cfb5966bef85412dab9c93553db10b3e99ac32e8"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Tue Mar 12 15:35:58 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 12 15:35:58 2013 -0700"
      },
      "message": "cgroup: remove cgroup_is_descendant()\n\nIt was used by ns cgroup, and ns cgroup was removed long ago.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "7d8e0bf56a66bab08d2f316dd87e56c08cecb899",
      "tree": "be35c2daec953f0c98241c16311879dd45bc4859",
      "parents": [
        "f50daa704f36a6544a902c52b6cf37b0493dfc5d"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Tue Mar 05 10:57:03 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 05 09:33:25 2013 -0800"
      },
      "message": "cgroup: avoid accessing modular cgroup subsys structure without locking\n\nsubsys[i] is set to NULL in cgroup_unload_subsys() at modular unload,\nand that\u0027s protected by cgroup_mutex, and then the memory *subsys[i]\nresides will be freed.\n\nSo this is unsafe without any locking:\n\n  if (!ss || ss-\u003emodule)\n  ...\n\nv2:\n- add a comment for enum cgroup_subsys_id\n- simplify the comment in cgroup_exit()\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "65dff759d2948cf18e2029fc5c0c595b8b7da3a5",
      "tree": "2904e81e44bb939413f406bbb2056e88df008f72",
      "parents": [
        "6dbe51c251a327e012439c4772097a13df43c5b8"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Fri Mar 01 15:01:56 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 04 09:50:08 2013 -0800"
      },
      "message": "cgroup: fix cgroup_path() vs rename() race\n\nrename() will change dentry-\u003ed_name. The result of this race can\nbe worse than seeing partially rewritten name, but we might access\na stale pointer because rename() will re-allocate memory to hold\na longer name.\n\nAs accessing dentry-\u003ename must be protected by dentry-\u003ed_lock or\nparent inode\u0027s i_mutex, while on the other hand cgroup-path() can\nbe called with some irq-safe spinlocks held, we can\u0027t generate\ncgroup path using dentry-\u003ed_name.\n\nAlternatively we make a copy of dentry-\u003ed_name and save it in\ncgrp-\u003ename when a cgroup is created, and update cgrp-\u003ename at\nrename().\n\nv5: use flexible array instead of zero-size array.\nv4: - allocate root_cgroup_name and all root_cgroup-\u003ename points to it.\n    - add cgroup_name() wrapper.\nv3: use kfree_rcu() instead of synchronize_rcu() in user-visible path.\nv2: make cgrp-\u003ename RCU safe.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "be44562613851235d801d41d5b3976dc4333f622",
      "tree": "ed68df6a444cd106b04f96645c03a6f97fcc2e0c",
      "parents": [
        "86a3db5643c7d29bb36ca85c7a4bb67ad4d88d77"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Thu Jan 24 14:31:42 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jan 24 12:05:18 2013 -0800"
      },
      "message": "cgroup: remove synchronize_rcu() from cgroup_diput()\n\nFree cgroup via call_rcu(). The actual work is done through\nworkqueue.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "12a9d2fef1d35770d3cdc2cd1faabb83c45bc0fa",
      "tree": "a7c50e81a638a156ce8d4f41dcab273397e6e474",
      "parents": [
        "d5b1fe68baa7213f198e5be8cd1a1037258ab2c8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jan 07 08:49:33 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jan 07 08:50:28 2013 -0800"
      },
      "message": "cgroup: implement cgroup_rightmost_descendant()\n\nImplement cgroup_rightmost_descendant() which returns the right most\ndescendant of the specified cgroup.  This can be used to skip the\ncgroup\u0027s subtree while iterating with\ncgroup_for_each_descendant_pre().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "d5b1fe68baa7213f198e5be8cd1a1037258ab2c8",
      "tree": "83d5c15ee51d1b782904f0b238c584f16d17bdec",
      "parents": [
        "d1c3ed669a2d452cacfb48c2d171a1f364dae2ed"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Dec 28 13:18:28 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jan 07 08:49:16 2013 -0800"
      },
      "message": "cgroup: remove unused dummy cgroup_fork_callbacks()\n\n5edee61ede (\"cgroup: cgroup_subsys-\u003efork() should be called after the\ntask is added to css_set\") removed cgroup_fork_callbacks() but forgot\nto remove its dummy version for !CONFIG_CGROUPS.  Remove it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Herton Ronaldo Krzesinski \u003cherton.krzesinski@canonical.com\u003e\n"
    },
    {
      "commit": "d0b2fdd2a51203f04ea0a5d716e033c15e0231af",
      "tree": "778d37a6aa21db18b7416309a5cbd1d664e9c6e0",
      "parents": [
        "0a950f65e1e64f4e82b4b5507773848ea88bcb8e"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Tue Nov 20 22:06:18 2012 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Nov 20 06:44:58 2012 -0800"
      },
      "message": "cgroup: remove obsolete guarantee from cgroup_task_migrate.\n\n\u0027guarantee\u0027 is already removed from cgroup_task_migrate, so remove\nthe corresponding comments. Some other typos in cgroup are also\nchanged.\n\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "0a950f65e1e64f4e82b4b5507773848ea88bcb8e",
      "tree": "90106ea13abc3cfe9226dc0c7628ccad136f92b4",
      "parents": [
        "033fa1c5f5f73833598a0beb022c0048fb769dad"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 09:02:12 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 09:02:12 2012 -0800"
      },
      "message": "cgroup: add cgroup-\u003eid\n\nWith the introduction of generic cgroup hierarchy iterators, css_id is\nbeing phased out.  It was unnecessarily complex, id\u0027ing the wrong\nthing (cgroups need IDs, not CSSes) and has other oddities like not\nbeing available at -\u003ecss_alloc().\n\nThis patch adds cgroup-\u003eid, which is a simple per-hierarchy\nida-allocated ID which is assigned before -\u003ecss_alloc() and released\nafter -\u003ecss_free().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: Neil Horman \u003cnhorman@tuxdriver.com\u003e\n"
    },
    {
      "commit": "033fa1c5f5f73833598a0beb022c0048fb769dad",
      "tree": "ec6c34da43d3d71ec3dbfc116ae1c3b8197edc89",
      "parents": [
        "2260e7fc1f18ad815324605c1ce7d5c6fd9b19a2"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:39 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:39 2012 -0800"
      },
      "message": "cgroup, cpuset: remove cgroup_subsys-\u003epost_clone()\n\nCurrently CGRP_CPUSET_CLONE_CHILDREN triggers -\u003epost_clone().  Now\nthat clone_children is cpuset specific, there\u0027s no reason to have this\nrather odd option activation mechanism in cgroup core.  cpuset can\ncheck the flag from its -\u003ecss_allocate() and take the necessary\naction.\n\nMove cpuset_post_clone() logic to the end of cpuset_css_alloc() and\nremove cgroup_subsys-\u003epost_clone().\n\nLoosely based on Glauber\u0027s \"generalize post_clone into post_create\"\npatch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nOriginal-patch-by: Glauber Costa \u003cglommer@parallels.com\u003e\nOriginal-patch: \u003c1351686554-22592-2-git-send-email-glommer@parallels.com\u003e\nAcked-by: Serge E. Hallyn \u003cserge.hallyn@ubuntu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\n"
    },
    {
      "commit": "2260e7fc1f18ad815324605c1ce7d5c6fd9b19a2",
      "tree": "effa76704caa7a6ce40b19de3fa2c3367ac5b431",
      "parents": [
        "92fb97487a7e41b222c1417cabd1d1ab7cc3a48c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:38 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:38 2012 -0800"
      },
      "message": "cgroup: s/CGRP_CLONE_CHILDREN/CGRP_CPUSET_CLONE_CHILDREN/\n\nclone_children is only meaningful for cpuset and will stay that way.\nRename the flag to reflect that and update documentation.  Also, drop\nclone_children() wrapper in cgroup.c.  The thin wrapper is used only a\nfew times and one of them will go away soon.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Serge E. Hallyn \u003cserge.hallyn@ubuntu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\n"
    },
    {
      "commit": "92fb97487a7e41b222c1417cabd1d1ab7cc3a48c",
      "tree": "c220c622b9ac9b16535535d448e9cd29be72c77e",
      "parents": [
        "b1929db42f8a649d9a9e397119f628c27fd4021f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:38 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:38 2012 -0800"
      },
      "message": "cgroup: rename -\u003ecreate/post_create/pre_destroy/destroy() to -\u003ecss_alloc/online/offline/free()\n\nRename cgroup_subsys css lifetime related callbacks to better describe\nwhat their roles are.  Also, update documentation.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "b1929db42f8a649d9a9e397119f628c27fd4021f",
      "tree": "04c0fa6f056395f8d17b5cd918403547be3f1425",
      "parents": [
        "4b8b47eb0001a89f271d671d959b235faa8f03e2"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:38 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:38 2012 -0800"
      },
      "message": "cgroup: allow -\u003epost_create() to fail\n\nThere could be cases where controllers want to do initialization\noperations which may fail from -\u003epost_create().  This patch makes\n-\u003epost_create() return -errno to indicate failure and online_css()\nrelay such failures.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\n"
    },
    {
      "commit": "a31f2d3ff7fe20cbe2a143515a7d7c408b29dd0d",
      "tree": "fd9e909ad92609eb189d406c4812325788d25bbc",
      "parents": [
        "42809dd4225b2f3127a4804314a1b33608620d96"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:37 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:37 2012 -0800"
      },
      "message": "cgroup: introduce CSS_ONLINE flag and on/offline_css() helpers\n\nNew helpers on/offline_css() respectively wrap -\u003epost_create() and\n-\u003epre_destroy() invocations.  online_css() sets CSS_ONLINE after\n-\u003epost_create() is complete and offline_css() invokes -\u003epre_destroy()\niff CSS_ONLINE is set and clears it while also handling the temporary\ndropping of cgroup_mutex.\n\nThis patch doesn\u0027t introduce any behavior change at the moment but\nwill be used to improve cgroup_create() failure path and allow\n-\u003epost_create() to fail.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "38b53abaa3e0c7e750ef73eee919cf42eee6b134",
      "tree": "1692ce65068d5df48768564548ec7e4ed4b67da5",
      "parents": [
        "febfcef60d4f9457785b45aab548bc7ee5ea158f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:36 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:36 2012 -0800"
      },
      "message": "cgroup: make CSS_* flags bit masks instead of bit positions\n\nCurrently, CSS_* flags are defined as bit positions and manipulated\nusing atomic bitops.  There\u0027s no reason to use atomic bitops for them\nand bit positions are clunkier to deal with than bit masks.  Make\nCSS_* bit masks instead and use the usual C bitwise operators to\naccess them.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "febfcef60d4f9457785b45aab548bc7ee5ea158f",
      "tree": "70fab0e8ec07aec4142f1dc228f307e6b1d79de0",
      "parents": [
        "4e139afc22cb98d0d032ffce0285bfcc73ca5217"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:36 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:36 2012 -0800"
      },
      "message": "cgroup: cgroup-\u003edentry isn\u0027t a RCU pointer\n\ncgroup-\u003edentry is marked and used as a RCU pointer; however, it isn\u0027t\none - the final dentry put doesn\u0027t go through call_rcu().  cgroup and\ndentry share the same RCU freeing rule via synchronize_rcu() in\ncgroup_diput() (kfree_rcu() used on cgrp is unnecessary).  If cgrp is\naccessible under RCU read lock, so is its dentry and dereferencing\ncgrp-\u003edentry doesn\u0027t need any further RCU protection or annotation.\n\nWhile not being accurate, before the previous patch, the RCU accessors\nserved a purpose as memory barriers - cgroup-\u003edentry used to be\nassigned after the cgroup was made visible to cgroup_path(), so the\nassignment and dereferencing in cgroup_path() needed the memory\nbarrier pair.  Now that list_add_tail_rcu() happens after\ncgroup-\u003edentry is assigned, this no longer is necessary.\n\nRemove the now unnecessary and misleading RCU annotations from\ncgroup-\u003edentry.  To make up for the removal of rcu_dereference_check()\nin cgroup_path(), add an explicit rcu_lockdep_assert(), which asserts\nthe dereference rule of @cgrp, not cgrp-\u003edentry.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "574bd9f7c7c1d32f52dea5488018a6ff79031e22",
      "tree": "f43657afb59dd12fe1eca329acc6caf885507727",
      "parents": [
        "eb6fd5040ee799009173daa49c3e7aa0362167c9"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 09 09:12:29 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 09 09:12:29 2012 -0800"
      },
      "message": "cgroup: implement generic child / descendant walk macros\n\nCurrently, cgroup doesn\u0027t provide any generic helper for walking a\ngiven cgroup\u0027s children or descendants.  This patch adds the following\nthree macros.\n\n* cgroup_for_each_child() - walk immediate children of a cgroup.\n\n* cgroup_for_each_descendant_pre() - visit all descendants of a cgroup\n  in pre-order tree traversal.\n\n* cgroup_for_each_descendant_post() - visit all descendants of a\n  cgroup in post-order tree traversal.\n\nAll three only require the user to hold RCU read lock during\ntraversal.  Verifying that each iterated cgroup is online is the\nresponsibility of the user.  When used with proper synchronization,\ncgroup_for_each_descendant_pre() can be used to propagate state\nupdates to descendants in reliable way.  See comments for details.\n\nv2: s/config/state/ in commit message and comments per Michal.  More\n    documentation on synchronization rules.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujisu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "eb6fd5040ee799009173daa49c3e7aa0362167c9",
      "tree": "16d837a4479b25d379b558d850431fb3b7291dd1",
      "parents": [
        "a8638030f668884720b8f4456448d0ce33952b05"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 09 09:12:29 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 09 09:12:29 2012 -0800"
      },
      "message": "cgroup: use rculist ops for cgroup-\u003echildren\n\nUse RCU safe list operations for cgroup-\u003echildren.  This will be used\nto implement cgroup children / descendant walking which can be used by\ncontrollers.\n\nNote that cgroup_create() now puts a new cgroup at the end of the\n-\u003echildren list instead of head.  This isn\u0027t strictly necessary but is\ndone so that the iteration order is more conventional.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "a8638030f668884720b8f4456448d0ce33952b05",
      "tree": "2532b2ef9def879513fad0e304a6a9c98fa798f0",
      "parents": [
        "316eb661f125397d46f16f94e3c81ad3dc4c1233"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 09 09:12:29 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 09 09:12:29 2012 -0800"
      },
      "message": "cgroup: add cgroup_subsys-\u003epost_create()\n\nCurrently, there\u0027s no way for a controller to find out whether a new\ncgroup finished all -\u003ecreate() allocatinos successfully and is\nconsidered \"live\" by cgroup.\n\nThis becomes a problem later when we add generic descendants walking\nto cgroup which can be used by controllers as controllers don\u0027t have a\nsynchronization point where it can synchronize against new cgroups\nappearing in such walks.\n\nThis patch adds -\u003epost_create().  It\u0027s called after all -\u003ecreate()\nsucceeded and the cgroup is linked into the generic cgroup hierarchy.\nThis plays the counterpart of -\u003epre_destroy().\n\nWhen used in combination with the to-be-added generic descendant\niterators, -\u003epost_create() can be used to implement reliable state\ninheritance.  It will be explained with the descendant iterators.\n\nv2: Added a paragraph about its future use w/ descendant iterators per\n    Michal.\n\nv3: Forgot to add -\u003epost_create() invocation to cgroup_load_subsys().\n    Fixed.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\n"
    },
    {
      "commit": "1db1e31b1ee3ae126ef98f39083b5f213c7b41bf",
      "tree": "98328124d3b8b08b6db894c79d0e79b3a42417bf",
      "parents": [
        "5d8f72b55c275677865de670fa147ed318191d81",
        "bcf6de1b9129531215d26dd9af8331e84973bc52"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:21:51 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:21:51 2012 -0800"
      },
      "message": "Merge branch \u0027cgroup-rmdir-updates\u0027 into cgroup/for-3.8\n\nPull rmdir updates into for-3.8 so that further callback updates can\nbe put on top.  This pull created a trivial conflict between the\nfollowing two commits.\n\n  8c7f6edbda (\"cgroup: mark subsystems with broken hierarchy support and whine if cgroups are nested for them\")\n  ed95779340 (\"cgroup: kill cgroup_subsys-\u003e__DEPRECATED_clear_css_refs\")\n\nThe former added a field to cgroup_subsys and the latter removed one\nfrom it.  They happen to be colocated causing the conflict.  Keeping\nwhat\u0027s added and removing what\u0027s removed resolves the conflict.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "bcf6de1b9129531215d26dd9af8331e84973bc52",
      "tree": "0666760423e4579a50a7752568036a13e0cfa9d5",
      "parents": [
        "9d093cb10eb482adfba6ddc71a0969b78823ee8b"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:59 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:59 2012 -0800"
      },
      "message": "cgroup: make -\u003epre_destroy() return void\n\nAll -\u003epre_destory() implementations return 0 now, which is the only\nallowed return value.  Make it return void.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\n"
    },
    {
      "commit": "b25ed609d0eecf077db607e88ea70bae83b6adb2",
      "tree": "ba6d9f2b6d1f0a389acb5a52cd4498c0f5ee6060",
      "parents": [
        "1a90dd508b0b00e382fd61a46f55dc889ac21b39"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:59 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:59 2012 -0800"
      },
      "message": "cgroup: remove CGRP_WAIT_ON_RMDIR, cgroup_exclude_rmdir() and cgroup_release_and_wakeup_rmdir()\n\nCGRP_WAIT_ON_RMDIR is another kludge which was added to make cgroup\ndestruction rollback somewhat working.  cgroup_rmdir() used to drain\nCSS references and CGRP_WAIT_ON_RMDIR and the associated waitqueue and\nhelpers were used to allow the task performing rmdir to wait for the\nnext relevant event.\n\nUnfortunately, the wait is visible to controllers too and the\nmechanism got exposed to memcg by 887032670d (\"cgroup avoid permanent\nsleep at rmdir\").\n\nNow that the draining and retries are gone, CGRP_WAIT_ON_RMDIR is\nunnecessary.  Remove it and all the mechanisms supporting it.  Note\nthat memcontrol.c changes are essentially revert of 887032670d\n(\"cgroup avoid permanent sleep at rmdir\").\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\n"
    },
    {
      "commit": "e93160803ffda2e67d9ff9cacb63bb6868c8398f",
      "tree": "e3305bb56336c32862f1970882f030caca7f11b2",
      "parents": [
        "ed95779340b50e362245c81b5dec0d11a1debfa8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:58 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:58 2012 -0800"
      },
      "message": "cgroup: kill CSS_REMOVED\n\nCSS_REMOVED is one of the several contortions which were necessary to\nsupport css reference draining on cgroup removal.  All css-\u003erefcnts\nwhich need draining should be deactivated and verified to equal zero\natomically w.r.t. css_tryget().  If any one isn\u0027t zero, all refcnts\nneeded to be re-activated and css_tryget() shouldn\u0027t fail in the\nprocess.\n\nThis was achieved by letting css_tryget() busy-loop until either the\nrefcnt is reactivated (failed removal attempt) or CSS_REMOVED is set\n(committing to removal).\n\nNow that css refcnt draining is no longer used, there\u0027s no need for\natomic rollback mechanism.  css_tryget() simply can look at the\nreference count and fail if it\u0027s deactivated - it\u0027s never getting\nre-activated.\n\nThis patch removes CSS_REMOVED and updates __css_tryget() to fail if\nthe refcnt is deactivated.  As deactivation and removal are a single\nstep now, they no longer need to be protected against css_tryget()\nhappening from irq context.  Remove local_irq_disable/enable() from\ncgroup_rmdir().\n\nNote that this removes css_is_removed() whose only user is VM_BUG_ON()\nin memcontrol.c.  We can replace it with a check on the refcnt but\ngiven that the only use case is a debug assert, I think it\u0027s better to\nsimply unexport it.\n\nv2: Comment updated and explanation on local_irq_disable/enable()\n    added per Michal Hocko.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\n"
    },
    {
      "commit": "ed95779340b50e362245c81b5dec0d11a1debfa8",
      "tree": "875124b1945f62ca741a34d8171189b5c4c3378b",
      "parents": [
        "2ef37d3fe474b218e170010a59066e19427c9847"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:58 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:58 2012 -0800"
      },
      "message": "cgroup: kill cgroup_subsys-\u003e__DEPRECATED_clear_css_refs\n\n2ef37d3fe4 (\"memcg: Simplify mem_cgroup_force_empty_list error\nhandling\") removed the last user of __DEPRECATED_clear_css_refs.  This\npatch removes __DEPRECATED_clear_css_refs and mechanisms to support\nit.\n\n* Conditionals dependent on __DEPRECATED_clear_css_refs removed.\n\n* cgroup_clear_css_refs() can no longer fail.  All that needs to be\n  done are deactivating refcnts, setting CSS_REMOVED and putting the\n  base reference on each css.  Remove cgroup_clear_css_refs() and the\n  failure path, and open-code the loops into cgroup_rmdir().\n\nThis patch keeps the two for_each_subsys() loops separate while open\ncoding them.  They can be merged now but there are scheduled changes\nwhich need them to be separate, so keep them separate to reduce the\namount of churn.\n\nlocal_irq_save/restore() from cgroup_clear_css_refs() are replaced\nwith local_irq_disable/enable() for simplicity.  This is safe as\ncgroup_rmdir() is always called with IRQ enabled.  Note that this IRQ\nswitching is necessary to ensure that css_tryget() isn\u0027t called from\nIRQ context on the same CPU while lower context is between CSS\ndeactivation and setting CSS_REMOVED as css_tryget() would hang\nforever in such cases waiting for CSS to be re-activated or\nCSS_REMOVED set.  This will go away soon.\n\nv2: cgroup_call_pre_destroy() removal dropped per Michal.  Commit\n    message updated to explain local_irq_disable/enable() conversion.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "5edee61edeaaebafe584f8fb7074c1ef4658596b",
      "tree": "23e6ee3581eb0009b3c2a2686c25fdba538219de",
      "parents": [
        "ddffeb8c4d0331609ef2581d84de4d763607bd37"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Oct 16 15:03:14 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Oct 16 15:03:14 2012 -0700"
      },
      "message": "cgroup: cgroup_subsys-\u003efork() should be called after the task is added to css_set\n\ncgroup core has a bug which violates a basic rule about event\nnotifications - when a new entity needs to be added, you add that to\nthe notification list first and then make the new entity conform to\nthe current state.  If done in the reverse order, an event happening\ninbetween will be lost.\n\ncgroup_subsys-\u003efork() is invoked way before the new task is added to\nthe css_set.  Currently, cgroup_freezer is the only user of -\u003efork()\nand uses it to make new tasks conform to the current state of the\nfreezer.  If FROZEN state is requested while fork is in progress\nbetween cgroup_fork_callbacks() and cgroup_post_fork(), the child\ncould escape freezing - the cgroup isn\u0027t frozen when -\u003efork() is\ncalled and the freezer couldn\u0027t see the new task on the css_set.\n\nThis patch moves cgroup_subsys-\u003efork() invocation to\ncgroup_post_fork() after the new task is added to the css_set.\ncgroup_fork_callbacks() is removed.\n\nBecause now a task may be migrated during cgroup_subsys-\u003efork(),\nfreezer_fork() is updated so that it adheres to the usual RCU locking\nand the rather pointless comment on why locking can be different there\nis removed (if it doesn\u0027t make anything simpler, why even bother?).\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "68d47a137c3bef754923bccf73fb639c9b0bbd5e",
      "tree": "e82a527bd978ee96283f03d0df36f47d9aee1e41",
      "parents": [
        "c0e8a139a5bb8add02b4111e9e1957d810d7285e",
        "8c7f6edbda01f1b1a2e60ad61f14fe38023e433b"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 02 10:52:28 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 02 10:52:28 2012 -0700"
      },
      "message": "Merge branch \u0027for-3.7-hierarchy\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup\n\nPull cgroup hierarchy update from Tejun Heo:\n \"Currently, different cgroup subsystems handle nested cgroups\n  completely differently.  There\u0027s no consistency among subsystems and\n  the behaviors often are outright broken.\n\n  People at least seem to agree that the broken hierarhcy behaviors need\n  to be weeded out if any progress is gonna be made on this front and\n  that the fallouts from deprecating the broken behaviors should be\n  acceptable especially given that the current behaviors don\u0027t make much\n  sense when nested.\n\n  This patch makes cgroup emit warning messages if cgroups for\n  subsystems with broken hierarchy behavior are nested to prepare for\n  fixing them in the future.  This was put in a separate branch because\n  more related changes were expected (didn\u0027t make it this round) and the\n  memory cgroup wanted to pull in this and make changes on top.\"\n\n* \u0027for-3.7-hierarchy\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup:\n  cgroup: mark subsystems with broken hierarchy support and whine if cgroups are nested for them\n"
    },
    {
      "commit": "8c7f6edbda01f1b1a2e60ad61f14fe38023e433b",
      "tree": "f1db9712b109575cba86e37140e1e4f8a56ca780",
      "parents": [
        "fbcbe2b3c92ee1c930dcfcf8bb764074c100fd63"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Sep 13 12:20:58 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 14 12:01:16 2012 -0700"
      },
      "message": "cgroup: mark subsystems with broken hierarchy support and whine if cgroups are nested for them\n\nCurrently, cgroup hierarchy support is a mess.  cpu related subsystems\nbehave correctly - configuration, accounting and control on a parent\nproperly cover its children.  blkio and freezer completely ignore\nhierarchy and treat all cgroups as if they\u0027re directly under the root\ncgroup.  Others show yet different behaviors.\n\nThese differing interpretations of cgroup hierarchy make using cgroup\nconfusing and it impossible to co-mount controllers into the same\nhierarchy and obtain sane behavior.\n\nEventually, we want full hierarchy support from all subsystems and\nprobably a unified hierarchy.  Users using separate hierarchies\nexpecting completely different behaviors depending on the mounted\nsubsystem is deterimental to making any progress on this front.\n\nThis patch adds cgroup_subsys.broken_hierarchy and sets it to %true\nfor controllers which are lacking in hierarchy support.  The goal of\nthis patch is two-fold.\n\n* Move users away from using hierarchy on currently non-hierarchical\n  subsystems, so that implementing proper hierarchy support on those\n  doesn\u0027t surprise them.\n\n* Keep track of which controllers are broken how and nudge the\n  subsystems to implement proper hierarchy support.\n\nFor now, start with a single warning message.  We can whine louder\nlater on.\n\nv2: Fixed a typo spotted by Michal. Warning message updated.\n\nv3: Updated memcg part so that it doesn\u0027t generate warning in the\n    cases where .use_hierarchy\u003dfalse doesn\u0027t make the behavior\n    different from root.use_hierarchy\u003dtrue.  Fixed a typo spotted by\n    Glauber.\n\nv4: Check -\u003ebroken_hierarchy after cgroup creation is complete so that\n    -\u003ecreate() can affect the result per Michal.  Dropped unnecessary\n    memcg root handling per Michal.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: Serge E. Hallyn \u003cserue@us.ibm.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Paul Turner \u003cpjt@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Thomas Graf \u003ctgraf@suug.ch\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Arnaldo Carvalho de Melo \u003cacme@ghostprotocols.net\u003e\nCc: Neil Horman \u003cnhorman@tuxdriver.com\u003e\nCc: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "a6f00298b2ceaf50b4ab00e6ee3eb0206ac72fac",
      "tree": "47064dd9fcb48c70b7671dbd93c12281e1022d84",
      "parents": [
        "8a8e04df4747661daaee77e98e102d99c9e09b98"
      ],
      "author": {
        "name": "Daniel Wagner",
        "email": "daniel.wagner@bmw-carit.de",
        "time": "Wed Sep 12 16:12:08 2012 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 14 09:57:47 2012 -0700"
      },
      "message": "cgroup: Define CGROUP_SUBSYS_COUNT according the configuration\n\nSince we know exactly how many subsystems exists at compile time we are\nable to define CGROUP_SUBSYS_COUNT correctly. CGROUP_SUBSYS_COUNT will\nbe at max 12 (all controllers enabled). Depending on the architecture\nwe safe either 32 - 12 pointers (80 bytes) or 64 - 12 pointers (416\nbytes) per cgroup.\n\nWith this change we can also remove the temporary placeholder to avoid\ncompilation errors.\n\nSigned-off-by: Daniel Wagner \u003cdaniel.wagner@bmw-carit.de\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: Neil Horman \u003cnhorman@tuxdriver.com\u003e\nCc: Gao feng \u003cgaofeng@cn.fujitsu.com\u003e\nCc: Jamal Hadi Salim \u003cjhs@mojatatu.com\u003e\nCc: John Fastabend \u003cjohn.r.fastabend@intel.com\u003e\nCc: netdev@vger.kernel.org\nCc: cgroups@vger.kernel.org\n"
    },
    {
      "commit": "8a8e04df4747661daaee77e98e102d99c9e09b98",
      "tree": "8ecd4288cfad84ed2bfc1820331b2483e70abfd3",
      "parents": [
        "80f4c87774721e864d5a5a1f7aca3e95fd90e194"
      ],
      "author": {
        "name": "Daniel Wagner",
        "email": "daniel.wagner@bmw-carit.de",
        "time": "Wed Sep 12 16:12:07 2012 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 14 09:57:43 2012 -0700"
      },
      "message": "cgroup: Assign subsystem IDs during compile time\n\nWARNING: With this change it is impossible to load external built\ncontrollers anymore.\n\nIn case where CONFIG_NETPRIO_CGROUP\u003dm and CONFIG_NET_CLS_CGROUP\u003dm is\nset, corresponding subsys_id should also be a constant. Up to now,\nnet_prio_subsys_id and net_cls_subsys_id would be of the type int and\nthe value would be assigned during runtime.\n\nBy switching the macro definition IS_SUBSYS_ENABLED from IS_BUILTIN\nto IS_ENABLED, all *_subsys_id will have constant value. That means we\nneed to remove all the code which assumes a value can be assigned to\nnet_prio_subsys_id and net_cls_subsys_id.\n\nA close look is necessary on the RCU part which was introduces by\nfollowing patch:\n\n  commit f845172531fb7410c7fb7780b1a6e51ee6df7d52\n  Author:\tHerbert Xu \u003cherbert@gondor.apana.org.au\u003e  Mon May 24 09:12:34 2010\n  Committer:\tDavid S. Miller \u003cdavem@davemloft.net\u003e  Mon May 24 09:12:34 2010\n\n  cls_cgroup: Store classid in struct sock\n\n  Tis code was added to init_cgroup_cls()\n\n\t  /* We can\u0027t use rcu_assign_pointer because this is an int. */\n\t  smp_wmb();\n\t  net_cls_subsys_id \u003d net_cls_subsys.subsys_id;\n\n  respectively to exit_cgroup_cls()\n\n\t  net_cls_subsys_id \u003d -1;\n\t  synchronize_rcu();\n\n  and in module version of task_cls_classid()\n\n\t  rcu_read_lock();\n\t  id \u003d rcu_dereference(net_cls_subsys_id);\n\t  if (id \u003e\u003d 0)\n\t\t  classid \u003d container_of(task_subsys_state(p, id),\n\t\t\t\t\t struct cgroup_cls_state, css)-\u003eclassid;\n\t  rcu_read_unlock();\n\nWithout an explicit explaination why the RCU part is needed. (The\nrcu_deference was fixed by exchanging it to rcu_derefence_index_check()\nin a later commit, but that is a minor detail.)\n\nSo here is my pondering why it was introduced and why it safe to\nremove it now. Note that this code was copied over to net_prio the\nreasoning holds for that subsystem too.\n\nThe idea behind the RCU use for net_cls_subsys_id is to make sure we\nget a valid pointer back from task_subsys_state(). task_subsys_state()\nis just blindly accessing the subsys array and returning the\npointer. Obviously, passing in -1 as id into task_subsys_state()\nreturns an invalid value (out of lower bound).\n\nSo this code makes sure that only after module is loaded and the\nsubsystem registered, the id is assigned.\n\nBefore unregistering the module all old readers must have left the\ncritical section. This is done by assigning -1 to the id and issuing a\nsynchronized_rcu(). Any new readers wont call task_subsys_state()\nanymore and therefore it is safe to unregister the subsystem.\n\nThe new code relies on the same trick, but it looks at the subsys\npointer return by task_subsys_state() (remember the id is constant\nand therefore we allways have a valid index into the subsys\narray).\n\nNo precautions need to be taken during module loading\nmodule. Eventually, all CPUs will get a valid pointer back from\ntask_subsys_state() because rebind_subsystem() which is called after\nthe module init() function will assigned subsys[net_cls_subsys_id] the\nnewly loaded module subsystem pointer.\n\nWhen the subsystem is about to be removed, rebind_subsystem() will\ncalled before the module exit() function. In this case,\nrebind_subsys() will assign subsys[net_cls_subsys_id] a NULL pointer\nand then it calls synchronize_rcu(). All old readers have left by then\nthe critical section. Any new reader wont access the subsystem\nanymore.  At this point we are safe to unregister the subsystem. No\nsynchronize_rcu() call is needed.\n\nSigned-off-by: Daniel Wagner \u003cdaniel.wagner@bmw-carit.de\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: Neil Horman \u003cnhorman@tuxdriver.com\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: \"Paul E. McKenney\" \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Eric Dumazet \u003cedumazet@google.com\u003e\nCc: Gao feng \u003cgaofeng@cn.fujitsu.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\nCc: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\nCc: Jamal Hadi Salim \u003cjhs@mojatatu.com\u003e\nCc: John Fastabend \u003cjohn.r.fastabend@intel.com\u003e\nCc: Kamezawa Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: netdev@vger.kernel.org\nCc: cgroups@vger.kernel.org\n"
    },
    {
      "commit": "5fc0b02544b3b9bd3db5a8156b5f3e7350f8e797",
      "tree": "9382ec0de547289cbda8f4bdb90eb65a029398eb",
      "parents": [
        "be45c900fdc2c66baad5a7703fb8136991d88aeb"
      ],
      "author": {
        "name": "Daniel Wagner",
        "email": "daniel.wagner@bmw-carit.de",
        "time": "Wed Sep 12 16:12:05 2012 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 14 09:57:37 2012 -0700"
      },
      "message": "cgroup: Wrap subsystem selection macro\n\nBefore we are able to define all subsystem ids at compile time we need\na more fine grained control what gets defined when we include\ncgroup_subsys.h. For example we define the enums for the subsystems or\nto declare for struct cgroup_subsys (builtin subsystem) by including\ncgroup_subsys.h and defining SUBSYS accordingly.\n\nCurrently, the decision if a subsys is used is defined inside the\nheader by testing if CONFIG_*\u003dy is true. By moving this test outside\nof cgroup_subsys.h we are able to control it on the include level.\n\nThis is done by introducing IS_SUBSYS_ENABLED which then is defined\naccording the task, e.g. is CONFIG_*\u003dy or CONFIG_*\u003dm.\n\nSigned-off-by: Daniel Wagner \u003cdaniel.wagner@bmw-carit.de\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: Neil Horman \u003cnhorman@tuxdriver.com\u003e\nCc: Gao feng \u003cgaofeng@cn.fujitsu.com\u003e\nCc: Jamal Hadi Salim \u003cjhs@mojatatu.com\u003e\nCc: John Fastabend \u003cjohn.r.fastabend@intel.com\u003e\nCc: netdev@vger.kernel.org\nCc: cgroups@vger.kernel.org\n"
    },
    {
      "commit": "be45c900fdc2c66baad5a7703fb8136991d88aeb",
      "tree": "d787ad6f2d2a762c6ec581123b7325ebd62857f1",
      "parents": [
        "51e4e7faba786d33e5e33f8776c5027a1c8d6fb7"
      ],
      "author": {
        "name": "Daniel Wagner",
        "email": "daniel.wagner@bmw-carit.de",
        "time": "Thu Sep 13 09:50:55 2012 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 14 09:57:32 2012 -0700"
      },
      "message": "cgroup: Remove CGROUP_BUILTIN_SUBSYS_COUNT\n\nCGROUP_BUILTIN_SUBSYS_COUNT is used as start index or stop index when\nlooping over the subsys array looking either at the builtin or the\nmodule subsystems. Since all the builtin subsystems have an id which\nis lower then CGROUP_BUILTIN_SUBSYS_COUNT we know that any module will\nhave an id larger than CGROUP_BUILTIN_SUBSYS_COUNT. In short the ids\nare sorted.\n\nWe are about to change id assignment to happen only at compile time\nlater in this series. That means we can\u0027t rely on the above trick\nsince all ids will always be defined at compile time. Furthermore,\nordering the builtin subsystems and the module subsystems is not\nreally necessary.\n\nSo we need a different way to know which subsystem is a builtin or a\nmodule one. We can use the subsys[]-\u003emodule pointer for this. Any\nplace where we need to know if a subsys is module we just check for\nthe pointer. If it is NULL then the subsystem is a builtin one.\n\nWith this we are able to drop the CGROUP_BUILTIN_SUBSYS_COUNT\nenum. Though we need to introduce a temporary placeholder so that we\ndon\u0027t get a compilation error when only CONFIG_CGROUP is selected and\nno single controller. An empty enum definition is not valid. Later in\nthis series we are able to remove the placeholder again.\n\nAnd with this change we get a fix for this:\n\nkernel/cgroup.c: In function ‘cgroup_load_subsys’:\nkernel/cgroup.c:4326:38: warning: array subscript is below array bounds [-Warray-bounds]\n\nwhen CONFIG_CGROUP\u003dy and no built in controller was enabled.\n\nSigned-off-by: Daniel Wagner \u003cdaniel.wagner@bmw-carit.de\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: Neil Horman \u003cnhorman@tuxdriver.com\u003e\nCc: Gao feng \u003cgaofeng@cn.fujitsu.com\u003e\nCc: Jamal Hadi Salim \u003cjhs@mojatatu.com\u003e\nCc: John Fastabend \u003cjohn.r.fastabend@intel.com\u003e\nCc: netdev@vger.kernel.org\nCc: cgroups@vger.kernel.org\n"
    },
    {
      "commit": "03b1cde6b22f625ae832b939bc7379ec1466aec5",
      "tree": "0aecdc872a6ab2a00a8026e1898d4f3492cca87b",
      "parents": [
        "13af07df9b7e49f1987cf36aa048dc6c49d0f93d"
      ],
      "author": {
        "name": "Aristeu Rozanski",
        "email": "aris@redhat.com",
        "time": "Thu Aug 23 16:53:30 2012 -0400"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Aug 24 15:55:33 2012 -0700"
      },
      "message": "cgroup: add xattr support\n\nThis is one of the items in the plumber\u0027s wish list.\n\nFor use cases:\n\n\u003e\u003e What would the use case be for this?\n\u003e\n\u003e Attaching meta information to services, in an easily discoverable\n\u003e way. For example, in systemd we create one cgroup for each service, and\n\u003e could then store data like the main pid of the specific service as an\n\u003e xattr on the cgroup itself. That way we\u0027d have almost all service state\n\u003e in the cgroupfs, which would make it possible to terminate systemd and\n\u003e later restart it without losing any state information. But there\u0027s more:\n\u003e for example, some very peculiar services cannot be terminated on\n\u003e shutdown (i.e. fakeraid DM stuff) and it would be really nice if the\n\u003e services in question could just mark that on their cgroup, by setting an\n\u003e xattr. On the more desktopy side of things there are other\n\u003e possibilities: for example there are plans defining what an application\n\u003e is along the lines of a cgroup (i.e. an app being a collection of\n\u003e processes). With xattrs one could then attach an icon or human readable\n\u003e program name on the cgroup.\n\u003e\n\u003e The key idea is that this would allow attaching runtime meta information\n\u003e to cgroups and everything they model (services, apps, vms), that doesn\u0027t\n\u003e need any complex userspace infrastructure, has good access control\n\u003e (i.e. because the file system enforces that anyway, and there\u0027s the\n\u003e \"trusted.\" xattr namespace), notifications (inotify), and can easily be\n\u003e shared among applications.\n\u003e\n\u003e Lennart\n\nv7:\n- no changes\nv6:\n- remove user xattr namespace, only allow trusted and security\nv5:\n- check for capabilities before setting/removing xattrs\nv4:\n- no changes\nv3:\n- instead of config option, use mount option to enable xattr support\n\nOriginal-patch-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: Lennart Poettering \u003clpoetter@redhat.com\u003e\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Aristeu Rozanski \u003caris@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "6be96a5c905178637ec06a5d456a76b2b304fca3",
      "tree": "06cc22397df498c7e4dbb7195f77d1bc587295e3",
      "parents": [
        "967db0ea65b0bf8507a7643ac8f296c4f2c0a834"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Wed Jun 06 19:12:30 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jun 06 19:12:30 2012 -0700"
      },
      "message": "cgroup: remove hierarchy_mutex\n\nIt was introduced for memcg to iterate cgroup hierarchy without\nholding cgroup_mutex, but soon after that it was replaced with\na lockless way in memcg.\n\nNo one used hierarchy_mutex since that, so remove it.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "86f82d561864e902c70282b6f17cf590c0f34691",
      "tree": "1f4021c8de07899152b00ddce36f09192ee78395",
      "parents": [
        "cbe128e348e5994516304f94865ff90c40c1c5ae"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Apr 10 10:16:36 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Apr 11 09:16:48 2012 -0700"
      },
      "message": "cgroup: remove cgroup_subsys-\u003epopulate()\n\nWith memcg converted, cgroup_subsys-\u003epopulate() doesn\u0027t have any user\nleft.  Remove it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "48ddbe194623ae089cc0576e60363f2d2e85662a",
      "tree": "bf9f9fc29e28b6440c64727f5e0a57a9ccd8ec5d",
      "parents": [
        "28b4c27b8e6bb6d7ff2875281a8484f8898a87ef"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:56 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:56 2012 -0700"
      },
      "message": "cgroup: make css-\u003erefcnt clearing on cgroup removal optional\n\nCurrently, cgroup removal tries to drain all css references.  If there\nare active css references, the removal logic waits and retries\n-\u003epre_detroy() until either all refs drop to zero or removal is\ncancelled.\n\nThis semantics is unusual and adds non-trivial complexity to cgroup\ncore and IMHO is fundamentally misguided in that it couples internal\nimplementation details (references to internal data structure) with\nexternally visible operation (rmdir).  To userland, this is a behavior\npeculiarity which is unnecessary and difficult to expect (css refs is\notherwise invisible from userland), and, to policy implementations,\nthis is an unnecessary restriction (e.g. blkcg wants to hold css refs\nfor caching purposes but can\u0027t as that becomes visible as rmdir hang).\n\nUnfortunately, memcg currently depends on -\u003epre_destroy() retrials and\ncgroup removal vetoing and can\u0027t be immmediately switched to the new\nbehavior.  This patch introduces the new behavior of not waiting for\ncss refs to drain and maintains the old behavior for subsystems which\nhave __DEPRECATED_clear_css_refs set.\n\nOnce, memcg is updated, we can drop the code paths for the old\nbehavior as proposed in the following patch.  Note that the following\npatch is incorrect in that dput work item is in cgroup and may lose\nsome of dputs when multiples css\u0027s are released back-to-back, and\n__css_put() triggers check_for_release() when refcnt reaches 0 instead\nof 1; however, it shows what part can be removed.\n\n  http://thread.gmane.org/gmane.linux.kernel.containers/22559/focus\u003d75251\n\nNote that, in not-too-distant future, cgroup core will start emitting\nwarning messages for subsys which require the old behavior, so please\nget moving.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\n"
    },
    {
      "commit": "28b4c27b8e6bb6d7ff2875281a8484f8898a87ef",
      "tree": "8da3eefc6b98c46a4dbd0fd6e6d6dec6220382df",
      "parents": [
        "79578621b4847afdef48d19a28d00e3b188c37e1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:56 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:56 2012 -0700"
      },
      "message": "cgroup: use negative bias on css-\u003erefcnt to block css_tryget()\n\nWhen a cgroup is about to be removed, cgroup_clear_css_refs() is\ncalled to check and ensure that there are no active css references.\n\nThis is currently achieved by dropping the refcnt to zero iff it has\nonly the base ref.  If all css refs could be dropped to zero, ref\nclearing is successful and CSS_REMOVED is set on all css.  If not, the\nbase ref is restored.  While css ref is zero w/o CSS_REMOVED set, any\ncss_tryget() attempt on it busy loops so that they are atomic\nw.r.t. the whole css ref clearing.\n\nThis does work but dropping and re-instating the base ref is somewhat\nhairy and makes it difficult to add more logic to the put path as\nthere are two of them - the regular css_put() and the reversible base\nref clearing.\n\nThis patch updates css ref clearing such that blocking new\ncss_tryget() and putting the base ref are separate operations.\nCSS_DEACT_BIAS, defined as INT_MIN, is added to css-\u003erefcnt and\ncss_tryget() busy loops while refcnt is negative.  After all css refs\nare deactivated, if they were all one, ref clearing succeeded and\nCSS_REMOVED is set and the base ref is put using the regular\ncss_put(); otherwise, CSS_DEACT_BIAS is subtracted from the refcnts\nand the original postive values are restored.\n\ncss_refcnt() accessor which always returns the unbiased positive\nreference counts is added and used to simplify refcnt usages.  While\nat it, relocate and reformat comments in cgroup_has_css_refs().\n\nThis separates css-\u003erefcnt deactivation and putting the base ref,\nwhich enables the next patch to make ref clearing optional.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\n"
    },
    {
      "commit": "79578621b4847afdef48d19a28d00e3b188c37e1",
      "tree": "d66c0ba245841eefa75a2f79e5cd8e2be09385eb",
      "parents": [
        "05ef1d7c4a5b6d09cadd2b8e9b3c395363d1a89c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:56 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:56 2012 -0700"
      },
      "message": "cgroup: implement cgroup_rm_cftypes()\n\nImplement cgroup_rm_cftypes() which removes an array of cftypes from a\nsubsystem.  It can be called whether the target subsys is attached or\nnot.  cgroup core will remove the specified file from all existing\ncgroups.\n\nThis will be used to improve sub-subsys modularity and will be helpful\nfor unified hierarchy.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\n"
    },
    {
      "commit": "05ef1d7c4a5b6d09cadd2b8e9b3c395363d1a89c",
      "tree": "c63adfca7c1d6a6858cd0cecf6f4eb83775c35d8",
      "parents": [
        "f6ea93723d0049ae5fbbb5292cb10c51d7a80801"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:56 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:56 2012 -0700"
      },
      "message": "cgroup: introduce struct cfent\n\nThis patch adds cfent (cgroup file entry) which is the association\nbetween a cgroup and a file.  This is in-cgroup representation of\nfiles under a cgroup directory.  This simplifies walking walking\ncgroup files and thus cgroup_clear_directory(), which is now\nimplemented in two parts - cgroup_rm_file() and a loop around it.\n\ncgroup_rm_file() will be used to implement cftype removal and cfent is\nscheduled to serve cgroup specific per-file data (e.g. for sysfs-like\n\"sever\" semantics).\n\nv2: - cfe was freed from cgroup_rm_file() which led to use-after-free\n      if the file had openers at the time of removal.  Moved to\n      cgroup_diput().\n\n    - cgroup_clear_directory() triggered WARN_ON_ONCE() if d_subdirs\n      wasn\u0027t empty after removing all files.  This triggered\n      spuriously if some files were open during directory clearing.\n      Removed.\n\nv3: - In cgroup_diput(), WARN_ONCE(!list_empty(\u0026cfe-\u003enode)) could be\n      spuriously triggered for root cgroups because they don\u0027t go\n      through cgroup_clear_directory() on unmount.  Don\u0027t trigger WARN\n      for root cgroups.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\n"
    },
    {
      "commit": "db0416b64977cb0f382175608286cc80c7573e38",
      "tree": "a244be0b7e7467ed89c390997aec6b176de71140",
      "parents": [
        "6bc103498f5fe512928496fc7802d639cc2d1d20"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "message": "cgroup: remove cgroup_add_file[s]()\n\nNo controller is using cgroup_add_files[s]().  Unexport them, and\nconvert cgroup_add_files() to handle NULL entry terminated array\ninstead of taking count explicitly and continue creation on failure\nfor internal use.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\n"
    },
    {
      "commit": "8e3f6541d45e1a002801e56a19530a90f775deba",
      "tree": "5342d7afce759252f5204c7e33283879cca0490d",
      "parents": [
        "b0ca5a84fc3ad8f75bb2b7ac3dc6a77151cd3906"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "message": "cgroup: implement cgroup_add_cftypes() and friends\n\nCurrently, cgroup directories are populated by subsys-\u003epopulate()\ncallback explicitly creating files on each cgroup creation.  This\nlevel of flexibility isn\u0027t needed or desirable.  It provides largely\nunused flexibility which call for abuses while severely limiting what\nthe core layer can do through the lack of structure and conventions.\n\nPer each cgroup file type, the only distinction that cgroup users is\nmaking is whether a cgroup is root or not, which can easily be\nexpressed with flags.\n\nThis patch introduces cgroup_add_cftypes().  These deal with cftypes\ninstead of individual files - controllers indicate that certain types\nof files exist for certain subsystem.  Newly added CFTYPE_*_ON_ROOT\nflags indicate whether a cftype should be excluded or created only on\nthe root cgroup.\n\ncgroup_add_cftypes() can be called any time whether the target\nsubsystem is currently attached or not.  cgroup core will create files\non the existing cgroups as necessary.\n\nAlso, cgroup_subsys-\u003ebase_cftypes is added to ease registration of the\nbase files for the subsystem.  If non-NULL on subsys init, the cftypes\npointed to by -\u003ebase_cftypes are automatically registered on subsys\ninit / load.\n\nFurther patches will convert the existing users and remove the file\nbased interface.  Note that this interface allows dynamic addition of\nfiles to an active controller.  This will be used for sub-controller\nmodularity and unified hierarchy in the longer term.\n\nThis patch implements the new mechanism but doesn\u0027t apply it to any\nuser.\n\nv2: replaced DECLARE_CGROUP_CFTYPES[_COND]() with\n    cgroup_subsys-\u003ebase_cftypes, which works better for cgroup_subsys\n    which is loaded as module.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\n"
    },
    {
      "commit": "b0ca5a84fc3ad8f75bb2b7ac3dc6a77151cd3906",
      "tree": "87dcdec8c3104ed00b34518b4dc1837e8c03d837",
      "parents": [
        "ff4c8d503e2583b485da46d0ec3dcc29639ab889"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:54 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:54 2012 -0700"
      },
      "message": "cgroup: build list of all cgroups under a given cgroupfs_root\n\nBuild a list of all cgroups anchored at cgroupfs_root-\u003eallcg_list and\ngoing through cgroup-\u003eallcg_node.  The list is protected by\ncgroup_mutex and will be used to improve cgroup file handling.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\n"
    },
    {
      "commit": "42aee6c495e07dba7410b863a360db6bb9ec6d66",
      "tree": "d014b2b5c7aa9d1a1f13686fa06699f9f734ee1c",
      "parents": [
        "9f7de8275b46d9d11b1505adbfe6c2bb48df4741"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Mar 21 16:34:21 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:01 2012 -0700"
      },
      "message": "cgroup: revert ss_id_lock to spinlock\n\nCommit c1e2ee2dc436 (\"memcg: replace ss-\u003eid_lock with a rwlock\") has now\nbeen seen to cause the unfair behavior we should have expected from\nconverting a spinlock to an rwlock: softlockup in cgroup_mkdir(), whose\nget_new_cssid() is waiting for the wlock, while there are 19 tasks using\nthe rlock in css_get_next() to get on with their memcg workload (in an\nartificial test, admittedly).  Yet lib/idr.c was made suitable for RCU\nway back: revert that commit, restoring ss-\u003eid_lock to a spinlock.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "761b3ef50e1c2649cffbfa67a4dcb2dcdb7982ed",
      "tree": "67ab6a9a2520811c9c0b4d70d1c19b4bfca16237",
      "parents": [
        "61d1d219c4c0761059236a46867bc49943c4d29d"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Tue Jan 31 13:47:36 2012 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 02 09:20:22 2012 -0800"
      },
      "message": "cgroup: remove cgroup_subsys argument from callbacks\n\nThe argument is not used at all, and it\u0027s not necessary, because\na specific callback handler of course knows which subsys it\nbelongs to.\n\nNow only -\u003epupulate() takes this argument, because the handlers of\nthis callback always call cgroup_add_file()/cgroup_add_files().\n\nSo we reduce a few lines of code, though the shrinking of object size\nis minimal.\n\n 16 files changed, 113 insertions(+), 162 deletions(-)\n\n   text    data     bss     dec     hex filename\n5486240  656987 7039960 13183187         c928d3 vmlinux.o.orig\n5486170  656987 7039960 13183117         c9288d vmlinux.o\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "245282557c49754af3dbcc732316e814340d6bce",
      "tree": "e790dad8b26f273a3509d0a86fb4eec9589e54e7",
      "parents": [
        "a63b9072ea4e32c1fde8b783ccf6e4288414660b"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Fri Jan 20 11:58:43 2012 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jan 20 09:30:08 2012 -0800"
      },
      "message": "cgroup: move struct cgroup_pidlist out from the header file\n\nIt\u0027s internally used only.\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "a63b9072ea4e32c1fde8b783ccf6e4288414660b",
      "tree": "54403c1e791a34472357f643b2cbfec761a41b4b",
      "parents": [
        "dcd6c92267155e70a94b3927bce681ce74b80d1f"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Fri Jan 20 11:58:09 2012 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jan 20 09:30:07 2012 -0800"
      },
      "message": "cgroup: remove cgroup_attach_task_current_cg()\n\nIt\u0027s just a wrapper of cgroup_attach_task_all(), and it\u0027s no longer\nused after commit 87d6a412bd1ed82c14cabd4b408003b23bbd2880\n(vhost: fix attach to cgroups regression)\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "db0c2bf69aa095d4a6de7b1145f29fe9a7c0f6a3",
      "tree": "8f38957c01b18edddd44d49ecc3beeac08a20b4e",
      "parents": [
        "ac69e0928054ff29a5049902fb477f9c7605c773",
        "0d19ea866562e46989412a0676412fa0983c9ce7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 09 12:59:24 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 09 12:59:24 2012 -0800"
      },
      "message": "Merge branch \u0027for-3.3\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup\n\n* \u0027for-3.3\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup: (21 commits)\n  cgroup: fix to allow mounting a hierarchy by name\n  cgroup: move assignement out of condition in cgroup_attach_proc()\n  cgroup: Remove task_lock() from cgroup_post_fork()\n  cgroup: add sparse annotation to cgroup_iter_start() and cgroup_iter_end()\n  cgroup: mark cgroup_rmdir_waitq and cgroup_attach_proc() as static\n  cgroup: only need to check oldcgrp\u003d\u003dnewgrp once\n  cgroup: remove redundant get/put of task struct\n  cgroup: remove redundant get/put of old css_set from migrate\n  cgroup: Remove unnecessary task_lock before fetching css_set on migration\n  cgroup: Drop task_lock(parent) on cgroup_fork()\n  cgroups: remove redundant get/put of css_set from css_set_check_fetched()\n  resource cgroups: remove bogus cast\n  cgroup: kill subsys-\u003ecan_attach_task(), pre_attach() and attach_task()\n  cgroup, cpuset: don\u0027t use ss-\u003epre_attach()\n  cgroup: don\u0027t use subsys-\u003ecan_attach_task() or -\u003eattach_task()\n  cgroup: introduce cgroup_taskset and use it in subsys-\u003ecan_attach(), cancel_attach() and attach()\n  cgroup: improve old cgroup handling in cgroup_attach_proc()\n  cgroup: always lock threadgroup during migration\n  threadgroup: extend threadgroup_lock() to cover exit and exec\n  threadgroup: rename signal-\u003ethreadgroup_fork_lock to -\u003egroup_rwsem\n  ...\n\nFix up conflict in kernel/cgroup.c due to commit e0197aae59e5: \"cgroups:\nfix a css_set not found bug in cgroup_attach_proc\" that already\nmentioned that the bug is fixed (differently) in Tejun\u0027s cgroup\npatchset. This one, in other words.\n"
    },
    {
      "commit": "a5e7ed3287e45f2eafbcf9e7e6fdc5a0191acf40",
      "tree": "4bc526f45eb2e9ab01beca0207f8633a19b963b8",
      "parents": [
        "f9ec80061af2116e9b6298a6334a6f288d7ea878"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jul 26 01:55:55 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:55:03 2012 -0500"
      },
      "message": "cgroup: propagate mode_t\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "494c167cf76d02000adf740c215adc69a824ecc9",
      "tree": "bf7cdf462b62ebf099b965f7bea503df30918c17",
      "parents": [
        "94196f51c1ee5bbad674de28c682b17d78adb8e6"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Dec 12 18:12:22 2011 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Dec 12 18:12:22 2011 -0800"
      },
      "message": "cgroup: kill subsys-\u003ecan_attach_task(), pre_attach() and attach_task()\n\nThese three methods are no longer used.  Kill them.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nAcked-by: Paul Menage \u003cpaul@paulmenage.org\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\n"
    },
    {
      "commit": "2f7ee5691eecb67c8108b92001a85563ea336ac5",
      "tree": "18cf60ea8a463f4a6cd59c68926ba4357ae8ff4c",
      "parents": [
        "134d33737f9015761c3832f6b268fae6274aac7f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Dec 12 18:12:21 2011 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Dec 12 18:12:21 2011 -0800"
      },
      "message": "cgroup: introduce cgroup_taskset and use it in subsys-\u003ecan_attach(), cancel_attach() and attach()\n\nCurrently, there\u0027s no way to pass multiple tasks to cgroup_subsys\nmethods necessitating the need for separate per-process and per-task\nmethods.  This patch introduces cgroup_taskset which can be used to\npass multiple tasks and their associated cgroups to cgroup_subsys\nmethods.\n\nThree methods - can_attach(), cancel_attach() and attach() - are\nconverted to use cgroup_taskset.  This unifies passed parameters so\nthat all methods have access to all information.  Conversions in this\npatchset are identical and don\u0027t introduce any behavior change.\n\n-v2: documentation updated as per Paul Menage\u0027s suggestion.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nAcked-by: Paul Menage \u003cpaul@paulmenage.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\n"
    },
    {
      "commit": "c1e2ee2dc436574880758b3836fc96935b774c32",
      "tree": "aa496a9ba20e06749194faa4dbb14b6046e6b06b",
      "parents": [
        "080d676de095a14ecba14c0b9a91acb5bbb634df"
      ],
      "author": {
        "name": "Andrew Bresticker",
        "email": "abrestic@google.com",
        "time": "Wed Nov 02 13:40:29 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Nov 02 16:07:03 2011 -0700"
      },
      "message": "memcg: replace ss-\u003eid_lock with a rwlock\n\nWhile back-porting Johannes Weiner\u0027s patch \"mm: memcg-aware global\nreclaim\" for an internal effort, we noticed a significant performance\nregression during page-reclaim heavy workloads due to high contention of\nthe ss-\u003eid_lock.  This lock protects idr map, and serializes calls to\nidr_get_next() in css_get_next() (which is used during the memcg hierarchy\nwalk).\n\nSince idr_get_next() is just doing a look up, we need only serialize it\nwith respect to idr_remove()/idr_get_new().  By making the ss-\u003eid_lock a\nrwlock, contention is greatly reduced and performance improves.\n\nTested: cat a 256m file from a ramdisk in a 128m container 50 times on\neach core (one file + container per core) in parallel on a NUMA machine.\nResult is the time for the test to complete in 1 of the containers.\nBoth kernels included Johannes\u0027 memcg-aware global reclaim patches.\n\nBefore rwlock patch: 1710.778s\nAfter rwlock patch: 152.227s\n\nSigned-off-by: Andrew Bresticker \u003cabrestic@google.com\u003e\nCc: Paul Menage \u003cmenage@gmail.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d8bf4ca9ca9576548628344c9725edd3786e90b1",
      "tree": "df338f50a5af6bc3651bd863b79fa91e6b1e9e20",
      "parents": [
        "eb032b9837a958e21ca000358a5bde5e17192ddb"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Fri Jul 08 14:39:41 2011 +0200"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Fri Jul 08 22:21:58 2011 +0200"
      },
      "message": "rcu: treewide: Do not use rcu_read_lock_held when calling rcu_dereference_check\n\nSince ca5ecddf (rcu: define __rcu address space modifier for sparse)\nrcu_dereference_check use rcu_read_lock_held as a part of condition\nautomatically so callers do not have to do that as well.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "a77aea92010acf54ad785047234418d5d68772e2",
      "tree": "c7cb57b62fd02bee2baceb79251923f7caec6139",
      "parents": [
        "d846687d7f84e45f23ecf3846dbb43312a1206dd"
      ],
      "author": {
        "name": "Daniel Lezcano",
        "email": "daniel.lezcano@free.fr",
        "time": "Thu May 26 16:25:23 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 26 17:12:34 2011 -0700"
      },
      "message": "cgroup: remove the ns_cgroup\n\nThe ns_cgroup is an annoying cgroup at the namespace / cgroup frontier and\nleads to some problems:\n\n  * cgroup creation is out-of-control\n  * cgroup name can conflict when pids are looping\n  * it is not possible to have a single process handling a lot of\n    namespaces without falling in a exponential creation time\n  * we may want to create a namespace without creating a cgroup\n\n  The ns_cgroup was replaced by a compatibility flag \u0027clone_children\u0027,\n  where a newly created cgroup will copy the parent cgroup values.\n  The userspace has to manually create a cgroup and add a task to\n  the \u0027tasks\u0027 file.\n\nThis patch removes the ns_cgroup as suggested in the following thread:\n\nhttps://lists.linux-foundation.org/pipermail/containers/2009-June/018616.html\n\nThe \u0027cgroup_clone\u0027 function is removed because it is no longer used.\n\nThis is a userspace-visible change.  Commit 45531757b45c (\"cgroup: notify\nns_cgroup deprecated\") (merged into 2.6.27) caused the kernel to emit a\nprintk warning users that the feature is planned for removal.  Since that\ntime we have heard from XXX users who were affected by this.\n\nSigned-off-by: Daniel Lezcano \u003cdaniel.lezcano@free.fr\u003e\nSigned-off-by: Serge E. Hallyn \u003cserge.hallyn@canonical.com\u003e\nCc: Eric W. Biederman \u003cebiederm@xmission.com\u003e\nCc: Jamal Hadi Salim \u003chadi@cyberus.ca\u003e\nReviewed-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nAcked-by: Paul Menage \u003cmenage@google.com\u003e\nAcked-by: Matt Helsley \u003cmatthltc@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ],
  "next": "f780bdb7c1c73009cb57adcf99ef50027d80bf3c"
}
