)]}'
{
  "log": [
    {
      "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": "46d9be3e5eb01f71fc02653755d970247174b400",
      "tree": "01534c9ebfa5f52a7133e34354d2831fe6704f15",
      "parents": [
        "ce8aa48929449b491149b6c87861ac69cb797a42",
        "cece95dfe5aa56ba99e51b4746230ff0b8542abd"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 29 19:07:40 2013 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 29 19:07:40 2013 -0700"
      },
      "message": "Merge branch \u0027for-3.10\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq\n\nPull workqueue updates from Tejun Heo:\n \"A lot of activities on workqueue side this time.  The changes achieve\n  the followings.\n\n   - WQ_UNBOUND workqueues - the workqueues which are per-cpu - are\n     updated to be able to interface with multiple backend worker pools.\n     This involved a lot of churning but the end result seems actually\n     neater as unbound workqueues are now a lot closer to per-cpu ones.\n\n   - The ability to interface with multiple backend worker pools are\n     used to implement unbound workqueues with custom attributes.\n     Currently the supported attributes are the nice level and CPU\n     affinity.  It may be expanded to include cgroup association in\n     future.  The attributes can be specified either by calling\n     apply_workqueue_attrs() or through /sys/bus/workqueue/WQ_NAME/* if\n     the workqueue in question is exported through sysfs.\n\n     The backend worker pools are keyed by the actual attributes and\n     shared by any workqueues which share the same attributes.  When\n     attributes of a workqueue are changed, the workqueue binds to the\n     worker pool with the specified attributes while leaving the work\n     items which are already executing in its previous worker pools\n     alone.\n\n     This allows converting custom worker pool implementations which\n     want worker attribute tuning to use workqueues.  The writeback pool\n     is already converted in block tree and there are a couple others\n     are likely to follow including btrfs io workers.\n\n   - WQ_UNBOUND\u0027s ability to bind to multiple worker pools is also used\n     to make it NUMA-aware.  Because there\u0027s no association between work\n     item issuer and the specific worker assigned to execute it, before\n     this change, using unbound workqueue led to unnecessary cross-node\n     bouncing and it couldn\u0027t be helped by autonuma as it requires tasks\n     to have implicit node affinity and workers are assigned randomly.\n\n     After these changes, an unbound workqueue now binds to multiple\n     NUMA-affine worker pools so that queued work items are executed in\n     the same node.  This is turned on by default but can be disabled\n     system-wide or for individual workqueues.\n\n     Crypto was requesting NUMA affinity as encrypting data across\n     different nodes can contribute noticeable overhead and doing it\n     per-cpu was too limiting for certain cases and IO throughput could\n     be bottlenecked by one CPU being fully occupied while others have\n     idle cycles.\n\n  While the new features required a lot of changes including\n  restructuring locking, it didn\u0027t complicate the execution paths much.\n  The unbound workqueue handling is now closer to per-cpu ones and the\n  new features are implemented by simply associating a workqueue with\n  different sets of backend worker pools without changing queue,\n  execution or flush paths.\n\n  As such, even though the amount of change is very high, I feel\n  relatively safe in that it isn\u0027t likely to cause subtle issues with\n  basic correctness of work item execution and handling.  If something\n  is wrong, it\u0027s likely to show up as being associated with worker pools\n  with the wrong attributes or OOPS while workqueue attributes are being\n  changed or during CPU hotplug.\n\n  While this creates more backend worker pools, it doesn\u0027t add too many\n  more workers unless, of course, there are many workqueues with unique\n  combinations of attributes.  Assuming everything else is the same,\n  NUMA awareness costs an extra worker pool per NUMA node with online\n  CPUs.\n\n  There are also a couple things which are being routed outside the\n  workqueue tree.\n\n   - block tree pulled in workqueue for-3.10 so that writeback worker\n     pool can be converted to unbound workqueue with sysfs control\n     exposed.  This simplifies the code, makes writeback workers\n     NUMA-aware and allows tuning nice level and CPU affinity via sysfs.\n\n   - The conversion to workqueue means that there\u0027s no 1:1 association\n     between a specific worker, which makes writeback folks unhappy as\n     they want to be able to tell which filesystem caused a problem from\n     backtrace on systems with many filesystems mounted.  This is\n     resolved by allowing work items to set debug info string which is\n     printed when the task is dumped.  As this change involves unifying\n     implementations of dump_stack() and friends in arch codes, it\u0027s\n     being routed through Andrew\u0027s -mm tree.\"\n\n* \u0027for-3.10\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq: (84 commits)\n  workqueue: use kmem_cache_free() instead of kfree()\n  workqueue: avoid false negative WARN_ON() in destroy_workqueue()\n  workqueue: update sysfs interface to reflect NUMA awareness and a kernel param to disable NUMA affinity\n  workqueue: implement NUMA affinity for unbound workqueues\n  workqueue: introduce put_pwq_unlocked()\n  workqueue: introduce numa_pwq_tbl_install()\n  workqueue: use NUMA-aware allocation for pool_workqueues\n  workqueue: break init_and_link_pwq() into two functions and introduce alloc_unbound_pwq()\n  workqueue: map an unbound workqueues to multiple per-node pool_workqueues\n  workqueue: move hot fields of workqueue_struct to the end\n  workqueue: make workqueue-\u003ename[] fixed len\n  workqueue: add workqueue-\u003eunbound_attrs\n  workqueue: determine NUMA node of workers accourding to the allowed cpumask\n  workqueue: drop \u0027H\u0027 from kworker names of unbound worker pools\n  workqueue: add wq_numa_tbl_len and wq_numa_possible_cpumask[]\n  workqueue: move pwq_pool_locking outside of get/put_unbound_pool()\n  workqueue: fix memory leak in apply_workqueue_attrs()\n  workqueue: fix unbound workqueue attrs hashing / comparison\n  workqueue: fix race condition in unbound workqueue free path\n  workqueue: remove pwq_lock which is no longer used\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": "7ef70e48735e17d2be5c8e8f85052842b16b923a",
      "tree": "ed5a6f181441dc96dbda4fcea6e14632d0231d93",
      "parents": [
        "cc20e01cd607282d48f8ea538aba10fa850a4312"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Fri Apr 26 11:58:03 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 26 11:58:03 2013 -0700"
      },
      "message": "cgroup: restore the call to eventfd-\u003epoll()\n\nI mistakenly removed the call to eventfd-\u003epoll() while I was actually\nintending to remove the return value...\n\nCalling evenfd-\u003epoll() will hook cgroup_event_wake() to the poll\nwaitqueue, which will be called to unregister eventfd when rmdir a\ncgroup or close eventfd.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "cc20e01cd607282d48f8ea538aba10fa850a4312",
      "tree": "598ff80edab2c3bb3547dcd109e35ed1291f4454",
      "parents": [
        "712317ad97f41e738e1a19aa0a6392a78a84094e"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Fri Apr 26 11:58:02 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 26 11:58:02 2013 -0700"
      },
      "message": "cgroup: fix use-after-free when umounting cgroupfs\n\nTry:\n  # mount -t cgroup xxx /cgroup\n  # mkdir /cgroup/sub \u0026\u0026 rmdir /cgroup/sub \u0026\u0026 umount /cgroup\n\nAnd you might see this:\n\nida_remove called for id\u003d1 which is not allocated.\n\nIt\u0027s because cgroup_kill_sb() is called to destroy root-\u003ecgroup_ida\nand free cgrp-\u003eroot before ida_simple_removed() is called. What\u0027s\nworse is we\u0027re accessing cgrp-\u003eroot while it has been freed.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.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": "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": "9343862945fdd3dd5cb7648bb24cabe40faa9ad9",
      "tree": "eec00bc0446ff00699dd9a4e3128d888aec93f91",
      "parents": [
        "da1f296fd2bfd5ad3c53d72a1ece593e821cf374"
      ],
      "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": "cgroup: convert cgroupfs_root flag bits to masks and add CGRP_ prefix\n\nThere\u0027s no reason to be using bitops, which tends to be more\ncumbersome, to handle root flags.  Convert them to masks.  Also, as\nthey\u0027ll be moved to include/linux/cgroup.h and it\u0027s generally a good\nidea, add CGRP_ prefix.\n\nNote that flags are assigned from (1 \u003c\u003c 1).  The first bit will be\nused by a flag which will be added 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\n"
    },
    {
      "commit": "da1f296fd2bfd5ad3c53d72a1ece593e821cf374",
      "tree": "775d4cac346481dc310f2174f0a8a2c38ed60ccd",
      "parents": [
        "26d5bbe5ba2073fc7ef9e69a55543b2376f5bad0"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 14 10:32:19 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 14 10:47:02 2013 -0700"
      },
      "message": "cgroup: make cgroup_path() not print double slashes\n\nWhile reimplementing cgroup_path(), 65dff759d2 (\"cgroup: fix\ncgroup_path() vs rename() race\") introduced a bug where the path of a\nnon-root cgroup would have two slahses at the beginning, which is\ncaused by treating the root cgroup which has the name \u0027/\u0027 like\nnon-root cgroups.\n\n $ grep systemd /proc/self/cgroup\n 1:name\u003dsystemd://user/root/1\n\nFix it by special casing root cgroup case and not looping over it in\nthe normal path.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: 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": "415cf07a1c1c65249773330434878ae7bcd92d0f",
      "tree": "2154c7078abde678f7d4fdb9c5f1c10a26ab16df",
      "parents": [
        "84cfb6ab484b442d5115eb3baf9db7d74a3ea626"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Mon Apr 08 14:35:02 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Apr 10 11:07:00 2013 -0700"
      },
      "message": "cgroup: make sure parent won\u0027t be destroyed before its children\n\nSuppose we rmdir a cgroup and there\u0027re still css refs, this cgroup won\u0027t\nbe freed. Then we rmdir the parent cgroup, and the parent is freed\nimmediately due to css ref draining to 0. Now it would be a disaster if\nthe still-alive child cgroup tries to access its parent.\n\nMake sure this won\u0027t happen.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.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": "47cfcd0922454e49f4923b1e2d31a5bf199237c3",
      "tree": "2b257e98a90b584fb8bd04a1ff1619cb27f394ae",
      "parents": [
        "b9777cf8d7c7854c3c38bd6621d993b85c2afcdf"
      ],
      "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: kill cgroup_[un]lock()\n\nNow that locking interface is unexported, there\u0027s no reason to keep\naround these thin wrappers.  Kill them and use mutex operations\ndirectly.\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": "7ae1bad99e27b8838d480a24edf4646a2fc547df",
      "tree": "1e18e174b1d1de2e11be2734fb2d60f928ad95cc",
      "parents": [
        "8cc9934520e7f752fe45d5199664d741ba24a932"
      ],
      "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: relocate cgroup_lock_live_group() and cgroup_attach_task_all()\n\ncgroup_lock_live_group() and cgroup_attach_task() are scheduled to be\nmade static.  Relocate the former and cgroup_attach_task_all() so that\nwe don\u0027t need forward declarations.\n\nThis patch is pure relocation.\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": "1e2ccd1c0f67c3f958d6139de2496787b9a57182",
      "tree": "e7e7748319a985836030c2261d3e5399badda437",
      "parents": [
        "1ae65ae92d77542f81c68269bc2f15bcf1ee4d6a"
      ],
      "author": {
        "name": "Kevin Wilson",
        "email": "wkevils@gmail.com",
        "time": "Mon Apr 01 10:51:37 2013 +0300"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Apr 03 14:04:33 2013 -0700"
      },
      "message": "cgroup: remove unused parameter in cgroup_task_migrate().\n\nThis patch removes unused parameter from cgroup_task_migrate().\n\nSigned-off-by: Kevin Wilson \u003cwkevils@gmail.com\u003e\nAcked-by: Acked-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\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": "3ac1707a13a3da9cfc8f242a15b2fae6df2c5f88",
      "tree": "2697a8fe41fcd9e5b31f5c3582fbfb2cdbdd58bf",
      "parents": [
        "80f36c2a1a612ca419e5b864a7e4808e797d9feb"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Tue Mar 12 15:36:00 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 20 07:50:04 2013 -0700"
      },
      "message": "cgroup: fix an off-by-one bug which may trigger BUG_ON()\n\nThe 3rd parameter of flex_array_prealloc() is the number of elements,\nnot the index of the last element.\n\nThe effect of the bug is, when opening cgroup.procs, a flex array will\nbe allocated and all elements of the array is allocated with\nGFP_KERNEL flag, but the last one is GFP_ATOMIC, and if we fail to\nallocate memory for it, it\u0027ll trigger a BUG_ON().\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "14a40ffccd6163bbcd1d6f32b28a88ffe6149fc6",
      "tree": "eb61e5bf7b64c3e67f3e33fe6b07fde4ee1d4d43",
      "parents": [
        "2e109a2855bf6cf675a8b74dbd89b6492e8def42"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 19 13:45:20 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 19 13:45:20 2013 -0700"
      },
      "message": "sched: replace PF_THREAD_BOUND with PF_NO_SETAFFINITY\n\nPF_THREAD_BOUND was originally used to mark kernel threads which were\nbound to a specific CPU using kthread_bind() and a task with the flag\nset allows cpus_allowed modifications only to itself.  Workqueue is\ncurrently abusing it to prevent userland from meddling with\ncpus_allowed of workqueue workers.\n\nWhat we need is a flag to prevent userland from messing with\ncpus_allowed of certain kernel tasks.  In kernel, anyone can\n(incorrectly) squash the flag, and, for worker-type usages,\nrestricting cpus_allowed modification to the task itself doesn\u0027t\nprovide meaningful extra proection as other tasks can inject work\nitems to the task anyway.\n\nThis patch replaces PF_THREAD_BOUND with PF_NO_SETAFFINITY.\nsched_setaffinity() checks the flag and return -EINVAL if set.\nset_cpus_allowed_ptr() is no longer affected by the flag.\n\nThis will allow simplifying workqueue worker CPU affinity management.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Ingo Molnar \u003cmingo@kernel.org\u003e\nReviewed-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "80f36c2a1a612ca419e5b864a7e4808e797d9feb",
      "tree": "80ec8f4a04ffbfe7675201b1292edbe96a93ea60",
      "parents": [
        "6ee211ad0a22869af81eef10845922ac4dcb2d38"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Tue Mar 12 15:36:00 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 12 15:36:00 2013 -0700"
      },
      "message": "cgroup: remove useless code in cgroup_write_event_control()\n\neventfd_poll() never returns POLLHUP.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "6ee211ad0a22869af81eef10845922ac4dcb2d38",
      "tree": "7123b4fd50e0b67c7daf8d243f8b2542eea84e86",
      "parents": [
        "d7eeac1913ff86a17f891cb4b73f03d4b94907d0"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Tue Mar 12 15:36:00 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 12 15:36:00 2013 -0700"
      },
      "message": "cgroup: don\u0027t bother to resize pid array\n\nWhen we open cgroup.procs, we\u0027ll allocate an buffer and store all tasks\u0027\ntgid in it, and then duplicate entries will be stripped. If that results\nin a much smaller pid list, we\u0027ll re-allocate a smaller buffer.\n\nBut we\u0027ve already sucessfully allocated memory and reading the procs\nfile is a short period and the memory will be freed very soon, so why\nbother to re-allocate memory.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "d7eeac1913ff86a17f891cb4b73f03d4b94907d0",
      "tree": "1e44fde86b626dbeb7c27f007eeebce7d47ef206",
      "parents": [
        "6dc01181eac16192dc4a5d1b310b78e2e97c003c"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Tue Mar 12 15:35:59 2013 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 12 15:35:59 2013 -0700"
      },
      "message": "cgroup: hold cgroup_mutex before calling css_offline()\n\ncpuset no longer nests cgroup_mutex inside cpu_hotplug lock, so\nwe don\u0027t have to release cgroup_mutex before calling css_offline().\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "6dc01181eac16192dc4a5d1b310b78e2e97c003c",
      "tree": "d9663da8b5c3f413a1bdf3e92790aaa7f5fc4298",
      "parents": [
        "e7b2dcc52b0e2d598a469f01cc460ccdde6869f2"
      ],
      "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 unused variables in cgroup_destroy_locked()\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": "f50daa704f36a6544a902c52b6cf37b0493dfc5d",
      "tree": "157d40fe53c6cde3aa2c2644b35dbe687e547dcc",
      "parents": [
        "f440d98f8ebab02a768c1de17395e4239af9a97d"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Fri Mar 01 15:06:07 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 04 10:04:54 2013 -0800"
      },
      "message": "cgroup: no need to check css refs for release notification\n\nWe no longer fail rmdir() when there\u0027re still css refs, so we don\u0027t\nneed to check css refs in check_for_release().\n\nThis also voids a bug. cgroup_has_css_refs() accesses subsys[i]\nwithout cgroup_mutex, so it can race with cgroup_unload_subsys().\n\ncgroup_has_css_refs()\n...\n  if (ss \u003d\u003d NULL || ss-\u003eroot !\u003d cgrp-\u003eroot)\n\nif ss pointers to net_cls_subsys, and cls_cgroup module is unloaded\nright after the former check but before the latter, the memory that\nnet_cls_subsys resides has become invalid.\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": "b67bfe0d42cac56c512dd5da4b1b347a23f4b70a",
      "tree": "3d465aea12b97683f26ffa38eba8744469de9997",
      "parents": [
        "1e142b29e210b5dfb2deeb6ce2210b60af16d2a6"
      ],
      "author": {
        "name": "Sasha Levin",
        "email": "sasha.levin@oracle.com",
        "time": "Wed Feb 27 17:06:00 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 27 19:10:24 2013 -0800"
      },
      "message": "hlist: drop the node parameter from iterators\n\nI\u0027m not sure why, but the hlist for each entry iterators were conceived\n\n        list_for_each_entry(pos, head, member)\n\nThe hlist ones were greedy and wanted an extra parameter:\n\n        hlist_for_each_entry(tpos, pos, head, member)\n\nWhy did they need an extra pos parameter? I\u0027m not quite sure. Not only\nthey don\u0027t really need it, it also prevents the iterator from looking\nexactly like the list iterator, which is unfortunate.\n\nBesides the semantic patch, there was some manual work required:\n\n - Fix up the actual hlist iterators in linux/list.h\n - Fix up the declaration of other iterators based on the hlist ones.\n - A very small amount of places were using the \u0027node\u0027 parameter, this\n was modified to use \u0027obj-\u003emember\u0027 instead.\n - Coccinelle didn\u0027t handle the hlist_for_each_entry_safe iterator\n properly, so those had to be fixed up manually.\n\nThe semantic patch which is mostly the work of Peter Senna Tschudin is here:\n\n@@\niterator name hlist_for_each_entry, hlist_for_each_entry_continue, hlist_for_each_entry_from, hlist_for_each_entry_rcu, hlist_for_each_entry_rcu_bh, hlist_for_each_entry_continue_rcu_bh, for_each_busy_worker, ax25_uid_for_each, ax25_for_each, inet_bind_bucket_for_each, sctp_for_each_hentry, sk_for_each, sk_for_each_rcu, sk_for_each_from, sk_for_each_safe, sk_for_each_bound, hlist_for_each_entry_safe, hlist_for_each_entry_continue_rcu, nr_neigh_for_each, nr_neigh_for_each_safe, nr_node_for_each, nr_node_for_each_safe, for_each_gfn_indirect_valid_sp, for_each_gfn_sp, for_each_host;\n\ntype T;\nexpression a,c,d,e;\nidentifier b;\nstatement S;\n@@\n\n-T b;\n    \u003c+... when !\u003d b\n(\nhlist_for_each_entry(a,\n- b,\nc, d) S\n|\nhlist_for_each_entry_continue(a,\n- b,\nc) S\n|\nhlist_for_each_entry_from(a,\n- b,\nc) S\n|\nhlist_for_each_entry_rcu(a,\n- b,\nc, d) S\n|\nhlist_for_each_entry_rcu_bh(a,\n- b,\nc, d) S\n|\nhlist_for_each_entry_continue_rcu_bh(a,\n- b,\nc) S\n|\nfor_each_busy_worker(a, c,\n- b,\nd) S\n|\nax25_uid_for_each(a,\n- b,\nc) S\n|\nax25_for_each(a,\n- b,\nc) S\n|\ninet_bind_bucket_for_each(a,\n- b,\nc) S\n|\nsctp_for_each_hentry(a,\n- b,\nc) S\n|\nsk_for_each(a,\n- b,\nc) S\n|\nsk_for_each_rcu(a,\n- b,\nc) S\n|\nsk_for_each_from\n-(a, b)\n+(a)\nS\n+ sk_for_each_from(a) S\n|\nsk_for_each_safe(a,\n- b,\nc, d) S\n|\nsk_for_each_bound(a,\n- b,\nc) S\n|\nhlist_for_each_entry_safe(a,\n- b,\nc, d, e) S\n|\nhlist_for_each_entry_continue_rcu(a,\n- b,\nc) S\n|\nnr_neigh_for_each(a,\n- b,\nc) S\n|\nnr_neigh_for_each_safe(a,\n- b,\nc, d) S\n|\nnr_node_for_each(a,\n- b,\nc) S\n|\nnr_node_for_each_safe(a,\n- b,\nc, d) S\n|\n- for_each_gfn_sp(a, c, d, b) S\n+ for_each_gfn_sp(a, c, d) S\n|\n- for_each_gfn_indirect_valid_sp(a, c, d, b) S\n+ for_each_gfn_indirect_valid_sp(a, c, d) S\n|\nfor_each_host(a,\n- b,\nc) S\n|\nfor_each_host_safe(a,\n- b,\nc, d) S\n|\nfor_each_mesh_entry(a,\n- b,\nc, d) S\n)\n    ...+\u003e\n\n[akpm@linux-foundation.org: drop bogus change from net/ipv4/raw.c]\n[akpm@linux-foundation.org: drop bogus hunk from net/ipv6/raw.c]\n[akpm@linux-foundation.org: checkpatch fixes]\n[akpm@linux-foundation.org: fix warnings]\n[akpm@linux-foudnation.org: redo intrusive kvm changes]\nTested-by: Peter Senna Tschudin \u003cpeter.senna@gmail.com\u003e\nAcked-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Sasha Levin \u003csasha.levin@oracle.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Marcelo Tosatti \u003cmtosatti@redhat.com\u003e\nCc: Gleb Natapov \u003cgleb@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d228d9ec2c9a119ce15c6446ebeec05786ab3287",
      "tree": "42ea38da991b681326ce20736dbae945e796c43d",
      "parents": [
        "54924ea33f3ba702243ba4ab068d7d2852db8098"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 27 17:04:54 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 27 19:10:19 2013 -0800"
      },
      "message": "cgroup: convert to idr_alloc()\n\nConvert to the much saner new idr interface.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c897ff68beec97768c31f9de97de93f77ff2d87e",
      "tree": "662fb6102cdbe5c21905c588c6f867add374619d",
      "parents": [
        "644e1b90ef06611268b48a0a8d14a0ab990ab3f4"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 27 17:03:49 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 27 19:10:14 2013 -0800"
      },
      "message": "cgroup: don\u0027t use idr_remove_all()\n\nidr_destroy() can destroy idr by itself and idr_remove_all() is being\ndeprecated.  Drop its usage.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d895cb1af15c04c522a25c79cc429076987c089b",
      "tree": "895dc9157e28f603d937a58be664e4e440d5530c",
      "parents": [
        "9626357371b519f2b955fef399647181034a77fe",
        "d3d009cb965eae7e002ea5badf603ea8f4c34915"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 26 20:16:07 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 26 20:16:07 2013 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs\n\nPull vfs pile (part one) from Al Viro:\n \"Assorted stuff - cleaning namei.c up a bit, fixing -\u003ed_name/-\u003ed_parent\n  locking violations, etc.\n\n  The most visible changes here are death of FS_REVAL_DOT (replaced with\n  \"has -\u003ed_weak_revalidate()\") and a new helper getting from struct file\n  to inode.  Some bits of preparation to xattr method interface changes.\n\n  Misc patches by various people sent this cycle *and* ocfs2 fixes from\n  several cycles ago that should\u0027ve been upstream right then.\n\n  PS: the next vfs pile will be xattr stuff.\"\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (46 commits)\n  saner proc_get_inode() calling conventions\n  proc: avoid extra pde_put() in proc_fill_super()\n  fs: change return values from -EACCES to -EPERM\n  fs/exec.c: make bprm_mm_init() static\n  ocfs2/dlm: use GFP_ATOMIC inside a spin_lock\n  ocfs2: fix possible use-after-free with AIO\n  ocfs2: Fix oops in ocfs2_fast_symlink_readpage() code path\n  get_empty_filp()/alloc_file() leave both -\u003ef_pos and -\u003ef_version zero\n  target: writev() on single-element vector is pointless\n  export kernel_write(), convert open-coded instances\n  fs: encode_fh: return FILEID_INVALID if invalid fid_type\n  kill f_vfsmnt\n  vfs: kill FS_REVAL_DOT by adding a d_weak_revalidate dentry op\n  nfsd: handle vfs_getattr errors in acl protocol\n  switch vfs_getattr() to struct path\n  default SET_PERSONALITY() in linux/elf.h\n  ceph: prepopulate inodes only when request is aborted\n  d_hash_and_lookup(): export, switch open-coded instances\n  9p: switch v9fs_set_create_acl() to inode+fid, do it before d_instantiate()\n  9p: split dropping the acls from v9fs_set_create_acl()\n  ...\n"
    },
    {
      "commit": "496ad9aa8ef448058e36ca7a787c61f2e63f0f54",
      "tree": "8f4abde793cd7db5bb8fde6d27ebcacd0e54379a",
      "parents": [
        "57eccb830f1cc93d4b506ba306d8dfa685e0c88f"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jan 23 17:07:38 2013 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Feb 22 23:31:31 2013 -0500"
      },
      "message": "new helper: file_inode(file)\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f169007b2773f285e098cb84c74aac0154d65ff7",
      "tree": "6b295320c25b9fe8c1e4e94fcc35570134ebb8be",
      "parents": [
        "810cbee4fad570ff167132d4ecf247d99c48f71d"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Mon Feb 18 14:13:35 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 18 09:31:35 2013 -0800"
      },
      "message": "cgroup: fail if monitored file and event_control are in different cgroup\n\nIf we pass fd of memory.usage_in_bytes of cgroup A to cgroup.event_control\nof cgroup B, then we won\u0027t get memory usage notification from A but B!\n\nWhat\u0027s worse, if A and B are in different mount hierarchy, we\u0027ll end up\naccessing NULL pointer!\n\nDisallow this kind of invalid usage.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "810cbee4fad570ff167132d4ecf247d99c48f71d",
      "tree": "2806f56a033f43b17ad2c547b2153941c0e77f40",
      "parents": [
        "63f43f55c9bbc14f76b582644019b8a07dc8219a"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Mon Feb 18 18:56:14 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 18 09:17:24 2013 -0800"
      },
      "message": "cgroup: fix cgroup_rmdir() vs close(eventfd) race\n\ncommit 205a872bd6f9a9a09ef035ef1e90185a8245cc58 (\"cgroup: fix lockdep\nwarning for event_control\") solved a deadlock by introducing a new\nbug.\n\nMove cgrp-\u003eevent_list to a temporary list doesn\u0027t mean you can traverse\nthis list locklessly, because at the same time cgroup_event_wake() can\nbe called and remove the event from the list. The result of this race\nis disastrous.\n\nWe adopt the way how kvm irqfd code implements race-free event removal,\nwhich is now described in the comments in cgroup_event_wake().\n\nv3:\n- call eventfd_signal() no matter it\u0027s eventfd close or cgroup removal\nthat removes the cgroup event.\n\nAcked-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "71b5707e119653039e6e95213f00479668c79b75",
      "tree": "cb0dfe84c3b8ec46efce2aa4185342a3a75cc3a1",
      "parents": [
        "9ed8a659703876a9fe96ab86d1b296c2f0084242"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Thu Jan 24 14:43:28 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 18 09:08:10 2013 -0800"
      },
      "message": "cgroup: fix exit() vs rmdir() race\n\nIn cgroup_exit() put_css_set_taskexit() is called without any lock,\nwhich might lead to accessing a freed cgroup:\n\nthread1                           thread2\n---------------------------------------------\nexit()\n  cgroup_exit()\n    put_css_set_taskexit()\n      atomic_dec(cgrp-\u003ecount);\n                                   rmdir();\n      /* not safe !! */\n      check_for_release(cgrp);\n\nrcu_read_lock() can be used to make sure the cgroup is alive.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "9ed8a659703876a9fe96ab86d1b296c2f0084242",
      "tree": "03db3def6303814681f19412c524b3951ccde242",
      "parents": [
        "be44562613851235d801d41d5b3976dc4333f622"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Thu Jan 24 14:32:02 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jan 24 12:05:18 2013 -0800"
      },
      "message": "cgroup: remove bogus comments in cgroup_diput()\n\nSince commit 48ddbe194623ae089cc0576e60363f2d2e85662a\n(\"cgroup: make css-\u003erefcnt clearing on cgroup removal optional\"),\neach css holds a ref on cgroup\u0027s dentry, so cgroup_diput() won\u0027t be\ncalled until all css\u0027 refs go down to 0, which invalids the comments.\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": "86a3db5643c7d29bb36ca85c7a4bb67ad4d88d77",
      "tree": "62fb73cc15fbcb751ee434a7bd9d1546851a4556",
      "parents": [
        "2a73991b76cbd38c4a0c6704449ccc08c89c3ff3"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Thu Jan 24 14:31:27 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jan 24 12:05:18 2013 -0800"
      },
      "message": "cgroup: remove duplicate RCU free on struct cgroup\n\nWhen destroying a cgroup, though in cgroup_diput() we\u0027ve called\nsynchronize_rcu(), we then still have to free it via call_rcu().\n\nThe story is, long ago to fix a race between reading /proc/sched_debug\nand freeing cgroup, the code was changed to utilize call_rcu(). See\ncommit a47295e6bc42ad35f9c15ac66f598aa24debd4e2 (\"cgroups: make\ncgroup_path() RCU-safe\")\n\nAs we\u0027ve fixed cpu cgroup that cpu_cgroup_offline_css() is used\nto unregister a task_group so there won\u0027t be concurrent access\nto this task_group after synchronize_rcu() in diput(). Now we can\njust kfree(cgrp).\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "fe1c06ca7523baa668c1eaf1e1016fa64753c32e",
      "tree": "25a86fc2be7a9c155bb490332696b4228964207d",
      "parents": [
        "b5d646f5d5a135064232ff3a140a47a5b84bc911"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Thu Jan 24 14:30:22 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jan 24 12:05:17 2013 -0800"
      },
      "message": "cgroup: initialize cgrp-\u003edentry before css_alloc()\n\nWith this change, we\u0027re guaranteed that cgroup_path() won\u0027t see NULL\ncgrp-\u003edentry, and thus we can remove the NULL check in it.\n\n(Well, it\u0027s not strictly true, because dummptop.dentry is always NULL\n but we already handle that separately.)\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "b5d646f5d5a135064232ff3a140a47a5b84bc911",
      "tree": "5fc28dda2515b0c7eede54ab0a687d7a9714240f",
      "parents": [
        "2739d3cce9816805fe26774fea2527d5b16e924d"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Thu Jan 24 14:43:51 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jan 24 10:40:05 2013 -0800"
      },
      "message": "cgroup: remove a NULL check in cgroup_exit()\n\ninit_task.cgroups is initialized at boot phase, and whenver a ask\nis forked, it\u0027s cgroups pointer is inherited from its parent, and\nit\u0027s never set to NULL afterwards.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "2739d3cce9816805fe26774fea2527d5b16e924d",
      "tree": "de9fa4a5d6090835a551cea82c09a146d391f37e",
      "parents": [
        "130e3695a3edf6bf21464f2826720a79a6afdee0"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Mon Jan 21 18:18:33 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jan 22 16:29:07 2013 -0800"
      },
      "message": "cgroup: fix bogus kernel warnings when cgroup_create() failed\n\nIf cgroup_create() failed and cgroup_destroy_locked() is called to\ndo cleanup, we\u0027ll see a bunch of warnings:\n\ncgroup_addrm_files: failed to remove 2MB.limit_in_bytes, err\u003d-2\ncgroup_addrm_files: failed to remove 2MB.usage_in_bytes, err\u003d-2\ncgroup_addrm_files: failed to remove 2MB.max_usage_in_bytes, err\u003d-2\ncgroup_addrm_files: failed to remove 2MB.failcnt, err\u003d-2\ncgroup_addrm_files: failed to remove prioidx, err\u003d-2\ncgroup_addrm_files: failed to remove ifpriomap, err\u003d-2\n...\n\nWe failed to remove those files, because cgroup_create() has failed\nbefore creating those cgroup files.\n\nTo fix this, we simply don\u0027t warn if cgroup_rm_file() can\u0027t find the\ncft entry.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "130e3695a3edf6bf21464f2826720a79a6afdee0",
      "tree": "f2a38543101c92653b399520683f91e317617593",
      "parents": [
        "5d65bc0ca1bceb73204dab943922ba3c83276a8c"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Mon Jan 14 17:24:18 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jan 14 10:49:39 2013 -0800"
      },
      "message": "cgroup: remove synchronize_rcu() from rebind_subsystems()\n\nNothing\u0027s protected by RCU in rebind_subsystems(), and I can\u0027t think\nof a reason why it is needed.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "5d65bc0ca1bceb73204dab943922ba3c83276a8c",
      "tree": "3ebf35a0a034eb4f8a564d71c46ad7de1fdffcfa",
      "parents": [
        "0ac801fe07374148714b5ef53df90ac5b1673c0c"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Mon Jan 14 17:23:26 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jan 14 10:44:42 2013 -0800"
      },
      "message": "cgroup: remove synchronize_rcu() from cgroup_attach_{task|proc}()\n\nThese 2 syncronize_rcu()s make attaching a task to a cgroup\nquite slow, and it can\u0027t be ignored in some situations.\n\nA real case from Colin Cross: Android uses cgroups heavily to\nmanage thread priorities, putting threads in a background group\nwith reduced cpu.shares when they are not visible to the user,\nand in a foreground group when they are. Some RPCs from foreground\nthreads to background threads will temporarily move the background\nthread into the foreground group for the duration of the RPC.\nThis results in many calls to cgroup_attach_task.\n\nIn cgroup_attach_task() it\u0027s task-\u003ecgroups that is protected by RCU,\nand put_css_set() calls kfree_rcu() to free it.\n\nIf we remove this synchronize_rcu(), there can be threads in RCU-read\nsections accessing their old cgroup via current-\u003ecgroups with\nconcurrent rmdir operation, but this is safe.\n\n # time for ((i\u003d0; i\u003c50; i++)) { echo $$ \u003e /mnt/sub/tasks; echo $$ \u003e /mnt/tasks; }\n\nreal    0m2.524s\nuser    0m0.008s\nsys     0m0.004s\n\nWith this patch:\n\nreal    0m0.004s\nuser    0m0.004s\nsys     0m0.000s\n\ntj: These synchronize_rcu()s are utterly confused.  synchornize_rcu()\n    necessarily has to come between two operations to guarantee that\n    the changes made by the former operation are visible to all rcu\n    readers before proceeding to the latter operation.  Here,\n    synchornize_rcu() are at the end of attach operations with nothing\n    beyond it.  Its only effect would be delaying completion of\n    write(2) to sysfs tasks/procs files until all rcu readers see the\n    change, which doesn\u0027t mean anything.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Colin Cross \u003cccross@google.com\u003e\n"
    },
    {
      "commit": "0ac801fe07374148714b5ef53df90ac5b1673c0c",
      "tree": "aad528311f4d876c0b8e3750d9cb7b0e072b2935",
      "parents": [
        "799105d514384b80cbe3182dbcb4ed30aa07e1f5"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Thu Jan 10 11:49:27 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jan 10 12:10:31 2013 -0800"
      },
      "message": "cgroup: use new hashtable implementation\n\nSwitch cgroup to use the new hashtable implementation. No functional changes.\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": "848b81415c42ff3dc9a4204749087b015c37ef66",
      "tree": "391da3a73aea48632248220d2d6b8d45a88f7eae",
      "parents": [
        "992956189de58cae9f2be40585bc25105cd7c5ad",
        "6fd59a83b9261fa53eaf98fb5514abba504a3ea3"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 17 20:58:12 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 17 20:58:12 2012 -0800"
      },
      "message": "Merge branch \u0027akpm\u0027 (Andrew\u0027s patch-bomb)\n\nMerge misc patches from Andrew Morton:\n \"Incoming:\n\n   - lots of misc stuff\n\n   - backlight tree updates\n\n   - lib/ updates\n\n   - Oleg\u0027s percpu-rwsem changes\n\n   - checkpatch\n\n   - rtc\n\n   - aoe\n\n   - more checkpoint/restart support\n\n  I still have a pile of MM stuff pending - Pekka should be merging\n  later today after which that is good to go.  A number of other things\n  are twiddling thumbs awaiting maintainer merges.\"\n\n* emailed patches from Andrew Morton \u003cakpm@linux-foundation.org\u003e: (180 commits)\n  scatterlist: don\u0027t BUG when we can trivially return a proper error.\n  docs: update documentation about /proc/\u003cpid\u003e/fdinfo/\u003cfd\u003e fanotify output\n  fs, fanotify: add @mflags field to fanotify output\n  docs: add documentation about /proc/\u003cpid\u003e/fdinfo/\u003cfd\u003e output\n  fs, notify: add procfs fdinfo helper\n  fs, exportfs: add exportfs_encode_inode_fh() helper\n  fs, exportfs: escape nil dereference if no s_export_op present\n  fs, epoll: add procfs fdinfo helper\n  fs, eventfd: add procfs fdinfo helper\n  procfs: add ability to plug in auxiliary fdinfo providers\n  tools/testing/selftests/kcmp/kcmp_test.c: print reason for failure in kcmp_test\n  breakpoint selftests: print failure status instead of cause make error\n  kcmp selftests: print fail status instead of cause make error\n  kcmp selftests: make run_tests fix\n  mem-hotplug selftests: print failure status instead of cause make error\n  cpu-hotplug selftests: print failure status instead of cause make error\n  mqueue selftests: print failure status instead of cause make error\n  vm selftests: print failure status instead of cause make error\n  ubifs: use prandom_bytes\n  mtd: nandsim: use prandom_bytes\n  ...\n"
    },
    {
      "commit": "8ec7d50f1ed2b072d23ce810f86df09ee0568d4b",
      "tree": "913675a8d7d167a29e5d9dac4f16b6dfa0746bb8",
      "parents": [
        "66d93341b507185d6934756fb6f6b69b42ff43e4"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Mon Dec 17 15:59:36 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 17 17:15:12 2012 -0800"
      },
      "message": "kernel: remove reference to feature-removal-schedule.txt\n\nIn commit 9c0ece069b32 (\"Get rid of Documentation/feature-removal.txt\"),\nLinus removed feature-removal-schedule.txt from Documentation, but there\nis still some reference to this file.  So remove them.\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6a2b60b17b3e48a418695a94bd2420f6ab32e519",
      "tree": "54b7792fa68b8890f710fa6398b6ba8626a039a8",
      "parents": [
        "9228ff90387e276ad67b10c0eb525c9d6a57d5e9",
        "98f842e675f96ffac96e6c50315790912b2812be"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 17 15:44:47 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 17 15:44:47 2012 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace\n\nPull user namespace changes from Eric Biederman:\n \"While small this set of changes is very significant with respect to\n  containers in general and user namespaces in particular.  The user\n  space interface is now complete.\n\n  This set of changes adds support for unprivileged users to create user\n  namespaces and as a user namespace root to create other namespaces.\n  The tyranny of supporting suid root preventing unprivileged users from\n  using cool new kernel features is broken.\n\n  This set of changes completes the work on setns, adding support for\n  the pid, user, mount namespaces.\n\n  This set of changes includes a bunch of basic pid namespace\n  cleanups/simplifications.  Of particular significance is the rework of\n  the pid namespace cleanup so it no longer requires sending out\n  tendrils into all kinds of unexpected cleanup paths for operation.  At\n  least one case of broken error handling is fixed by this cleanup.\n\n  The files under /proc/\u003cpid\u003e/ns/ have been converted from regular files\n  to magic symlinks which prevents incorrect caching by the VFS,\n  ensuring the files always refer to the namespace the process is\n  currently using and ensuring that the ptrace_mayaccess permission\n  checks are always applied.\n\n  The files under /proc/\u003cpid\u003e/ns/ have been given stable inode numbers\n  so it is now possible to see if different processes share the same\n  namespaces.\n\n  Through the David Miller\u0027s net tree are changes to relax many of the\n  permission checks in the networking stack to allowing the user\n  namespace root to usefully use the networking stack.  Similar changes\n  for the mount namespace and the pid namespace are coming through my\n  tree.\n\n  Two small changes to add user namespace support were commited here adn\n  in David Miller\u0027s -net tree so that I could complete the work on the\n  /proc/\u003cpid\u003e/ns/ files in this tree.\n\n  Work remains to make it safe to build user namespaces and 9p, afs,\n  ceph, cifs, coda, gfs2, ncpfs, nfs, nfsd, ocfs2, and xfs so the\n  Kconfig guard remains in place preventing that user namespaces from\n  being built when any of those filesystems are enabled.\n\n  Future design work remains to allow root users outside of the initial\n  user namespace to mount more than just /proc and /sys.\"\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace: (38 commits)\n  proc: Usable inode numbers for the namespace file descriptors.\n  proc: Fix the namespace inode permission checks.\n  proc: Generalize proc inode allocation\n  userns: Allow unprivilged mounts of proc and sysfs\n  userns: For /proc/self/{uid,gid}_map derive the lower userns from the struct file\n  procfs: Print task uids and gids in the userns that opened the proc file\n  userns: Implement unshare of the user namespace\n  userns: Implent proc namespace operations\n  userns: Kill task_user_ns\n  userns: Make create_new_namespaces take a user_ns parameter\n  userns: Allow unprivileged use of setns.\n  userns: Allow unprivileged users to create new namespaces\n  userns: Allow setting a userns mapping to your current uid.\n  userns: Allow chown and setgid preservation\n  userns: Allow unprivileged users to create user namespaces.\n  userns: Ignore suid and sgid on binaries if the uid or gid can not be mapped\n  userns: fix return value on mntns_install() failure\n  vfs: Allow unprivileged manipulation of the mount namespace.\n  vfs: Only support slave subtrees across different user namespaces\n  vfs: Add a user namespace reference from struct mnt_namespace\n  ...\n"
    },
    {
      "commit": "f33fddc2b9573d8359f1007d4bbe5cd587a0c093",
      "tree": "a970a2cd9d59ed0bc80eea8e9392978c38517772",
      "parents": [
        "7083d0378a1746f2b45729cae494c6b92e75d73f"
      ],
      "author": {
        "name": "Gao feng",
        "email": "gaofeng@cn.fujitsu.com",
        "time": "Thu Dec 06 14:38:57 2012 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Dec 06 08:58:11 2012 -0800"
      },
      "message": "cgroup_rm_file: don\u0027t delete the uncreated files\n\nin cgroup_add_file,when creating files for cgroup,\nsome of creation may be skipped. So we need to avoid\ndeleting these uncreated files in cgroup_rm_file,\notherwise the warning msg will be triggered.\n\n\"cgroup_addrm_files: failed to remove memory_pressure_enabled, err\u003d-2\"\n\nSigned-off-by: Gao feng \u003cgaofeng@cn.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@redhat.com\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "7083d0378a1746f2b45729cae494c6b92e75d73f",
      "tree": "bc2a732ffe1e9b4337a55b3fb7cc215a27159053",
      "parents": [
        "879a3d9dbbde823ac77d39131e7a287f31b8296f"
      ],
      "author": {
        "name": "Gao feng",
        "email": "gaofeng@cn.fujitsu.com",
        "time": "Mon Dec 03 09:28:18 2012 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Dec 03 08:33:11 2012 -0800"
      },
      "message": "cgroup: remove subsystem files when remounting cgroup\n\ncgroup_clear_directroy is called by cgroup_d_remove_dir\nand cgroup_remount.\n\nwhen we call cgroup_remount to remount the cgroup,the subsystem\nmay be unlinked from cgroupfs_root-\u003esubsys_list in rebind_subsystem,this\nsubsystem\u0027s files will not be removed in cgroup_clear_directroy.\nAnd the system will panic when we try to access these files.\n\nthis patch removes subsystems\u0027s files before rebind_subsystems,\nif rebind_subsystems failed, repopulate these removed files.\n\nWith help from Tejun.\n\nSigned-off-by: Gao feng \u003cgaofeng@cn.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "879a3d9dbbde823ac77d39131e7a287f31b8296f",
      "tree": "081a858a5d37325fc3210180c34c1f79efbdfbae",
      "parents": [
        "1f869e8711d18aaf6e2979922bc9377ad394b82f"
      ],
      "author": {
        "name": "Gao feng",
        "email": "gaofeng@cn.fujitsu.com",
        "time": "Sat Dec 01 00:21:28 2012 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 30 11:44:12 2012 -0800"
      },
      "message": "cgroup: use cgroup_addrm_files() in cgroup_clear_directory()\n\ncgroup_clear_directory() incorrectly invokes cgroup_rm_file() on each\ncftset of the target subsystems, which only removes the first file of\neach set.  This leaves dangling files after subsystems are removed\nfrom a cgroup root via remount.\n\nUse cgroup_addrm_files() to remove all files of target subsystems.\n\ntj: Move cgroup_addrm_files() prototype decl upwards next to other\n    global declarations.  Commit message updated.\n\nSigned-off-by: Gao feng \u003cgaofeng@cn.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "1f869e8711d18aaf6e2979922bc9377ad394b82f",
      "tree": "b6da5d097987c745d6ff970efefec2225ca85bb5",
      "parents": [
        "9718ceb3431acdeee9bdec5c18e18266333970aa"
      ],
      "author": {
        "name": "Glauber Costa",
        "email": "glommer@parallels.com",
        "time": "Fri Nov 30 17:31:23 2012 +0400"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 30 07:11:07 2012 -0800"
      },
      "message": "cgroup: warn about broken hierarchies only after css_online\n\nIf everything goes right, it shouldn\u0027t really matter if we are spitting\nthis warning after css_alloc or css_online. If we fail between then,\nthere are some ill cases where we would previously see the message and\nnow we won\u0027t (like if the files fail to be created).\n\nI believe it really shouldn\u0027t matter: this message is intended in spirit\nto be shown when creation succeeds, but with insane settings.\n\nSigned-off-by: Glauber Costa \u003cglommer@parallels.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "9718ceb3431acdeee9bdec5c18e18266333970aa",
      "tree": "5f8cf33738076409cf0c311100b2972c0571ec27",
      "parents": [
        "205a872bd6f9a9a09ef035ef1e90185a8245cc58"
      ],
      "author": {
        "name": "Greg Thelen",
        "email": "gthelen@google.com",
        "time": "Wed Nov 28 13:50:45 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Nov 28 13:52:14 2012 -0800"
      },
      "message": "cgroup: list_del_init() on removed events\n\nUse list_del_init() rather than list_del() to remove events from\ncgrp-\u003eevent_list.  No functional change.  This is just defensive\ncoding.\n\nSigned-off-by: Greg Thelen \u003cgthelen@google.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "205a872bd6f9a9a09ef035ef1e90185a8245cc58",
      "tree": "9b39a5823dddf6319a021d4ab36c7cd35f612908",
      "parents": [
        "fddfb02ad0d0d3b479c2a26a8ae7e6411b34706b"
      ],
      "author": {
        "name": "Greg Thelen",
        "email": "gthelen@google.com",
        "time": "Wed Nov 28 13:50:44 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Nov 28 13:51:56 2012 -0800"
      },
      "message": "cgroup: fix lockdep warning for event_control\n\nThe cgroup_event_wake() function is called with the wait queue head\nlocked and it takes cgrp-\u003eevent_list_lock. However, in cgroup_rmdir()\nremove_wait_queue() was being called after taking\ncgrp-\u003eevent_list_lock.  Correct the lock ordering by using a temporary\nlist to obtain the event list to remove from the wait queue.\n\nSigned-off-by: Greg Thelen \u003cgthelen@google.com\u003e\nSigned-off-by: Aaron Durbin \u003cadurbin@google.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "fddfb02ad0d0d3b479c2a26a8ae7e6411b34706b",
      "tree": "f3d8aa9e526486f4d07fc6f0a3619ce98ffeb3b9",
      "parents": [
        "811d8d6ff59cbc7d618dfa2cd339ba6c3691a7eb"
      ],
      "author": {
        "name": "Li Zhong",
        "email": "zhong@linux.vnet.ibm.com",
        "time": "Wed Nov 28 17:15:21 2012 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Nov 28 06:02:39 2012 -0800"
      },
      "message": "cgroup: move list add after list head initilization\n\n2243076ad1 (\"cgroup: initialize cgrp-\u003eallcg_node in\ninit_cgroup_housekeeping()\") initializes cgrp-\u003eallcg_node in\ninit_cgroup_housekeeping().  Then in init_cgroup_root(), we should\ncall init_cgroup_housekeeping() before adding it to \u0026root-\u003eallcg_list;\notherwise, we are initializing an entry already in a list.\n\nSigned-off-by: Li Zhong \u003czhong@linux.vnet.ibm.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\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": "4b8b47eb0001a89f271d671d959b235faa8f03e2",
      "tree": "611245ac0c36952a3b3e4af19514baf2be3d9104",
      "parents": [
        "b8a2df6a5b576d04f78f54abf254c283527d8bbc"
      ],
      "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: update cgroup_create() failure path\n\ncgroup_create() was ignoring failure of cgroupfs files.  Update it\nsuch that, if file creation fails, it rolls back by calling\ncgroup_destroy_locked() and returns failure.\n\nNote that error out goto labels are renamed.  The labels are a bit\nconfusing but will become better w/ later cgroup operation renames.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "b8a2df6a5b576d04f78f54abf254c283527d8bbc",
      "tree": "6a49e4105d3bb3d813378d72ebf67c08d719d0de",
      "parents": [
        "d19e19de48aa0b90c56cd93c8a46ebac46273429"
      ],
      "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: use mutex_trylock() when grabbing i_mutex of a new cgroup directory\n\nAll cgroup directory i_mutexes nest outside cgroup_mutex; however, new\ndirectory creation is a special case.  A new cgroup directory is\ncreated while holding cgroup_mutex.  Populating the new directory\nrequires both the new directory\u0027s i_mutex and cgroup_mutex.  Because\nall directory i_mutexes nest outside cgroup_mutex, grabbing both\nrequires releasing cgroup_mutex first, which isn\u0027t a good idea as the\nnew cgroup isn\u0027t yet ready to be manipulated by other cgroup\nopreations.\n\nThis is worked around by grabbing the new directory\u0027s i_mutex while\nholding cgroup_mutex before making it visible.  As there\u0027s no other\nuser at that point, grabbing the i_mutex under cgroup_mutex can\u0027t lead\nto deadlock.\n\ncgroup_create_file() was using I_MUTEX_CHILD to tell lockdep not to\nworry about the reverse locking order; however, this creates pseudo\nlocking dependency cgroup_mutex -\u003e I_MUTEX_CHILD, which isn\u0027t true -\nall directory i_mutexes are still nested outside cgroup_mutex.  This\npseudo locking dependency can lead to spurious lockdep warnings.\n\nUse mutex_trylock() instead.  This will always succeed and lockdep\ndoesn\u0027t create any locking dependency for it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "d19e19de48aa0b90c56cd93c8a46ebac46273429",
      "tree": "ea485692e0b5a7fdfa6bf6a80558957e89b220c2",
      "parents": [
        "a31f2d3ff7fe20cbe2a143515a7d7c408b29dd0d"
      ],
      "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: simplify cgroup_load_subsys() failure path\n\nNow that cgroup_unload_subsys() can tell whether the root css is\nonline or not, we can safely call cgroup_unload_subsys() after idr\ninit failure in cgroup_load_subsys().\n\nReplace the manual unrolling and invoke cgroup_unload_subsys() on\nfailure.  This drops cgroup_mutex inbetween but should be safe as the\nsubsystem will fail try_module_get() and thus can\u0027t be mounted\ninbetween.  As this means that cgroup_unload_subsys() can be called\nbefore css_sets are rehashed, remove BUG_ON() on %NULL\ncss_set-\u003esubsys[] from cgroup_unload_subsys().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.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": "42809dd4225b2f3127a4804314a1b33608620d96",
      "tree": "7600d71baff46173b9b2c051a3530a4a4b7c9582",
      "parents": [
        "02ae7486d05ae6df8395409a4945b2420f1e35c2"
      ],
      "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: separate out cgroup_destroy_locked()\n\nSeparate out cgroup_destroy_locked() from cgroup_destroy().  This will\nbe later used in cgroup_create() failure path.\n\nWhile at it, add lockdep asserts on i_mutex and cgroup_mutex, and move\n@d and @parent assignments to their declarations.\n\nThis patch doesn\u0027t introduce any functional difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "02ae7486d05ae6df8395409a4945b2420f1e35c2",
      "tree": "18d3f09250a850d9d6dfe3f62dfe13f4f6353374",
      "parents": [
        "648bb56d076bde31113f09a7d24d95bc8d4155ac"
      ],
      "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: fix harmless bugs in cgroup_load_subsys() fail path and cgroup_unload_subsys()\n\n* If idr init fails, cgroup_load_subsys() cleared dummytop-\u003esubsys[]\n  before calilng -\u003edestroy() making CSS inaccessible to the callback,\n  and didn\u0027t unlink ss-\u003esibling.  As no modular controller uses\n  -\u003euse_id, this doesn\u0027t cause any actual problems.\n\n* cgroup_unload_subsys() was forgetting to free idr, call\n  -\u003epre_destroy() and clear -\u003eactive.  As there currently is no\n  modular controller which uses -\u003euse_id, -\u003epre_destroy() or -\u003eactive,\n  this doesn\u0027t cause any actual problems.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "648bb56d076bde31113f09a7d24d95bc8d4155ac",
      "tree": "5e17d543a77f3783e4cfce7f525f4c3255238c07",
      "parents": [
        "b48c6a80a0f7584056f768268fc12b87745a393f"
      ],
      "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: lock cgroup_mutex in cgroup_init_subsys()\n\nMake cgroup_init_subsys() grab cgroup_mutex while initializing a\nsubsystem so that all helpers and callbacks are called under the\ncontext they expect.  This isn\u0027t strictly necessary as\ncgroup_init_subsys() doesn\u0027t race with anybody but will allow adding\nlockdep assertions.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "b48c6a80a0f7584056f768268fc12b87745a393f",
      "tree": "2bf2581057ce3ec3c0fc8305e5967dbd0c1a14bb",
      "parents": [
        "38b53abaa3e0c7e750ef73eee919cf42eee6b134"
      ],
      "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: trivial cleanup for cgroup_init/load_subsys()\n\nConsistently use @css and @dummytop in these two functions instead of\nreferring to them indirectly.\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": "4e139afc22cb98d0d032ffce0285bfcc73ca5217",
      "tree": "51577f433405360504dc67b0f3b0c49afcef36ca",
      "parents": [
        "28fd6f30ac3efd9170ae1ac89f3521d53b5eb83a"
      ],
      "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: create directory before linking while creating a new cgroup\n\nWhile creating a new cgroup, cgroup_create() links the newly allocated\ncgroup into various places before trying to create its directory.\nBecause cgroup life-cycle is tied to the vfs objects, this makes it\nimpossible to use cgroup_rmdir() for rolling back creation - the\nremoval logic depends on having full vfs objects.\n\nThis patch moves directory creation above linking and collect linking\noperations to one place.  This allows directory creation failure to\nshare error exit path with css allocation failures and any failure\nsites afterwards (to be added later) can use cgroup_rmdir() logic to\nundo creation.\n\nNote that this also makes the memory barriers around cgroup-\u003edentry,\nwhich currently is misleadingly using RCU operations, unnecessary.\nThis will be handled in the next patch.\n\nWhile at it, locking BUG_ON() on i_mutex is converted to\nlockdep_assert_held().\n\nv2: Patch originally removed %NULL dentry check in cgroup_path();\n    however, Li pointed out that this patch doesn\u0027t make it\n    unnecessary as -\u003ecreate() may call cgroup_path().  Drop the\n    change for now.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "28fd6f30ac3efd9170ae1ac89f3521d53b5eb83a",
      "tree": "8f9742385f1e8447c3b66e8f87d7c2fc5ae4441c",
      "parents": [
        "2243076ad128d0cc196cf6597e6ddcf6bc907676"
      ],
      "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: open-code cgroup_create_dir()\n\nThe operation order of cgroup creation is about to change and\ncgroup_create_dir() is more of a hindrance than a proper abstraction.\nOpen-code it by moving the parent nlink adjustment next to self nlink\nadjustment in cgroup_create_file() and the rest to cgroup_create().\n\nThis patch doesn\u0027t introduce any behavior change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "2243076ad128d0cc196cf6597e6ddcf6bc907676",
      "tree": "97705aa98559f30740570f2234246836f9eb959d",
      "parents": [
        "175431635ec09b1d1bba04979b006b99e8305a83"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:35 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:35 2012 -0800"
      },
      "message": "cgroup: initialize cgrp-\u003eallcg_node in init_cgroup_housekeeping()\n\nNot strictly necessary but it\u0027s annoying to have uninitialized\nlist_head around.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "175431635ec09b1d1bba04979b006b99e8305a83",
      "tree": "2f7adf26ccaf5dfeae6e56cd37d2050b79c191da",
      "parents": [
        "ef9fe980c6fcc1821ab955b74b242d2d6585fa75"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:35 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:35 2012 -0800"
      },
      "message": "cgroup: remove incorrect dget/dput() pair in cgroup_create_dir()\n\ncgroup_create_dir() does weird dancing with dentry refcnt.  On\nsuccess, it gets and then puts it achieving nothing.  On failure, it\nputs but there isn\u0027t no matching get anywhere leading to the following\noops if cgroup_create_file() fails for whatever reason.\n\n  ------------[ cut here ]------------\n  kernel BUG at /work/os/work/fs/dcache.c:552!\n  invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC\n  Modules linked in:\n  CPU 2\n  Pid: 697, comm: mkdir Not tainted 3.7.0-rc4-work+ #3 Bochs Bochs\n  RIP: 0010:[\u003cffffffff811d9c0c\u003e]  [\u003cffffffff811d9c0c\u003e] dput+0x1dc/0x1e0\n  RSP: 0018:ffff88001a3ebef8  EFLAGS: 00010246\n  RAX: 0000000000000000 RBX: ffff88000e5b1ef8 RCX: 0000000000000403\n  RDX: 0000000000000303 RSI: 2000000000000000 RDI: ffff88000e5b1f58\n  RBP: ffff88001a3ebf18 R08: ffffffff82c76960 R09: 0000000000000001\n  R10: ffff880015022080 R11: ffd9bed70f48a041 R12: 00000000ffffffea\n  R13: 0000000000000001 R14: ffff88000e5b1f58 R15: 00007fff57656d60\n  FS:  00007ff05fcb3800(0000) GS:ffff88001fd00000(0000) knlGS:0000000000000000\n  CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033\n  CR2: 00000000004046f0 CR3: 000000001315f000 CR4: 00000000000006e0\n  DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\n  DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\n  Process mkdir (pid: 697, threadinfo ffff88001a3ea000, task ffff880015022080)\n  Stack:\n   ffff88001a3ebf48 00000000ffffffea 0000000000000001 0000000000000000\n   ffff88001a3ebf38 ffffffff811cc889 0000000000000001 ffff88000e5b1ef8\n   ffff88001a3ebf68 ffffffff811d1fc9 ffff8800198d7f18 ffff880019106ef8\n  Call Trace:\n   [\u003cffffffff811cc889\u003e] done_path_create+0x19/0x50\n   [\u003cffffffff811d1fc9\u003e] sys_mkdirat+0x59/0x80\n   [\u003cffffffff811d2009\u003e] sys_mkdir+0x19/0x20\n   [\u003cffffffff81be1e02\u003e] system_call_fastpath+0x16/0x1b\n  Code: 00 48 8d 90 18 01 00 00 48 89 93 c0 00 00 00 4c 89 a0 18 01 00 00 48 8b 83 a0 00 00 00 83 80 28 01 00 00 01 e8 e6 6f a0 00 eb 92 \u003c0f\u003e 0b 66 90 0f 1f 44 00 00 55 48 89 e5 41 57 41 56 49 89 fe 41\n  RIP  [\u003cffffffff811d9c0c\u003e] dput+0x1dc/0x1e0\n   RSP \u003cffff88001a3ebef8\u003e\n  ---[ end trace 1277bcfd9561ddb0 ]---\n\nFix it by dropping the unnecessary dget/dput() pair.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "17cf22c33e1f1b5e435469c84e43872579497653",
      "tree": "c5cec307c06f7e4ddc26e04e73c8833897b67113",
      "parents": [
        "49f4d8b93ccf9454284b6f524b96c66d8d7fbccc"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Tue Mar 02 14:51:53 2010 -0800"
      },
      "committer": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Mon Nov 19 05:59:09 2012 -0800"
      },
      "message": "pidns: Use task_active_pid_ns where appropriate\n\nThe expressions tsk-\u003ensproxy-\u003epid_ns and task_active_pid_ns\naka ns_of_pid(task_pid(tsk)) should have the same number of\ncache line misses with the practical difference that\nns_of_pid(task_pid(tsk)) is released later in a processes life.\n\nFurthermore by using task_active_pid_ns it becomes trivial\nto write an unshare implementation for the the pid namespace.\n\nSo I have used task_active_pid_ns everywhere I can.\n\nIn fork since the pid has not yet been attached to the\nprocess I use ns_of_pid, to achieve the same effect.\n\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.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": "316eb661f125397d46f16f94e3c81ad3dc4c1233",
      "tree": "6b3298bff5f264a7046e7bdac2a0ffcd04fbadc8",
      "parents": [
        "4b1c7840b7d01b14a1a00fa0e61b761d4391ba67"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Thu Nov 08 21:36:38 2012 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Nov 08 06:23:02 2012 -0800"
      },
      "message": "cgroup: set \u0027start\u0027 with the right value in cgroup_path.\n\n\u0027start\u0027 is set to buf + buflen and do the \u0027--\u0027 immediately.\nJust set it to \u0027buf + buflen - 1\u0027 directly.\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "5b805f2a7675634fbdf9ac1c9b2256905ab2ea68",
      "tree": "ee00d1e3d757458d66209b926d274491c6c3f61c",
      "parents": [
        "1db1e31b1ee3ae126ef98f39083b5f213c7b41bf",
        "201e72acb2d3821e2de9ce6091e98859c316b29a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Nov 06 12:26:23 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Nov 06 12:26:23 2012 -0800"
      },
      "message": "Merge branch \u0027cgroup/for-3.7-fixes\u0027 into cgroup/for-3.8\n\nThis is to receive device_cgroup fixes so that further device_cgroup\nchanges can be made in cgroup/for-3.8.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\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": "1a90dd508b0b00e382fd61a46f55dc889ac21b39",
      "tree": "58eb9d638000caa28b29866f0140b609ec397ff8",
      "parents": [
        "976c06bcccc50573997609fa7ec842479bd96ffb"
      ],
      "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: deactivate CSS\u0027s and mark cgroup dead before invoking -\u003epre_destroy()\n\nBecause -\u003epre_destroy() could fail and can\u0027t be called under\ncgroup_mutex, cgroup destruction did something very ugly.\n\n  1. Grab cgroup_mutex and verify it can be destroyed; fail otherwise.\n\n  2. Release cgroup_mutex and call -\u003epre_destroy().\n\n  3. Re-grab cgroup_mutex and verify it can still be destroyed; fail\n     otherwise.\n\n  4. Continue destroying.\n\nIn addition to being ugly, it has been always broken in various ways.\nFor example, memcg -\u003epre_destroy() expects the cgroup to be inactive\nafter it\u0027s done but tasks can be attached and detached between #2 and\n#3 and the conditions that memcg verified in -\u003epre_destroy() might no\nlonger hold by the time control reaches #3.\n\nNow that -\u003epre_destroy() is no longer allowed to fail.  We can switch\nto the following.\n\n  1. Grab cgroup_mutex and verify it can be destroyed; fail otherwise.\n\n  2. Deactivate CSS\u0027s and mark the cgroup removed thus preventing any\n     further operations which can invalidate the verification from #1.\n\n  3. Release cgroup_mutex and call -\u003epre_destroy().\n\n  4. Re-grab cgroup_mutex and continue destroying.\n\nAfter this change, controllers can safely assume that -\u003epre_destroy()\nwill only be called only once for a given cgroup and, once\n-\u003epre_destroy() is called, the cgroup will stay dormant till it\u0027s\ndestroyed.\n\nThis removes the only reason -\u003epre_destroy() can fail - new task being\nattached or child cgroup being created inbetween.  Error out path is\nremoved and -\u003epre_destroy() invocation is open coded in\ncgroup_rmdir().\n\nv2: cgroup_call_pre_destroy() removal moved to this patch per Michal.\n    Commit message updated per Glauber.\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: Glauber Costa \u003cglommer@parallels.com\u003e\n"
    },
    {
      "commit": "976c06bcccc50573997609fa7ec842479bd96ffb",
      "tree": "451f67b3cb6e4b3eb52a1df56d9018eb447960f1",
      "parents": [
        "e93160803ffda2e67d9ff9cacb63bb6868c8398f"
      ],
      "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: use cgroup_lock_live_group(parent) in cgroup_create()\n\nThis patch makes cgroup_create() fail if @parent is marked removed.\nThis is to prepare for further updates to cgroup_rmdir() path.\n\nNote that this change isn\u0027t strictly necessary.  cgroup can only be\ncreated via mkdir and the removed marking and dentry removal happen\nwithout releasing cgroup_mutex, so cgroup_create() can never race with\ncgroup_rmdir().  Even after the scheduled updates to cgroup_rmdir(),\ncgroup_mkdir() and cgroup_rmdir() are synchronized by i_mutex\nrendering the added liveliness check unnecessary.\n\nDo it anyway such that locking is contained inside cgroup proper and\nwe don\u0027t get nasty surprises if we ever grow another caller of\ncgroup_create().\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": "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": "d87838321124061f6c935069d97f37010fa417e6",
      "tree": "825e291d0ad7bdc7e7eb68e4bb829121de2586bc",
      "parents": [
        "9bb71308b8133d643648776243e4d5599b1c193d"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Oct 18 17:40:30 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Oct 19 14:09:35 2012 -0700"
      },
      "message": "Revert \"cgroup: Remove task_lock() from cgroup_post_fork()\"\n\nThis reverts commit 7e3aa30ac8c904a706518b725c451bb486daaae9.\n\nThe commit incorrectly assumed that fork path always performed\nthreadgroup_change_begin/end() and depended on that for\nsynchronization against task exit and cgroup migration paths instead\nof explicitly grabbing task_lock().\n\nthreadgroup_change is not locked when forking a new process (as\nopposed to a new thread in the same process) and even if it were it\nwouldn\u0027t be effective as different processes use different threadgroup\nlocks.\n\nRevert the incorrect optimization.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nLKML-Reference: \u003c20121008020000.GB2575@localhost\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "9bb71308b8133d643648776243e4d5599b1c193d",
      "tree": "f975fb2ffcd3d9b2ae222705836a9a142b97d350",
      "parents": [
        "1f5320d5972aa50d3e8d2b227b636b370e608359"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Oct 18 17:52:07 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Oct 19 14:08:49 2012 -0700"
      },
      "message": "Revert \"cgroup: Drop task_lock(parent) on cgroup_fork()\"\n\nThis reverts commit 7e381b0eb1e1a9805c37335562e8dc02e7d7848c.\n\nThe commit incorrectly assumed that fork path always performed\nthreadgroup_change_begin/end() and depended on that for\nsynchronization against task exit and cgroup migration paths instead\nof explicitly grabbing task_lock().\n\nthreadgroup_change is not locked when forking a new process (as\nopposed to a new thread in the same process) and even if it were it\nwouldn\u0027t be effective as different processes use different threadgroup\nlocks.\n\nRevert the incorrect optimization.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nLKML-Reference: \u003c20121008020000.GB2575@localhost\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nBitterly-Acked-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "1f5320d5972aa50d3e8d2b227b636b370e608359",
      "tree": "a36f1ef6a2f2f72d81e5aef43c0089bb62056bf5",
      "parents": [
        "ddffeb8c4d0331609ef2581d84de4d763607bd37"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Thu Oct 04 16:37:16 2012 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Oct 16 17:09:36 2012 -0700"
      },
      "message": "cgroup: notify_on_release may not be triggered in some cases\n\nnotify_on_release must be triggered when the last process in a cgroup is\nmove to another. But if the first(and only) process in a cgroup is moved to\nanother, notify_on_release is not triggered.\n\n\t# mkdir /cgroup/cpu/SRC\n\t# mkdir /cgroup/cpu/DST\n\t#\n\t# echo 1 \u003e/cgroup/cpu/SRC/notify_on_release\n\t# echo 1 \u003e/cgroup/cpu/DST/notify_on_release\n\t#\n\t# sleep 300 \u0026\n\t[1] 8629\n\t#\n\t# echo 8629 \u003e/cgroup/cpu/SRC/tasks\n\t# echo 8629 \u003e/cgroup/cpu/DST/tasks\n\t-\u003e notify_on_release for /SRC must be triggered at this point,\n\t   but it isn\u0027t.\n\nThis is because put_css_set() is called before setting CGRP_RELEASABLE\nin cgroup_task_migrate(), and is a regression introduce by the\ncommit:74a1166d(cgroups: make procs file writable), which was merged\ninto v3.0.\n\nCc: Ben Blum \u003cbblum@andrew.cmu.edu\u003e\nCc: \u003cstable@vger.kernel.org\u003e # v3.0.x and later\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\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"
    }
  ],
  "next": "8c7f6edbda01f1b1a2e60ad61f14fe38023e433b"
}
