)]}'
{
  "log": [
    {
      "commit": "172a2c0685ff3bc0b7a611b308aac0694de34594",
      "tree": "3cafd39bf2053827001d9af18f62ebd2e649b8c1",
      "parents": [
        "5d77381fd8aa631a8fda718c395da1319afb5d2d"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 19 10:23:53 2014 -0400"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 19 10:23:53 2014 -0400"
      },
      "message": "cgroup: reorganize cgroup bootstrapping\n\n* Fields of init_css_set and css_set_count are now set using\n  initializer instead of programmatically from cgroup_init_early().\n\n* init_cgroup_root() now also takes @opts and performs the optional\n  part of initialization too.  The leftover part of\n  cgroup_root_from_opts() is collapsed into its only caller -\n  cgroup_mount().\n\n* Initialization of cgroup_root_count and linking of init_css_set are\n  moved from cgroup_init_early() to to cgroup_init().  None of the\n  early_init users depends on init_css_set being linked.\n\n* Subsystem initializations are moved after dummy hierarchy init and\n  init_css_set linking.\n\nThese changes reorganize the bootstrap logic so that the dummy\nhierarchy can share the usual hierarchy init path and be made more\nnormal.  These changes don\u0027t make noticeable behavior changes.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "5d77381fd8aa631a8fda718c395da1319afb5d2d",
      "tree": "60c8d92fa51eb74238d4ecb92966b71c3ad03751",
      "parents": [
        "b8dadcb58d542ecbf1d3dae5fefcd3fd8cb26539"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 19 10:23:53 2014 -0400"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 19 10:23:53 2014 -0400"
      },
      "message": "cgroup: relocate setting of CGRP_DEAD\n\nIn cgroup_destroy_locked(), move setting of CGRP_DEAD above\ninvocations of kill_css().  This doesn\u0027t make any visible behavior\ndifference now but will be used to inhibit manipulating controller\nenable states of a dying cgroup on the unified hierarchy.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "b8dadcb58d542ecbf1d3dae5fefcd3fd8cb26539",
      "tree": "fc8075d0506b22f79213d97cf4e19408b622454d",
      "parents": [
        "a60bed296ac67b9e2765646dec8e36e3b4d7c395"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Mon Mar 03 17:28:36 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 03 17:28:36 2014 -0500"
      },
      "message": "cpuset: use rcu_read_lock() to protect task_cs()\n\nWe no longer use task_lock() to protect tsk-\u003ecgroups.\n\nReported-by: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "a60bed296ac67b9e2765646dec8e36e3b4d7c395",
      "tree": "8056af9bec7cc230369ce94514560111bce0ad29",
      "parents": [
        "952aaa125428fae883670a2c2e40ea8044ca1eaa"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 12 16:07:59 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 25 10:04:40 2014 -0500"
      },
      "message": "cgroup_freezer: document freezer_fork() subtleties\n\ncgroup_subsys-\u003efork() callback is special in that it\u0027s called outside\nthe usual cgroup locking and may race with on-going migration.\nfreezer_fork() currently doesn\u0027t consider such race condition;\nhowever, it is still correct thanks to the fact that freeze_task() may\nbe called spuriously.\n\nThis is quite subtle.  Let\u0027s explain what\u0027s going on and add test to\ndetect racing and losing to task migration and skip freeze_task() in\nsuch cases for documentation.\n\nThis doesn\u0027t make any behavior difference meaningful to userland.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Li Zefan \u003clizefan@huawei.com\u003e\nCc: \"Rafael J. Wysocki\" \u003crjw@rjwysocki.net\u003e\n"
    },
    {
      "commit": "952aaa125428fae883670a2c2e40ea8044ca1eaa",
      "tree": "54c4f846256d192f094dd6004012989b6d9f414c",
      "parents": [
        "0e1d768f1b1873272ec4e8dc1482bb5281855017"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 25 10:04:03 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 25 10:04:03 2014 -0500"
      },
      "message": "cgroup: update cgroup_transfer_tasks() to either succeed or fail\n\ncgroup_transfer_tasks() can currently fail in the middle due to memory\nallocation failure.  When that happens, the function just aborts and\nreturns error code and there\u0027s no way to tell how many actually got\nmigrated at the point of failure and or to revert the partial\nmigration.\n\nUpdate it to use cgroup_migrate{_add_src|prepare_dst|migrate|finish}()\nso that the function either succeeds or fails as a whole as long as\n-\u003ecan_attach() doesn\u0027t fail.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "0e1d768f1b1873272ec4e8dc1482bb5281855017",
      "tree": "8c8156afaa83e9d647c0202d63112b4be6a240d1",
      "parents": [
        "eaf797abc53b0ab3f0a02d4ef873a565fcce6daa"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 25 10:04:03 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 25 10:04:03 2014 -0500"
      },
      "message": "cgroup: drop task_lock() protection around task-\u003ecgroups\n\nFor optimization, task_lock() is additionally used to protect\ntask-\u003ecgroups.  The optimization is pretty dubious as either\ncss_set_rwsem is grabbed anyway or PF_EXITING already protects\ntask-\u003ecgroups.  It adds only overhead and confusion at this point.\nLet\u0027s drop task_[un]lock() and update comments accordingly.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "eaf797abc53b0ab3f0a02d4ef873a565fcce6daa",
      "tree": "690461cc8a6262e0fd0fc8472d8a93a8a7592750",
      "parents": [
        "1958d2d53dadbb1c9aaf0b37741f13a60098b243"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 25 10:04:03 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 25 10:04:03 2014 -0500"
      },
      "message": "cgroup: update how a newly forked task gets associated with css_set\n\nWhen a new process is forked, cgroup_fork() associates it with the\ncss_set of its parent but doesn\u0027t link it into it.  After the new\nprocess is linked to tasklist, cgroup_post_fork() does the linking.\n\nThis is problematic for cgroup_transfer_tasks() as there\u0027s no way to\ntell whether there are tasks which are pointing to a css_set but not\nlinked yet.  It is impossible to implement an operation which transfer\nall tasks of a cgroup to another and the current\ncgroup_transfer_tasks() can easily be tricked into leaving a newly\nforked process behind if it gets called between cgroup_fork() and\ncgroup_post_fork().\n\nLet\u0027s make association with a css_set and linking atomic by moving it\nto cgroup_post_fork().  cgroup_fork() sets child-\u003ecgroups to\ninit_css_set as a placeholder and cgroup_post_fork() is updated to\nperform both the association with the parent\u0027s cgroup and linking\nthere.  This means that a newly created task will point to\ninit_css_set without holding a ref to it much like what it does on the\nexit path.  Empty cg_list is used to indicate that the task isn\u0027t\nholding a ref to the associated css_set.\n\nThis fixes an actual bug with cgroup_transfer_tasks(); however, I\u0027m\nnot marking it for -stable.  The whole thing is broken in multiple\nother ways which require invasive updates to fix and I don\u0027t think\nit\u0027s worthwhile to bother with backporting this particular one.\nFortunately, the only user is cpuset and these bugs don\u0027t crash the\nmachine.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "1958d2d53dadbb1c9aaf0b37741f13a60098b243",
      "tree": "2c9ad370a8ef3b9db1191f73e7e163857da8a641",
      "parents": [
        "ceb6a081f6f52d17ec9e46e271cc26a1eb8a7573"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 25 10:04:03 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 25 10:04:03 2014 -0500"
      },
      "message": "cgroup: split process / task migration into four steps\n\nCurrently, process / task migration is a single operation which may\nfail depending on memory pressure or the involved controllers\u0027\n-\u003ecan_attach() callbacks.  One problem with this approach is migration\nof multiple targets.  It\u0027s impossible to tell whether a given target\nwill be successfully migrated beforehand and cgroup core can\u0027t keep\ntrack of enough states to roll back after intermediate failure.\n\nThis is already an issue with cgroup_transfer_tasks().  Also, we\u0027re\ngonna need multiple target migration for unified hierarchy.\n\nThis patch splits migration into four stages -\ncgroup_migrate_add_src(), cgroup_migrate_prepare_dst(),\ncgroup_migrate() and cgroup_migrate_finish(), where\ncgroup_migrate_prepare_dst() performs all the operations which may\nfail due to allocation failure without actually migrating the target.\n\nThe four separate stages mean that, disregarding -\u003ecan_attach()\nfailures, the success or failure of multi target migration can be\ndetermined before performing any actual migration.  If preparations of\nall targets succeed, the whole thing will succeed.  If not, the whole\noperation can fail without any side-effect.\n\nSince the previous patch to use css_set-\u003emg_tasks to keep track of\nmigration targets, the only thing which may need memory allocation\nduring migration is the target css_sets.  cgroup_migrate_prepare()\npins all source and target css_sets and link them up.  Note that this\ncan be performed without holding threadgroup_lock even if the target\nis a process.  As long as cgroup_mutex is held, no new css_set can be\nput into play.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "ceb6a081f6f52d17ec9e46e271cc26a1eb8a7573",
      "tree": "100b59acde1d14b2995b0a399ff53e1ea6c571ed",
      "parents": [
        "b3dc094e93905ae9c1bc0815402ad8e5b203d068"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 25 10:04:02 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 25 10:04:02 2014 -0500"
      },
      "message": "cgroup: separate out cset_group_from_root() from task_cgroup_from_root()\n\nThis will be used by the planned migration path update.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "b3dc094e93905ae9c1bc0815402ad8e5b203d068",
      "tree": "6d99ba4737ccbf7ce94f06937db571a7fcb902a4",
      "parents": [
        "c75611282cf1bf717c1866e7a7eb4d0743815187"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 25 10:04:01 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 25 10:04:01 2014 -0500"
      },
      "message": "cgroup: use css_set-\u003emg_tasks to track target tasks during migration\n\nCurrently, while migrating tasks from one cgroup to another,\ncgroup_attach_task() builds a flex array of all target tasks;\nunfortunately, this has a couple issues.\n\n* Flex array has size limit.  On 64bit, struct task_and_cgroup is\n  24bytes making the flex element limit around 87k.  It is a high\n  number but not impossible to hit.  This means that the current\n  cgroup implementation can\u0027t migrate a process with more than 87k\n  threads.\n\n* Process migration involves memory allocation whose size is dependent\n  on the number of threads the process has.  This means that cgroup\n  core can\u0027t guarantee success or failure of multi-process migrations\n  as memory allocation failure can happen in the middle.  This is in\n  part because cgroup can\u0027t grab threadgroup locks of multiple\n  processes at the same time, so when there are multiple processes to\n  migrate, it is imposible to tell how many tasks are to be migrated\n  beforehand.\n\n  Note that this already affects cgroup_transfer_tasks().  cgroup\n  currently cannot guarantee atomic success or failure of the\n  operation.  It may fail in the middle and after such failure cgroup\n  doesn\u0027t have enough information to roll back properly.  It just\n  aborts with some tasks migrated and others not.\n\nTo resolve the situation, this patch updates the migration path to use\ntask-\u003ecg_list to track target tasks.  The previous patch already added\ncss_set-\u003emg_tasks and updated iterations in non-migration paths to\ninclude them during task migration.  This patch updates migration path\nto actually make use of it.\n\nInstead of putting onto a flex_array, each target task is moved from\nits css_set-\u003etasks list to css_set-\u003emg_tasks and the migration path\nkeeps trace of all the source css_sets and the associated cgroups.\nOnce all source css_sets are determined, the destination css_set for\neach is determined, linked to the matching source css_set and put on a\nseparate list.\n\nTo iterate the target tasks, migration path just needs to iterat\nthrough either the source or target css_sets, depending on whether\nmigration has been committed or not, and the tasks on their -\u003emg_tasks\nlists.  cgroup_taskset is updated to contain the list_heads for source\nand target css_sets and the iteration cursor.  cgroup_taskset_*() are\naccordingly updated to walk through css_sets and their -\u003emg_tasks.\n\nThis resolves the above listed issues with moderate additional\ncomplexity.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "c75611282cf1bf717c1866e7a7eb4d0743815187",
      "tree": "4579606847463892cc65977a55bee386b2b5cf2a",
      "parents": [
        "f153ad11bca27996a5e8e1782557e36e80b03a8c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 25 10:04:01 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 25 10:04:01 2014 -0500"
      },
      "message": "cgroup: add css_set-\u003emg_tasks\n\nCurrently, while migrating tasks from one cgroup to another,\ncgroup_attach_task() builds a flex array of all target tasks;\nunfortunately, this has a couple issues.\n\n* Flex array has size limit.  On 64bit, struct task_and_cgroup is\n  24bytes making the flex element limit around 87k.  It is a high\n  number but not impossible to hit.  This means that the current\n  cgroup implementation can\u0027t migrate a process with more than 87k\n  threads.\n\n* Process migration involves memory allocation whose size is dependent\n  on the number of threads the process has.  This means that cgroup\n  core can\u0027t guarantee success or failure of multi-process migrations\n  as memory allocation failure can happen in the middle.  This is in\n  part because cgroup can\u0027t grab threadgroup locks of multiple\n  processes at the same time, so when there are multiple processes to\n  migrate, it is imposible to tell how many tasks are to be migrated\n  beforehand.\n\n  Note that this already affects cgroup_transfer_tasks().  cgroup\n  currently cannot guarantee atomic success or failure of the\n  operation.  It may fail in the middle and after such failure cgroup\n  doesn\u0027t have enough information to roll back properly.  It just\n  aborts with some tasks migrated and others not.\n\nTo resolve the situation, we\u0027re going to use task-\u003ecg_list during\nmigration too.  Instead of building a separate array, target tasks\nwill be linked into a dedicated migration list_head on the owning\ncss_set.  Tasks on the migration list are treated the same as tasks on\nthe usual tasks list; however, being on a separate list allows cgroup\nmigration code path to keep track of the target tasks by simply\nkeeping the list of css_sets with tasks being migrated, making\nunpredictable dynamic allocation unnecessary.\n\nIn prepartion of such migration path update, this patch introduces\ncss_set-\u003emg_tasks list and updates css_set task iterations so that\nthey walk both css_set-\u003etasks and -\u003emg_tasks.  Note that -\u003emg_tasks\nisn\u0027t used yet.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "f153ad11bca27996a5e8e1782557e36e80b03a8c",
      "tree": "df87bf56d2c7fb6d7b3122ed838ce652337b08a3",
      "parents": [
        "dc5736ed7aaf942caaac0c15af74a018e04ec79d",
        "532de3fc72adc2a6525c4d53c07bf81e1732083d"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 25 09:56:49 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 25 09:56:49 2014 -0500"
      },
      "message": "Merge branch \u0027cgroup/for-3.14-fixes\u0027 into cgroup/for-3.15\n\nPull in for-3.14-fixes to receive 532de3fc72ad (\"cgroup: update\ncgroup_enable_task_cg_lists() to grab siglock\") which conflicts with\nafeb0f9fd425 (\"cgroup: relocate cgroup_enable_task_cg_lists()\") and\nthe following cg_lists updates.  This is likely to cause further\nconflicts down the line too, so let\u0027s merge it early.\n\nAs cgroup_enable_task_cg_lists() is relocated in for-3.15, this merge\ncauses conflict in the original position.  It\u0027s resolved by applying\nsiglock changes to the updated version in the new location.\n\nConflicts:\n\tkernel/cgroup.c\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "532de3fc72adc2a6525c4d53c07bf81e1732083d",
      "tree": "72ee4b0fe873589f814939a3b4e60fedb1f9c6ef",
      "parents": [
        "1a11533fbd71792e8c5d36f6763fbce8df0d231d"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 13:29:31 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 18 18:23:18 2014 -0500"
      },
      "message": "cgroup: update cgroup_enable_task_cg_lists() to grab siglock\n\nCurrently, there\u0027s nothing preventing cgroup_enable_task_cg_lists()\nfrom missing set PF_EXITING and race against cgroup_exit().  Depending\non the timing, cgroup_exit() may finish with the task still linked on\ncss_set leading to list corruption.  Fix it by grabbing siglock in\ncgroup_enable_task_cg_lists() so that PF_EXITING is guaranteed to be\nvisible.\n\nThis whole on-demand cg_list optimization is extremely fragile and has\nample possibility to lead to bugs which can cause things like\nonce-a-year oops during boot.  I\u0027m wondering whether the better\napproach would be just adding \"cgroup_disable\u003dall\" handling which\ndisables the whole cgroup rather than tempting fate with this\non-demand craziness.\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": "dc5736ed7aaf942caaac0c15af74a018e04ec79d",
      "tree": "173eb94ee590ef0ba1ab295a49304a0fd1f8a4c2",
      "parents": [
        "cc045e3952175e84c38dad22dea14465b9fc8fb5"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Mon Feb 17 10:41:50 2014 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 18 18:20:09 2014 -0500"
      },
      "message": "cgroup: add a validation check to cgroup_add_cftyps()\n\nFengguang reported this bug:\n\nBUG: unable to handle kernel NULL pointer dereference at 0000003c\nIP: [\u003ccc90b4ad\u003e] cgroup_cfts_commit+0x27/0x1c1\n...\nCall Trace:\n  [\u003ccc9d1129\u003e] ? kmem_cache_alloc_trace+0x33f/0x3b7\n  [\u003ccc90c6fc\u003e] cgroup_add_cftypes+0x8f/0xca\n  [\u003ccd78b646\u003e] cgroup_init+0x6a/0x26a\n  [\u003ccd764d7d\u003e] start_kernel+0x4d7/0x57a\n  [\u003ccd7642ef\u003e] i386_start_kernel+0x92/0x96\n\nThis happens in a corner case. If CGROUP_SCHED\u003dy but CFS_BANDWIDTH\u003dn \u0026\u0026\nFAIR_GROUP_SCHED\u003dn \u0026\u0026 RT_GROUP_SCHED\u003dn, we have:\n\ncpu_files[] \u003d {\n\t{ }\t/* terminate */\n}\n\nWhen we pass cpu_files to cgroup_apply_cftypes(), as cpu_files[0].ss\nis NULL, we\u0027ll access NULL pointer.\n\nThe bug was introduced by commit de00ffa56ea3132c6013fc8f07133b8a1014cf53\n(\"cgroup: make cgroup_subsys-\u003ebase_cftypes use cgroup_add_cftypes()\").\n\nReported-by: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "cc045e3952175e84c38dad22dea14465b9fc8fb5",
      "tree": "d331bc8403047232ea13fd6c3951c9ef347b1bac",
      "parents": [
        "6534fd6c15858fe4ce4ae568106225e68d5afa81"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Fri Feb 14 16:56:04 2014 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Feb 14 10:52:40 2014 -0500"
      },
      "message": "cgroup: deal with dummp_top in cgroup_name() and cgroup_path()\n\nMy kernel fails to boot, because blkcg calls cgroup_path() while\ncgroupfs is not mounted.\n\nFix both cgroup_name() and cgroup_path().\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "6534fd6c15858fe4ce4ae568106225e68d5afa81",
      "tree": "895805085f542dfa62ce380d0d91d98d5fdb2283",
      "parents": [
        "bad34660344f37db8b55ce8bc139bddc7d83af1b"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Fri Feb 14 16:55:04 2014 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Feb 14 10:52:40 2014 -0500"
      },
      "message": "cgroup: fix memory leak in cgroup_mount()\n\nWe should free the memory allocated in parse_cgroupfs_options() before\ncalling this function again.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "bad34660344f37db8b55ce8bc139bddc7d83af1b",
      "tree": "21fbb75b3761a8f9c6d902780209089d6f059fb4",
      "parents": [
        "430af8ad9dad82d775d688155e1db1da385d3e7a"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Fri Feb 14 16:54:28 2014 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Feb 14 10:52:39 2014 -0500"
      },
      "message": "cgroup: fix locking in cgroupstats_build()\n\ncss_set_lock has been converted to css_set_rwsem, and rwsem can\u0027t nest\ninside rcu_read_lock.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "430af8ad9dad82d775d688155e1db1da385d3e7a",
      "tree": "80aa4c350091f772884564fe0c009fdac3f9a534",
      "parents": [
        "d6250ee2fa79637a5750e46734816c7af71ea97e"
      ],
      "author": {
        "name": "Fengguang Wu",
        "email": "fengguang.wu@intel.com",
        "time": "Thu Feb 13 16:42:43 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 16:42:45 2014 -0500"
      },
      "message": "cgroup: fix coccinelle warnings\n\nkernel/cgroup.c:2256:1-3: WARNING: PTR_RET can be used\n\n Use PTR_ERR_OR_ZERO rather than if(IS_ERR(...)) + PTR_ERR\n\nGenerated by: coccinelle/api/ptr_ret.cocci\n\nSigned-off-by: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "d6250ee2fa79637a5750e46734816c7af71ea97e",
      "tree": "a37402163649331c99fec992aa68910a899d4e90",
      "parents": [
        "8541fecc04a91842f023cbfe2c376d4de3b5047e"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Thu Feb 13 10:59:18 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 16:18:00 2014 -0500"
      },
      "message": "sparc: fix implicit include of slab.h in leon_pci_grpci2.c\n\nTo fix:\n\narch/sparc/kernel/leon_pci_grpci2.c: In function \u0027grpci2_of_probe\u0027:\narch/sparc/kernel/leon_pci_grpci2.c:720:2: error: implicit declaration of function \u0027kzalloc\u0027 [-Werror\u003dimplicit-function-declaration]\narch/sparc/kernel/leon_pci_grpci2.c:720:20: error: assignment makes pointer from integer without a cast [-Werror]\narch/sparc/kernel/leon_pci_grpci2.c:882:2: error: implicit declaration of function \u0027kfree\u0027 [-Werror\u003dimplicit-function-declaration]\ncc1: all warnings being treated as errors\nmake[2]: *** [arch/sparc/kernel/leon_pci_grpci2.o] Error 1\n\nAccording to Stephen, these types of failures are caused by commit\n2bd59d48ebfb (\"cgroup: convert to kernfs\") which was being included\nimplicitly via cgroup.h\u0027s inclusion of xattr.h (which has now been\nremoved).\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\n"
    },
    {
      "commit": "8541fecc04a91842f023cbfe2c376d4de3b5047e",
      "tree": "73ac7f7e6495cb4918a55692bf91c559c56df086",
      "parents": [
        "9db8de3722d184b8a431afd6bef803d6867ac889"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:43 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:43 2014 -0500"
      },
      "message": "cgroup: unexport functions\n\nWith module support gone, a lot of functions no longer need to be\nexported.  Unexport them.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "9db8de3722d184b8a431afd6bef803d6867ac889",
      "tree": "eeb23ad425d8bad43382e53ac61287092b0a8530",
      "parents": [
        "bc668c7519ff8b4681af80e92f463bec7bf7cf9e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:43 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:43 2014 -0500"
      },
      "message": "cgroup: cosmetic updates to cgroup_attach_task()\n\ncgroup_attach_task() is planned to go through restructuring.  Let\u0027s\ntidy it up a bit in preparation.\n\n* Update cgroup_attach_task() to receive the target task argument in\n  @leader instead of @tsk.\n\n* Rename @tsk to @task.\n\n* Rename @retval to @ret.\n\nThis is purely cosmetic.\n\nv2: get_nr_threads() was using uninitialized @task instead of @leader.\n    Fixed.  Reported by Dan Carpenter.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Dan Carpenter \u003cdan.carpenter@oracle.com\u003e\n"
    },
    {
      "commit": "bc668c7519ff8b4681af80e92f463bec7bf7cf9e",
      "tree": "f2940d003d0cb3d2395d5f7d12524e968839add2",
      "parents": [
        "57fce0a68e3aa71d223d9023aae66c7393970c34"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:43 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:43 2014 -0500"
      },
      "message": "cgroup: remove cgroup_taskset_cur_css() and cgroup_taskset_size()\n\nThe two functions don\u0027t have any users left.  Remove them along with\ncgroup_taskset-\u003ecur_cgrp.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "57fce0a68e3aa71d223d9023aae66c7393970c34",
      "tree": "73c6e626bbb96e404113ecd81a6de1c6007e2b70",
      "parents": [
        "924f0d9a2078f49ff331bb43196ec5afadc16b8f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:41 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:41 2014 -0500"
      },
      "message": "cpuset: don\u0027t use cgroup_taskset_cur_css()\n\ncgroup_taskset_cur_css() will be removed during the planned\nresturcturing of migration path.  The only use of\ncgroup_taskset_cur_css() is finding out the old cgroup_subsys_state of\nthe leader in cpuset_attach().  This usage can easily be removed by\nremembering the old value from cpuset_can_attach().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "924f0d9a2078f49ff331bb43196ec5afadc16b8f",
      "tree": "6df0c9852c7b16c2f2eb69b04f90aacae9f95132",
      "parents": [
        "cb0f1fe9ba47c202a98a9d41ad5c12c0ac7732e9"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:41 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:41 2014 -0500"
      },
      "message": "cgroup: drop @skip_css from cgroup_taskset_for_each()\n\nIf !NULL, @skip_css makes cgroup_taskset_for_each() skip the matching\ncss.  The intention of the interface is to make it easy to skip css\u0027s\n(cgroup_subsys_states) which already match the migration target;\nhowever, this is entirely unnecessary as migration taskset doesn\u0027t\ninclude tasks which are already in the target cgroup.  Drop @skip_css\nfrom cgroup_taskset_for_each().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Arnaldo Carvalho de Melo \u003cacme@ghostprotocols.net\u003e\nCc: Daniel Borkmann \u003cdborkman@redhat.com\u003e\n"
    },
    {
      "commit": "cb0f1fe9ba47c202a98a9d41ad5c12c0ac7732e9",
      "tree": "9728e6a5883ddc8136e3a240ecaa9fea8343db66",
      "parents": [
        "89c5509b0d71d1609761bf72d33333ab206dac9f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:41 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:41 2014 -0500"
      },
      "message": "cgroup: move css_set_rwsem locking outside of cgroup_task_migrate()\n\nInstead of repeatedly locking and unlocking css_set_rwsem inside\ncgroup_task_migrate(), update cgroup_attach_task() to grab it outside\nof the loop and update cgroup_task_migrate() to use\nput_css_set_locked().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "89c5509b0d71d1609761bf72d33333ab206dac9f",
      "tree": "746b3319035871869c68df21c8216688055f930f",
      "parents": [
        "889ed9ceaa97bb02bf5d7349e24639f7fc5f4fa0"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:40 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:40 2014 -0500"
      },
      "message": "cgroup: separate out put_css_set_locked() and remove put_css_set_taskexit()\n\nput_css_set() is performed in two steps - it first tries to put\nwithout grabbing css_set_rwsem if such put wouldn\u0027t make the count\nzero.  If that fails, it puts after write-locking css_set_rwsem.  This\npatch separates out the second phase into put_css_set_locked() which\nshould be called with css_set_rwsem locked.\n\nAlso, put_css_set_taskexit() is droped and put_css_set() is made to\ntake @taskexit.  There are only a handful users of these functions.\nNo point in providing different variants.\n\nput_css_locked() will be used by later changes.  This patch doesn\u0027t\nintroduce any functional changes.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "889ed9ceaa97bb02bf5d7349e24639f7fc5f4fa0",
      "tree": "82986b170db353226b40e26a0c8954645b676974",
      "parents": [
        "d66393e54e0a9dc743e440eb36c58bd1158a560e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:40 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:40 2014 -0500"
      },
      "message": "cgroup: remove css_scan_tasks()\n\ncss_scan_tasks() doesn\u0027t have any user left.  Remove it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "d66393e54e0a9dc743e440eb36c58bd1158a560e",
      "tree": "62aa7143ecca51903919ede1cee8f8802c79f042",
      "parents": [
        "96d365e0b86ee7ec6366c99669687e54c9f145e3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:40 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:40 2014 -0500"
      },
      "message": "cpuset: use css_task_iter_start/next/end() instead of css_scan_tasks()\n\nNow that css_task_iter_start/next_end() supports blocking while\niterating, there\u0027s no reason to use css_scan_tasks() which is more\ncumbersome to use and scheduled to be removed.\n\nConvert all css_scan_tasks() usages in cpuset to\ncss_task_iter_start/next/end().  This simplifies the code by removing\nheap allocation and callbacks.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "96d365e0b86ee7ec6366c99669687e54c9f145e3",
      "tree": "274fe1598ce568c61f1ddbe0cdd3c5310afc13e4",
      "parents": [
        "e406d1cfff6ab189c8676072d211809c94fecaf0"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:40 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:40 2014 -0500"
      },
      "message": "cgroup: make css_set_lock a rwsem and rename it to css_set_rwsem\n\nCurrently there are two ways to walk tasks of a cgroup -\ncss_task_iter_start/next/end() and css_scan_tasks().  The latter\nbuilds on the former but allows blocking while iterating.\nUnfortunately, the way css_scan_tasks() is implemented is rather\nnasty, it uses a priority heap of pointers to extract some number of\ntasks in task creation order and loops over them invoking the callback\nand repeats that until it reaches the end.  It requires either\npreallocated heap or may fail under memory pressure, while unlikely to\nbe problematic, the complexity is O(N^2), and in general just nasty.\n\nWe\u0027re gonna convert all css_scan_users() to\ncss_task_iter_start/next/end() and remove css_scan_users().  As\ncss_scan_tasks() users may block, let\u0027s convert css_set_lock to a\nrwsem so that tasks can block during css_task_iter_*() is in progress.\n\nWhile this does increase the chance of possible deadlock scenarios,\ngiven the current usage, the probability is relatively low, and even\nif that happens, the right thing to do is updating the iteration in\nthe similar way to css iterators so that it can handle blocking.\n\nMost conversions are trivial; however, task_cgroup_path() now expects\nto be called with css_set_rwsem locked instead of locking itself.\nThis is because the function is called with RCU read lock held and\nrwsem locking should nest outside RCU read lock.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "e406d1cfff6ab189c8676072d211809c94fecaf0",
      "tree": "d8c9771025242f6a3a1c0b3e430fdb0bba50ce16",
      "parents": [
        "07bc356ed2950048d33d667e933e1b913c6e6b6d"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:39 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:39 2014 -0500"
      },
      "message": "cgroup: reimplement cgroup_transfer_tasks() without using css_scan_tasks()\n\nReimplement cgroup_transfer_tasks() so that it repeatedly fetches the\nfirst task in the cgroup and then tranfers it.  This achieves the same\nresult without using css_scan_tasks() which is scheduled to be\nremoved.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "07bc356ed2950048d33d667e933e1b913c6e6b6d",
      "tree": "5efb91f14c21157285965cfcbf480a3538dda35e",
      "parents": [
        "afeb0f9fd425239aa477c842480f240bfb6325b3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:39 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:39 2014 -0500"
      },
      "message": "cgroup: implement cgroup_has_tasks() and unexport cgroup_task_count()\n\ncgroup_task_count() read-locks css_set_lock and walks all tasks to\ncount them and then returns the result.  The only thing all the users\nwant is determining whether the cgroup is empty or not.  This patch\nimplements cgroup_has_tasks() which tests whether cgroup-\u003ecset_links\nis empty, replaces all cgroup_task_count() usages and unexports it.\n\nNote that the test isn\u0027t synchronized.  This is the same as before.\nThe test has always been racy.\n\nThis will help planned css_set locking update.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\n"
    },
    {
      "commit": "afeb0f9fd425239aa477c842480f240bfb6325b3",
      "tree": "9c13d5f1837c4d99d2ff932c4f13bfc5feadc09a",
      "parents": [
        "56fde9e01de45bcfabbb444d33e8bdd8388d2da0"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:39 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:39 2014 -0500"
      },
      "message": "cgroup: relocate cgroup_enable_task_cg_lists()\n\nMove it above so that prototype isn\u0027t necessary.  Let\u0027s also move the\ndefinition of use_task_css_set_links next to it.\n\nThis is purely cosmetic.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "56fde9e01de45bcfabbb444d33e8bdd8388d2da0",
      "tree": "93eec834c34d59104ca88344c9c8455060c59284",
      "parents": [
        "35585573055f37837eb752ee22eb5523682ca742"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:38 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:38 2014 -0500"
      },
      "message": "cgroup: enable task_cg_lists on the first cgroup mount\n\nTasks are not linked on their css_sets until cgroup task iteration is\nactually used.  This is to avoid incurring overhead on the fork and\nexit paths for systems which have cgroup compiled in but don\u0027t use it.\n     \nThis lazy binding also affects the task migration path.  It has to be\ncareful so that it doesn\u0027t link tasks to css_sets when task_cg_lists\nlinking is not enabled yet.  Unfortunately, this conditional linking\nin the migration path interferes with planned migration updates.\n\nThis patch moves the lazy binding a bit earlier, to the first cgroup\nmount.  It\u0027s a clear indication that cgroup is being used on the\nsystem and task_cg_lists linking is highly likely to be enabled soon\nanyway through \"tasks\" and \"cgroup.procs\" files.\n\nThis allows cgroup_task_migrate() to always link @tsk-\u003ecg_list.  Note\nthat it may still race with cgroup_post_fork() but who wins that race\nis inconsequential.\n\nWhile at it, make use_task_css_set_links a bool, add sanity checks in\ncgroup_enable_task_cg_lists() and css_task_iter_start(), and update\nthe former so that it\u0027s guaranteed and assumes to run only once.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "35585573055f37837eb752ee22eb5523682ca742",
      "tree": "6cf006b6409e6256ca4d3a81eb5701cde931a324",
      "parents": [
        "d3ba07c3aa9ae3e03329b0a7f1a067c0647aa2af"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:38 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:38 2014 -0500"
      },
      "message": "cgroup: drop CGRP_ROOT_SUBSYS_BOUND\n\nBefore kernfs conversion, due to the way super_block lookup works,\ncgroup roots were created and made visible before being fully\ninitialized.  This in turn required a special flag to mark that the\nroot hasn\u0027t been fully initialized so that the destruction path can\ntell fully bound ones from half initialized.\n\nThat flag is CGRP_ROOT_SUBSYS_BOUND and no longer necessary after the\nkernfs conversion as the lookup and creation of new root are atomic\nw.r.t. cgroup_mutex.  This patch removes the flag and passes the\nrequests subsystem mask to cgroup_setup_root() so that it can set the\nrespective mask bits as subsystems are bound.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "d3ba07c3aa9ae3e03329b0a7f1a067c0647aa2af",
      "tree": "17a4968e339822a520f864fe4127be39e0563f5c",
      "parents": [
        "a755180bab81c038a6989d7ab746c702f1b3ec03"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:38 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 13 06:58:38 2014 -0500"
      },
      "message": "cgroup: disallow xattr, release_agent and name if sane_behavior\n\nDisallow more mount options if sane_behavior.  Note that xattr used to\ngenerate warning.\n\nWhile at it, simplify option check in cgroup_mount() and update\nsane_behavior comment in cgroup.h.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "1a11533fbd71792e8c5d36f6763fbce8df0d231d",
      "tree": "f7d31231685d2c52af4804d265956660f0f849fb",
      "parents": [
        "0ab02ca8f887908152d1a96db5130fc661d36a1e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 12 19:06:19 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 12 19:08:28 2014 -0500"
      },
      "message": "Revert \"cgroup: use an ordered workqueue for cgroup destruction\"\n\nThis reverts commit ab3f5faa6255a0eb4f832675507d9e295ca7e9ba.\nExplanation from Hugh:\n\n  It\u0027s because more thorough testing, by others here, found that it\n  wasn\u0027t always solving the problem: so I asked Tejun privately to\n  hold off from sending it in, until we\u0027d worked out why not.\n\n  Most of our testing being on a v3,11-based kernel, it was perfectly\n  possible that the problem was merely our own e.g. missing Tejun\u0027s\n  8a2b75384444 (\"workqueue: fix ordered workqueues in NUMA setups\").\n\n  But that turned out not to be enough to fix it either. Then Filipe\n  pointed out how percpu_ref_kill_and_confirm() uses call_rcu_sched()\n  before we ever get to put the offline on to the workqueue: by the\n  time we get to the workqueue, the ordering has already been lost.\n\n  So, thanks for the Acks, but I\u0027m afraid that this ordered workqueue\n  solution is just not good enough: we should simply forget that patch\n  and provide a different answer.\"\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\n"
    },
    {
      "commit": "a755180bab81c038a6989d7ab746c702f1b3ec03",
      "tree": "3ffdc6604f48f6d4f44bf1f64f6dbffcff0832ab",
      "parents": [
        "776f02fa4e1ad70557c0318c70ce928e0642bee0"
      ],
      "author": {
        "name": "Stephen Rothwell",
        "email": "sfr@canb.auug.org.au",
        "time": "Wed Feb 12 16:10:20 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 12 16:10:45 2014 -0500"
      },
      "message": "sun4M: add include of slab.h for kzalloc\n\nThis was being included implicitly via cgroup.h\u0027s inclusion of xattr.h\n(which has now been removed).\n\nSigned-off-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nAcked-by: Sam Ravnborg \u003csam@ravnborg.org\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "776f02fa4e1ad70557c0318c70ce928e0642bee0",
      "tree": "f2080066461b0ef75a964a8ef2b9a2243d7b5389",
      "parents": [
        "3c9c825b8b50de7dbb015e6bfc04bb2da79364d9"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 12 09:29:50 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 12 09:29:50 2014 -0500"
      },
      "message": "cgroup: remove cgroupfs_root-\u003erefcnt\n\nCurrently, cgroupfs_root and its -\u003etop_cgroup are separated reference\ncounted and the latter\u0027s is ignored.  There\u0027s no reason to do this\nseparately.  This patch removes cgroupfs_root-\u003erefcnt and destroys\ncgroupfs_root when the top_cgroup is released.\n\n* cgroup_put() updated to ignore cgroup_is_dead() test for top\n  cgroups.  cgroup_free_fn() updated to handle root destruction when\n  releasing a top cgroup.\n\n* As root destruction is now bounced through cgroup destruction, it is\n  asynchronous.  Update cgroup_mount() so that it waits for pending\n  release which is currently implemented using msleep().  Converting\n  this to proper wait_queue isn\u0027t hard but likely unnecessary.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "3c9c825b8b50de7dbb015e6bfc04bb2da79364d9",
      "tree": "d12fdc2cc0c232e07f1cccb1f72435210e18075e",
      "parents": [
        "e61734c55c24cdf11b07e52a74aec4dc4a7f4bd0"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 12 09:29:50 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 12 09:29:50 2014 -0500"
      },
      "message": "cgroup: rename cgroupfs_root-\u003enumber_of_cgroups to -\u003enr_cgrps and make it atomic_t\n\nroot-\u003enumber_of_cgroups is currently an integer protected with\ncgroup_mutex.  Except for sanity checks and proc reporting, the only\nplace it\u0027s used is to check whether the root has any child during\nremount; however, this is a bit flawed as the counter is not\ndecremented when the cgroup is unlinked but when it\u0027s released,\nmeaning that there could be an extended period where all cgroups are\nremoved but remount is still not allowed because some internal objects\nare lingering.  While not perfect either, it\u0027d be better to use\nemptiness test on root-\u003etop_cgroup.children.\n\nThis patch updates cgroup_remount() to test top_cgroup\u0027s children\ninstead, which makes number_of_cgroups only actual usage statistics\nprinting in proc implemented in proc_cgroupstats_show().  Let\u0027s\nshorten its name and make it an atomic_t so that we don\u0027t have to\nworry about its synchronization.  It\u0027s purely auxiliary at this point.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "e61734c55c24cdf11b07e52a74aec4dc4a7f4bd0",
      "tree": "bab256faae539cd38840bfc886317f80385acae4",
      "parents": [
        "6f30558f37bfbd428e3854c2c34b5c32117c8f7e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 12 09:29:50 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 12 09:29:50 2014 -0500"
      },
      "message": "cgroup: remove cgroup-\u003ename\n\ncgroup-\u003ename handling became quite complicated over time involving\ndedicated struct cgroup_name for RCU protection.  Now that cgroup is\non kernfs, we can drop all of it and simply use kernfs_name/path() and\nfriends.  Replace cgroup-\u003ename and all related code with kernfs\nname/path constructs.\n\n* Reimplement cgroup_name() and cgroup_path() as thin wrappers on top\n  of kernfs counterparts, which involves semantic changes.\n  pr_cont_cgroup_name() and pr_cont_cgroup_path() added.\n\n* cgroup-\u003ename handling dropped from cgroup_rename().\n\n* All users of cgroup_name/path() updated to the new semantics.  Users\n  which were formatting the string just to printk them are converted\n  to use pr_cont_cgroup_name/path() instead, which simplifies things\n  quite a bit.  As cgroup_name() no longer requires RCU read lock\n  around it, RCU lockings which were protecting only cgroup_name() are\n  removed.\n\nv2: Comment above oom_info_lock updated as suggested by Michal.\n\nv3: dummy_top doesn\u0027t have a kn associated and\n    pr_cont_cgroup_name/path() ended up calling the matching kernfs\n    functions with NULL kn leading to oops.  Test for NULL kn and\n    print \"/\" if so.  This issue was reported by Fengguang Wu.\n\nv4: Rebased on top of 0ab02ca8f887 (\"cgroup: protect modifications to\n    cgroup_idr with cgroup_mutex\").\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\n"
    },
    {
      "commit": "6f30558f37bfbd428e3854c2c34b5c32117c8f7e",
      "tree": "c02c711bf750ea306cc008a787335fedfba7feab",
      "parents": [
        "21a2d3430ba8c188af405a5c2eb9c06bdcb6add6"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 12 09:29:50 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 12 09:29:50 2014 -0500"
      },
      "message": "cgroup: make cgroup hold onto its kernfs_node\n\ncgroup currently releases its kernfs_node when it gets removed.  While\nnot buggy, this makes cgroup-\u003ekn access rules complicated than\nnecessary and leads to things like get/put protection around\nkernfs_remove() in cgroup_destroy_locked().  In addition, we want to\nuse kernfs_name/path() and friends but also want to be able to\ndetermine a cgroup\u0027s name between removal and release.\n\nThis patch makes cgroup hold onto its kernfs_node until freed so that\ncgroup-\u003ekn is always accessible.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "21a2d3430ba8c188af405a5c2eb9c06bdcb6add6",
      "tree": "7fc1d9be2e3297a53c64c7599bf2760cacbf6187",
      "parents": [
        "0adb070426dde2fd0b84e7f4f5cefcd8f0b24410"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 12 09:29:49 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 12 09:29:49 2014 -0500"
      },
      "message": "cgroup: simplify dynamic cftype addition and removal\n\nDynamic cftype addition and removal using cgroup_add/rm_cftypes()\nrespectively has been quite hairy due to vfs i_mutex.  As i_mutex\nnests outside cgroup_mutex, cgroup_mutex has to be released and\nregrabbed on each iteration through the hierarchy complicating the\nprocess.  Now that i_mutex is no longer in play, it can be simplified.\n\n* Just holding cgroup_tree_mutex is enough.  No need to meddle with\n  cgroup_mutex.\n\n* No reason to play the unlock - relock - check serial_nr dancing.\n  Everything can be atomically while holding cgroup_tree_mutex.\n\n* cgroup_cfts_prepare() is replaced with direct locking of\n  cgroup_tree_mutex.\n\n* cgroup_cfts_commit() no longer fiddles with locking.  It just\n  applies the cftypes change to the existing cgroups in the hierarchy.\n  Renamed to cgroup_cfts_apply().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "0adb070426dde2fd0b84e7f4f5cefcd8f0b24410",
      "tree": "d6acf3d7e39fa838998af178ef340f1d159d2fb2",
      "parents": [
        "80b13586997d8e584caa772bd99e2a3e55ac6abe"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 12 09:29:48 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 12 09:29:48 2014 -0500"
      },
      "message": "cgroup: remove cftype_set\n\ncftype_set was added primarily to allow registering the same cftype\narray more than once for different subsystems.  Nobody uses or needs\nsuch thing and it\u0027s already broken because each cftype has -\u003ess\npointer which is initialized during registration.\n\nLet\u0027s add list_head -\u003enode to cftype and use the first cftype entry in\nthe array to link them instead of allocating separate cftype_set.\nWhile at it, trigger WARN if cft seems previously initialized during\nregistration.\n\nThis simplifies cftype handling a bit.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "80b13586997d8e584caa772bd99e2a3e55ac6abe",
      "tree": "ced02346669ef3d032ffe6a4a8f4d064fd46840c",
      "parents": [
        "86bf4b68759141459864ebd36ac3038a9cda895b"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 12 09:29:48 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 12 09:29:48 2014 -0500"
      },
      "message": "cgroup: relocate cgroup_rm_cftypes()\n\ncftype handling is about to be revamped.  Relocate cgroup_rm_cftypes()\nabove cgroup_add_cftypes() in preparation.  This is pure relocation.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "86bf4b68759141459864ebd36ac3038a9cda895b",
      "tree": "81c1bfe990c4752f5056c9df02258391fc9ca464",
      "parents": [
        "2bd59d48ebfb3df41ee56938946ca0dd30887312"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 12 09:29:48 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 12 09:29:48 2014 -0500"
      },
      "message": "cgroup: warn if \"xattr\" is specified with \"sane_behavior\"\n\nMount option \"xattr\" is no longer necessary as it\u0027s enabled by default\non kernfs.  Warn if \"xattr\" is specified with \"sane_behavior\" so that\nthe option can be removed in the future.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "2bd59d48ebfb3df41ee56938946ca0dd30887312",
      "tree": "8e18b5e94b96f42418113687f27c61fa1ec5e147",
      "parents": [
        "f2e85d574e881ff3c597518c1ab48c86f9109880"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:49 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:49 2014 -0500"
      },
      "message": "cgroup: convert to kernfs\n\ncgroup filesystem code was derived from the original sysfs\nimplementation which was heavily intertwined with vfs objects and\nlocking with the goal of re-using the existing vfs infrastructure.\nThat experiment turned out rather disastrous and sysfs switched, a\nlong time ago, to distributed filesystem model where a separate\nrepresentation is maintained which is queried by vfs.  Unfortunately,\ncgroup stuck with the failed experiment all these years and\naccumulated even more problems over time.\n\nLocking and object lifetime management being entangled with vfs is\nprobably the most egregious.  vfs is never designed to be misused like\nthis and cgroup ends up jumping through various convoluted dancing to\nmake things work.  Even then, operations across multiple cgroups can\u0027t\nbe done safely as it\u0027ll deadlock with rename locking.\n\nRecently, kernfs is separated out from sysfs so that it can be used by\nusers other than sysfs.  This patch converts cgroup to use kernfs,\nwhich will bring the following benefits.\n\n* Separation from vfs internals.  Locking and object lifetime\n  management is contained in cgroup proper making things a lot\n  simpler.  This removes significant amount of locking convolutions,\n  hairy object lifetime rules and the restriction on multi-cgroup\n  operations.\n\n* Can drop a lot of code to implement filesystem interface as most are\n  provided by kernfs.\n\n* Proper \"severing\" semantics, which allows controllers to not worry\n  about lingering file accesses after offline.\n\nWhile the preceding patches did as much as possible to make the\ntransition less painful, large part of the conversion has to be one\ndiscrete step making this patch rather large.  The rest of the commit\nmessage lists notable changes in different areas.\n\nOverall\n-------\n\n* vfs constructs replaced with kernfs ones.  cgroup-\u003edentry w/ -\u003ekn,\n  cgroupfs_root-\u003esb w/ -\u003ekf_root.\n\n* All dentry accessors are removed.  Helpers to map from kernfs\n  constructs are added.\n\n* All vfs plumbing around dentry, inode and bdi removed.\n\n* cgroup_mount() now directly looks for matching root and then\n  proceeds to create a new one if not found.\n\nSynchronization and object lifetime\n-----------------------------------\n\n* vfs inode locking removed.  Among other things, this removes the\n  need for the convolution in cgroup_cfts_commit().  Future patches\n  will further simplify it.\n\n* vfs refcnting replaced with cgroup internal ones.  cgroup-\u003erefcnt,\n  cgroupfs_root-\u003erefcnt added.  cgroup_put_root() now directly puts\n  root-\u003erefcnt and when it reaches zero proceeds to destroy it thus\n  merging cgroup_put_root() and the former cgroup_kill_sb().\n  Simliarly, cgroup_put() now directly schedules cgroup_free_rcu()\n  when refcnt reaches zero.\n\n* Unlike before, kernfs objects don\u0027t hold onto cgroup objects.  When\n  cgroup destroys a kernfs node, all existing operations are drained\n  and the association is broken immediately.  The same for\n  cgroupfs_roots and mounts.\n\n* All operations which come through kernfs guarantee that the\n  associated cgroup is and stays valid for the duration of operation;\n  however, there are two paths which need to find out the associated\n  cgroup from dentry without going through kernfs -\n  css_tryget_from_dir() and cgroupstats_build().  For these two,\n  kernfs_node-\u003epriv is RCU managed so that they can dereference it\n  under RCU read lock.\n\nFile and directory handling\n---------------------------\n\n* File and directory operations converted to kernfs_ops and\n  kernfs_syscall_ops.\n\n* xattrs is implicitly supported by kernfs.  No need to worry about it\n  from cgroup.  This means that \"xattr\" mount option is no longer\n  necessary.  A future patch will add a deprecated warning message\n  when sane_behavior.\n\n* When cftype-\u003emax_write_len \u003e PAGE_SIZE, it\u0027s necessary to make a\n  private copy of one of the kernfs_ops to set its atomic_write_len.\n  cftype-\u003ekf_ops is added and cgroup_init/exit_cftypes() are updated\n  to handle it.\n\n* cftype-\u003elockdep_key added so that kernfs lockdep annotation can be\n  per cftype.\n\n* Inidividual file entries and open states are now managed by kernfs.\n  No need to worry about them from cgroup.  cfent, cgroup_open_file\n  and their friends are removed.\n\n* kernfs_nodes are created deactivated and kernfs_activate()\n  invocations added to places where creation of new nodes are\n  committed.\n\n* cgroup_rmdir() uses kernfs_[un]break_active_protection() for\n  self-removal.\n\nv2: - Li pointed out in an earlier patch that specifying \"name\u003d\"\n      during mount without subsystem specification should succeed if\n      there\u0027s an existing hierarchy with a matching name although it\n      should fail with -EINVAL if a new hierarchy should be created.\n      Prior to the conversion, this used by handled by deferring\n      failure from NULL return from cgroup_root_from_opts(), which was\n      necessary because root was being created before checking for\n      existing ones.  Note that cgroup_root_from_opts() returned an\n      ERR_PTR() value for error conditions which require immediate\n      mount failure.\n\n      As we now have separate search and creation steps, deferring\n      failure from cgroup_root_from_opts() is no longer necessary.\n      cgroup_root_from_opts() is updated to always return ERR_PTR()\n      value on failure.\n\n    - The logic to match existing roots is updated so that a mount\n      attempt with a matching name but different subsys_mask are\n      rejected.  This was handled by a separate matching loop under\n      the comment \"Check for name clashes with existing mounts\" but\n      got lost during conversion.  Merge the check into the main\n      search loop.\n\n    - Add __rcu __force casting in RCU_INIT_POINTER() in\n      cgroup_destroy_locked() to avoid the sparse address space\n      warning reported by kbuild test bot.  Maybe we want an explicit\n      interface to use kn-\u003epriv as RCU protected pointer?\n\nv3: Make CONFIG_CGROUPS select CONFIG_KERNFS.\n\nv4: Rebased on top of 0ab02ca8f887 (\"cgroup: protect modifications to\n    cgroup_idr with cgroup_mutex\").\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: kbuild test robot fengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "f2e85d574e881ff3c597518c1ab48c86f9109880",
      "tree": "ee31ff03e65f841fe07d8b27bba51b3de3777486",
      "parents": [
        "59f5296b51b86718dd6eecf0a268b2f1a1ec0a2d"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:49 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:49 2014 -0500"
      },
      "message": "cgroup: relocate functions in preparation of kernfs conversion\n\nRelocate cgroup_init/exit_root_id(), cgroup_free_root(),\ncgroup_kill_sb() and cgroup_file_name() in preparation of kernfs\nconversion.\n\nThese are pure relocations to make kernfs conversion easier to follow.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "59f5296b51b86718dd6eecf0a268b2f1a1ec0a2d",
      "tree": "0854f2b46c93190b8fb5bb1e0a992f1e5b77320e",
      "parents": [
        "b1664924062393bb048203bd4622e0b1c9e1d328"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:49 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:49 2014 -0500"
      },
      "message": "cgroup: misc preps for kernfs conversion\n\n* Un-inline seq_css().  After kernfs conversion, the function will\n  need to dereference internal data structures.\n\n* Add cgroup_get/put_root() and replace direct super_block-\u003es_active\n  manipulatinos with them.  These will be converted to kernfs_root\n  refcnting.\n\n* Add cgroup_get/put() and replace dget/put() on cgrp-\u003edentry with\n  them.  These will be converted to kernfs refcnting.\n\n* Update current_css_set_cg_links_read() to use cgroup_name() instead\n  of reaching into the dentry name.  The end result is the same.\n\nThese changes don\u0027t make functional differences but will make\ntransition to kernfs easier.\n\nv2: Rebased on top of 0ab02ca8f887 (\"cgroup: protect modifications to\n    cgroup_idr with cgroup_mutex\").\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "b1664924062393bb048203bd4622e0b1c9e1d328",
      "tree": "4fbbb4a62793e72d9dbe44c71db0ea75f54cc21b",
      "parents": [
        "2da440a26ce4743bd3e71ba964ba3f983d09bba5"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:49 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:49 2014 -0500"
      },
      "message": "cgroup: introduce cgroup_ino()\n\nmm/memory-failure.c::hwpoison_filter_task() has been reaching into\ncgroup to extract the associated ino to be used as a filtering\ncriterion.  This is an implementation detail which shouldn\u0027t be\ndepended upon from outside cgroup proper and is about to change with\nthe scheduled kernfs conversion.\n\nThis patch introduces a proper interface to determine the associated\nino, cgroup_ino(), and updates hwpoison_filter_task() to use it\ninstead of reaching directly into cgroup.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "2da440a26ce4743bd3e71ba964ba3f983d09bba5",
      "tree": "3a8abc5740529ac5ba918fb464622f43beb6a533",
      "parents": [
        "5f46990787e2721b4db190ddc8af6fdbe8f010d7"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:48 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:48 2014 -0500"
      },
      "message": "cgroup: introduce cgroup_init/exit_cftypes()\n\nFactor out cft-\u003ess initialization into cgroup_init_cftypes() from\ncgroup_add_cftypes() and add cft-\u003ess clearing to cgroup_rm_cftypes()\nthrough cgroup_exit_cftypes().\n\nThis doesn\u0027t make any meaningful difference now but the two new\nfunctions will be expanded during kernfs transition.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "5f46990787e2721b4db190ddc8af6fdbe8f010d7",
      "tree": "5a5e8439e8560eb95a86f58036b5282e1a7036b6",
      "parents": [
        "de00ffa56ea3132c6013fc8f07133b8a1014cf53"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:48 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:48 2014 -0500"
      },
      "message": "cgroup: update the meaning of cftype-\u003emax_write_len\n\ncftype-\u003emax_write_len is used to extend the maximum size of writes.\nIt\u0027s interpreted in such a way that the actual maximum size is one\nless than the specified value.  The default size is defined by\nCGROUP_LOCAL_BUFFER_SIZE.  Its interpretation is quite confusing - its\nvalue is decremented by 1 and then compared for equality with max\nsize, which means that the actual default size is\nCGROUP_LOCAL_BUFFER_SIZE - 2, which is 62 chars.\n\nThere\u0027s no point in having a limit that low.  Update its definition so\nthat it means the actual string length sans termination and anything\nbelow PAGE_SIZE-1 is treated as PAGE_SIZE-1.\n\n.max_write_len for \"release_agent\" is updated to PATH_MAX-1 and\ncgroup_release_agent_write() is updated so that the redundant strlen()\ncheck is removed and it uses strlcpy() instead of strcpy().\n.max_write_len initializations in blk-throttle.c and cfq-iosched.c are\nno longer necessary and removed.  The one in cpuset is kept unchanged\nas it\u0027s an approximated value to begin with.\n\nThis will also make transition to kernfs smoother.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "de00ffa56ea3132c6013fc8f07133b8a1014cf53",
      "tree": "25e6f273dc9374ad2a4507bb42627d1262e4582e",
      "parents": [
        "8d7e6fb0a1db970ac3589f87af0f2a20ef46654b"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:48 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:48 2014 -0500"
      },
      "message": "cgroup: make cgroup_subsys-\u003ebase_cftypes use cgroup_add_cftypes()\n\nCurrently, cgroup_subsys-\u003ebase_cftypes registration is different from\ndynamic cftypes registartion.  Instead of going through\ncgroup_add_cftypes(), cgroup_init_subsys() invokes\ncgroup_init_cftsets() which makes use of cgroup_subsys-\u003ebase_cftset\nwhich doesn\u0027t involve dynamic allocation.\n\nWhile avoiding dynamic allocation is somewhat nice, having two\nseparate paths for cftypes registration is nasty, especially as we\u0027re\nplanning to add more operations during cftypes registration.\n\nThis patch drops cgroup_init_cftsets() and cgroup_subsys-\u003ebase_cftset\nand registers base_cftypes using cgroup_add_cftypes().  This is done\nas a separate step in cgroup_init() instead of a part of\ncgroup_init_subsys().  This is because cgroup_init_subsys() can be\ncalled very early during boot when kmalloc() isn\u0027t available yet.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "8d7e6fb0a1db970ac3589f87af0f2a20ef46654b",
      "tree": "f6b10b105575da92908db304722450511e9cdf23",
      "parents": [
        "d427dfeb120b92c0c5e2ca9d1ec6952de67ebad9"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:48 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:48 2014 -0500"
      },
      "message": "cgroup: update cgroup name handling\n\nStraightforward updates to cgroup name handling in preparation of\nkernfs conversion.\n\n* cgroup_alloc_name() is updated to take const char * isntead of\n  dentry * for name source.\n\n* cgroup name formatting is separated out into cgroup_file_name().\n  While at it, buffer length protection is added.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "d427dfeb120b92c0c5e2ca9d1ec6952de67ebad9",
      "tree": "e43b6acf5f2d58ec60847900ecea418789693702",
      "parents": [
        "8e30e2b8ba0ee58aa0f442d0b4a3cac1a4f2efb5"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:48 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:48 2014 -0500"
      },
      "message": "cgroup: factor out cgroup_setup_root() from cgroup_mount()\n\nFactor out new root initialization into cgroup_setup_root() from\ncgroup_mount().  This makes it easier to follow and will ease kernfs\nconversion.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "8e30e2b8ba0ee58aa0f442d0b4a3cac1a4f2efb5",
      "tree": "b1a796507f905ef496f7d6b63e4f2451e756ea5c",
      "parents": [
        "4ac0601744eb86e982fbdadde35f1945f7ce5882"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:48 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:48 2014 -0500"
      },
      "message": "cgroup: restructure locking and error handling in cgroup_mount()\n\ncgroup is scheduled to be converted to kernfs.  After conversion,\ncgroup_mount() won\u0027t use the sget() machinery for finding out existing\nsuper_blocks but instead would do that directly.  It\u0027ll search the\nexisting cgroupfs_roots for a matching one and create a new one iff a\nmatch doesn\u0027t exist.  To ease such conversion, this patch restructures\nlocking and error handling of the function.\n\ncgroup_tree_mutex and cgroup_mutex are grabbed from the get-go and\nheld until return.  For now, due to the way vfs locks nest outside\ncgroup mutexes, the two cgroup mutexes are temporarily dropped across\nsget() and inode mutex locking, which looks quite ridiculous; however,\nthese will be removed through kernfs conversion and structuring the\ncode this way makes the conversion less painful.\n\nThe error goto labels are consolidated to two.  This looks unwieldy\nnow but the next patch will factor out creation of new root into a\nseparate function with accompanying error handling and it\u0027ll look a\nlot better.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "4ac0601744eb86e982fbdadde35f1945f7ce5882",
      "tree": "887f0cbc2853802ad113b87f0d2c5b764e2619ce",
      "parents": [
        "ace2bee8135a3dc725958b8d08c55ee9df813d39"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:47 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:47 2014 -0500"
      },
      "message": "cgroup: release cgroup_mutex over file removals\n\nNow that cftypes and all tree modification operations are protected by\ncgroup_tree_mutex, we can drop cgroup_mutex while deleting files and\ndirectories.  Drop cgroup_mutex over removals.\n\nThis doesn\u0027t make any noticeable difference now but is to help kernfs\nconversion.  In kernfs, removals are sync points which drain in-flight\noperations as those operations would grab cgroup_mutex, trying to\ndelete under cgroup_mutex would deadlock.  This can be resolved by\njust holding the outer cgroup_tree_mutex which nests outside both\nkernfs active reference and cgroup_mutex.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "ace2bee8135a3dc725958b8d08c55ee9df813d39",
      "tree": "8221115e4d100e566a9405bb25db79b0a751c480",
      "parents": [
        "5a17f543ed6808e9085063277fe46795dea484bd"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:47 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:47 2014 -0500"
      },
      "message": "cgroup: introduce cgroup_tree_mutex\n\nCurrently cgroup uses combination of inode-\u003ei_mutex\u0027es and\ncgroup_mutex for synchronization.  With the scheduled kernfs\nconversion, i_mutex\u0027es will be removed.  Unfortunately, just using\ncgroup_mutex isn\u0027t possible.  All kernfs file and syscall operations,\nmost of which require grabbing cgroup_mutex, will be called with\nkernfs active ref held and, if we try to perform kernfs removals under\ncgroup_mutex, it can deadlock as kernfs_remove() tries to drain the\ntarget node.\n\nLet\u0027s introduce a new outer mutex, cgroup_tree_mutex, which protects\nstuff used during hierarchy changing operations - cftypes and all the\noperations which may affect the cgroupfs.  It also covers css\nassociation and iteration.  This allows cgroup_css(), for_each_css()\nand other css iterators to be called under cgroup_tree_mutex.  The new\nmutex will nest above both kernfs\u0027s active ref protection and\ncgroup_mutex.  By protecting tree modifications with a separate outer\nmutex, we can get rid of the forementioned deadlock condition.\n\nActual file additions and removals now require cgroup_tree_mutex\ninstead of cgroup_mutex.  Currently, cgroup_tree_mutex is never used\nwithout cgroup_mutex; however, we\u0027ll soon add hierarchy modification\nsections which are only protected by cgroup_tree_mutex.  In the\nfuture, we might want to make the locking more granular by better\nsplitting the coverages of the two mutexes.  For now, this should do.\n\nv2: Rebased on top of 0ab02ca8f887 (\"cgroup: protect modifications to\n    cgroup_idr with cgroup_mutex\").\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "5a17f543ed6808e9085063277fe46795dea484bd",
      "tree": "8b6e2afd5619bcff76438470670247eb55bef908",
      "parents": [
        "398f878789fceb51bf5e424b753a3756643513c4"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:47 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:52:47 2014 -0500"
      },
      "message": "cgroup: improve css_from_dir() into css_tryget_from_dir()\n\ncss_from_dir() returns the matching css (cgroup_subsys_state) given a\ndentry and subsystem.  The function doesn\u0027t pin the css before\nreturning and requires the caller to be holding RCU read lock or\ncgroup_mutex and handling pinning on the caller side.\n\nGiven that users of the function are likely to want to pin the\nreturned css (both existing users do) and that getting and putting\ncss\u0027s are very cheap, there\u0027s no reason for the interface to be tricky\nlike this.\n\nRename css_from_dir() to css_tryget_from_dir() and make it try to pin\nthe found css and return it only if pinning succeeded.  The callers\nare updated so that they no longer do RCU locking and pinning around\nthe function and just use the returned css.\n\nThis will also ease converting cgroup to kernfs.\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\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\n"
    },
    {
      "commit": "398f878789fceb51bf5e424b753a3756643513c4",
      "tree": "cd80a446bd1e2f1adc5652a805ac2f98a40b003e",
      "parents": [
        "f7cef064aa01a1ac682c1945cc168b878cb118ff",
        "0ab02ca8f887908152d1a96db5130fc661d36a1e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:02:59 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 11:02:59 2014 -0500"
      },
      "message": "Merge branch \u0027cgroup/for-3.14-fixes\u0027 into cgroup/for-3.15\n\nPull for-3.14-fixes to receive 0ab02ca8f887 (\"cgroup: protect\nmodifications to cgroup_idr with cgroup_mutex\") prior to kernfs\nconversion series to avoid non-trivial conflicts.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "0ab02ca8f887908152d1a96db5130fc661d36a1e",
      "tree": "81f7be1f4da646a88ab09bd7c01927a4f2a180bf",
      "parents": [
        "48573a893303986e3b0b2974d6fb11f3d1bb7064"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Tue Feb 11 16:05:46 2014 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 11 10:38:30 2014 -0500"
      },
      "message": "cgroup: protect modifications to cgroup_idr with cgroup_mutex\n\nSetup cgroupfs like this:\n  # mount -t cgroup -o cpuacct xxx /cgroup\n  # mkdir /cgroup/sub1\n  # mkdir /cgroup/sub2\n\nThen run these two commands:\n  # for ((; ;)) { mkdir /cgroup/sub1/tmp \u0026\u0026 rmdir /mnt/sub1/tmp; } \u0026\n  # for ((; ;)) { mkdir /cgroup/sub2/tmp \u0026\u0026 rmdir /mnt/sub2/tmp; } \u0026\n\nAfter seconds you may see this warning:\n\n------------[ cut here ]------------\nWARNING: CPU: 1 PID: 25243 at lib/idr.c:527 sub_remove+0x87/0x1b0()\nidr_remove called for id\u003d6 which is not allocated.\n...\nCall Trace:\n [\u003cffffffff8156063c\u003e] dump_stack+0x7a/0x96\n [\u003cffffffff810591ac\u003e] warn_slowpath_common+0x8c/0xc0\n [\u003cffffffff81059296\u003e] warn_slowpath_fmt+0x46/0x50\n [\u003cffffffff81300aa7\u003e] sub_remove+0x87/0x1b0\n [\u003cffffffff810f3f02\u003e] ? css_killed_work_fn+0x32/0x1b0\n [\u003cffffffff81300bf5\u003e] idr_remove+0x25/0xd0\n [\u003cffffffff810f2bab\u003e] cgroup_destroy_css_killed+0x5b/0xc0\n [\u003cffffffff810f4000\u003e] css_killed_work_fn+0x130/0x1b0\n [\u003cffffffff8107cdbc\u003e] process_one_work+0x26c/0x550\n [\u003cffffffff8107eefe\u003e] worker_thread+0x12e/0x3b0\n [\u003cffffffff81085f96\u003e] kthread+0xe6/0xf0\n [\u003cffffffff81570bac\u003e] ret_from_fork+0x7c/0xb0\n---[ end trace 2d1577ec10cf80d0 ]---\n\nIt\u0027s because allocating/removing cgroup ID is not properly synchronized.\n\nThe bug was introduced when we converted cgroup_ida to cgroup_idr.\nWhile synchronization is already done inside ida_simple_{get,remove}(),\nusers are responsible for concurrent calls to idr_{alloc,remove}().\n\ntj: Refreshed on top of b58c89986a77 (\"cgroup: fix error return from\ncgroup_create()\").\n\nFixes: 4e96ee8e981b (\"cgroup: convert cgroup_ida to cgroup_idr\")\nCc: \u003cstable@vger.kernel.org\u003e #3.12+\nReported-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "f7cef064aa01a1ac682c1945cc168b878cb118ff",
      "tree": "5dc256a4e01689eed60ab3e7a7ab8e50c5bcf602",
      "parents": [
        "1a698a4aba26dd58e8409d325a9a9db22f7cd2db",
        "ba341d55a420ab4fdd1a53fd395fd59bd65de880"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:37:44 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:37:44 2014 -0500"
      },
      "message": "Merge branch \u0027driver-core-next\u0027 into cgroup/for-3.15\n\nPending kernfs conversion depends on kernfs improvements in\ndriver-core-next.  Pull it into for-3.15.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "1a698a4aba26dd58e8409d325a9a9db22f7cd2db",
      "tree": "bc4b414c7eca762c0bac1176bd1d63b74c9f965e",
      "parents": [
        "3417ae1f5f59bbf36c3defbbf2a76c5ca498db2a",
        "48573a893303986e3b0b2974d6fb11f3d1bb7064"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:37:14 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:37:14 2014 -0500"
      },
      "message": "Merge branch \u0027for-3.14-fixes\u0027 into for-3.15\n\nPending kernfs conversion depends on fixes in for-3.14-fixes.  Pull it\ninto for-3.15.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "3417ae1f5f59bbf36c3defbbf2a76c5ca498db2a",
      "tree": "d5b03fc5ec2b71b4fde60ca6337ad45e1fd0ab45",
      "parents": [
        "69e943b7d3c2dcca1087e03e556ac6cb0d4433b4"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:37:01 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:37:01 2014 -0500"
      },
      "message": "cgroup: remove cgroup_root_mutex\n\ncgroup_root_mutex was added to avoid deadlock involving namespace_sem\nvia cgroup_show_options().  It added a lot of overhead for the small\npurpose of it and, because it\u0027s nested under cgroup_mutex, it has very\nlimited usefulness.  The previous patch made cgroup_show_options() not\nuse cgroup_root_mutex, so nobody needs it anymore.  Remove it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "69e943b7d3c2dcca1087e03e556ac6cb0d4433b4",
      "tree": "79bce2147f3eebb43e4300120a3a0d81b0a97e1c",
      "parents": [
        "aec25020f5d4b69aea5317551d1cb7043f6b04fb"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:36:58 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:36:58 2014 -0500"
      },
      "message": "cgroup: update locking in cgroup_show_options()\n\ncgroup_show_options() grabs cgroup_root_mutex to protect the options\nchanging while printing; however, holding root_mutex or not doesn\u0027t\nreally make much difference for the function.  subsys_mask can be\natomically tested and most of the options aren\u0027t allowed to change\nanyway once mounted.\n\nThe only field which needs synchronization is -\u003erelease_agent_path.\nThis patch introduces a dedicated spinlock to synchronize accesses to\nthe field and drops cgroup_root_mutex locking from\ncgroup_show_options().  The next patch will remove cgroup_root_mutex.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "aec25020f5d4b69aea5317551d1cb7043f6b04fb",
      "tree": "ed9c89b1468542a9d5be6f20af24db8d6251c90b",
      "parents": [
        "073219e995b4a3f8cf1ce8228b7ef440b6994ac0"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:36:58 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:36:58 2014 -0500"
      },
      "message": "cgroup: rename cgroup_subsys-\u003esubsys_id to -\u003eid\n\nIt\u0027s no longer referenced outside cgroup core, so renaming is easy.\nLet\u0027s rename it for consistency \u0026 brevity.\n\nThis patch is pure rename.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "073219e995b4a3f8cf1ce8228b7ef440b6994ac0",
      "tree": "d140fc2e94bd8fd09270286b7267fb087a79f288",
      "parents": [
        "3ed80a62bf959d34ebd4d553b026fbe7e6fbcc54"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:36:58 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:36:58 2014 -0500"
      },
      "message": "cgroup: clean up cgroup_subsys names and initialization\n\ncgroup_subsys is a bit messier than it needs to be.\n\n* The name of a subsys can be different from its internal identifier\n  defined in cgroup_subsys.h.  Most subsystems use the matching name\n  but three - cpu, memory and perf_event - use different ones.\n\n* cgroup_subsys_id enums are postfixed with _subsys_id and each\n  cgroup_subsys is postfixed with _subsys.  cgroup.h is widely\n  included throughout various subsystems, it doesn\u0027t and shouldn\u0027t\n  have claim on such generic names which don\u0027t have any qualifier\n  indicating that they belong to cgroup.\n\n* cgroup_subsys-\u003esubsys_id should always equal the matching\n  cgroup_subsys_id enum; however, we require each controller to\n  initialize it and then BUG if they don\u0027t match, which is a bit\n  silly.\n\nThis patch cleans up cgroup_subsys names and initialization by doing\nthe followings.\n\n* cgroup_subsys_id enums are now postfixed with _cgrp_id, and each\n  cgroup_subsys with _cgrp_subsys.\n\n* With the above, renaming subsys identifiers to match the userland\n  visible names doesn\u0027t cause any naming conflicts.  All non-matching\n  identifiers are renamed to match the official names.\n\n  cpu_cgroup -\u003e cpu\n  mem_cgroup -\u003e memory\n  perf -\u003e perf_event\n\n* controllers no longer need to initialize -\u003esubsys_id and -\u003ename.\n  They\u0027re generated in cgroup core and set automatically during boot.\n\n* Redundant cgroup_subsys declarations removed.\n\n* While updating BUG_ON()s in cgroup_init_early(), convert them to\n  WARN()s.  BUGging that early during boot is stupid - the kernel\n  can\u0027t print anything, even through serial console and the trap\n  handler doesn\u0027t even link stack frame properly for back-tracing.\n\nThis patch doesn\u0027t introduce any behavior changes.\n\nv2: Rebased on top of fe1217c4f3f7 (\"net: net_cls: move cgroupfs\n    classid handling into core\").\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Neil Horman \u003cnhorman@tuxdriver.com\u003e\nAcked-by: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nAcked-by: \"Rafael J. Wysocki\" \u003crjw@rjwysocki.net\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nAcked-by: Aristeu Rozanski \u003caris@redhat.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@redhat.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Serge E. Hallyn \u003cserue@us.ibm.com\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nCc: Thomas Graf \u003ctgraf@suug.ch\u003e\n"
    },
    {
      "commit": "3ed80a62bf959d34ebd4d553b026fbe7e6fbcc54",
      "tree": "3ec2ce050e41b056a8de66f24eac76dd2d5912e5",
      "parents": [
        "af6363374cbda5007e46efa99f7346efd4eea5fc"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:36:58 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:36:58 2014 -0500"
      },
      "message": "cgroup: drop module support\n\nWith module supported dropped from net_prio, no controller is using\ncgroup module support.  None of actual resource controllers can be\nbuilt as a module and we aren\u0027t gonna add new controllers which don\u0027t\ncontrol resources.  This patch drops module support from cgroup.\n\n* cgroup_[un]load_subsys() and cgroup_subsys-\u003emodule removed.\n\n* As there\u0027s no point in distinguishing IS_BUILTIN() and IS_MODULE(),\n  cgroup_subsys.h now uses IS_ENABLED() directly.\n\n* enum cgroup_subsys_id now exactly matches the list of enabled\n  controllers as ordered in cgroup_subsys.h.\n\n* cgroup_subsys[] is now a contiguously occupied array.  Size\n  specification is no longer necessary and dropped.\n\n* for_each_builtin_subsys() is removed and for_each_subsys() is\n  updated to not require any locking.\n\n* module ref handling is removed from rebind_subsystems().\n\n* Module related comments dropped.\n\nv2: Rebased on top of fe1217c4f3f7 (\"net: net_cls: move cgroupfs\n    classid handling into core\").\n\nv3: Added {} around the if (need_forkexit_callback) block in\n    cgroup_post_fork() for readability as suggested by Li.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "af6363374cbda5007e46efa99f7346efd4eea5fc",
      "tree": "413959c968a55bbe8f2592a82b9cc6e13308f508",
      "parents": [
        "38dbfb59d1175ef458d006556061adeaa8751b72"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:36:58 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:36:58 2014 -0500"
      },
      "message": "cgroup: make CONFIG_CGROUP_NET_PRIO bool and drop unnecessary init_netclassid_cgroup()\n\nnet_prio is the only cgroup which is allowed to be built as a module.\nThe savings from allowing one controller to be built as a module are\ntiny especially given that cgroup module support itself adds quite a\nbit of complexity.\n\nGiven that none of other controllers has much chance of being made a\nmodule and that we\u0027re unlikely to add new modular controllers, the\nadded complexity is simply not justifiable.\n\nAs a first step to drop cgroup module support, this patch changes the\nconfig option to bool from tristate and drops module related code from\nit.\n\nAlso, while an earlier commit fe1217c4f3f7 (\"net: net_cls: move\ncgroupfs classid handling into core\") dropped module support from\nnet_cls cgroup, it retained a call to cgroup_load_subsys(), which is\nnoop for built-in controllers.  Drop it along with\ninit_netclassid_cgroup().\n\nv2: Removed modular version of task_netprioidx() in\n    include/net/netprio_cgroup.h as suggested by Li Zefan.\n\nv3: Rebased on top of fe1217c4f3f7 (\"net: net_cls: move cgroupfs\n    classid handling into core\").  net_cls cgroup part is mostly\n    dropped except for removal of init_netclassid_cgroup().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Neil Horman \u003cnhorman@tuxdriver.com\u003e\nAcked-by: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Thomas Graf \u003ctgraf@suug.ch\u003e\n"
    },
    {
      "commit": "48573a893303986e3b0b2974d6fb11f3d1bb7064",
      "tree": "a01edf5728485e7637a25b08020f210a3ae0d67e",
      "parents": [
        "b58c89986a77a23658682a100eb15d8edb571ebb"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:26:34 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:26:34 2014 -0500"
      },
      "message": "cgroup: fix locking in cgroup_cfts_commit()\n\ncgroup_cfts_commit() walks the cgroup hierarchy that the target\nsubsystem is attached to and tries to apply the file changes.  Due to\nthe convolution with inode locking, it can\u0027t keep cgroup_mutex locked\nwhile iterating.  It currently holds only RCU read lock around the\nactual iteration and then pins the found cgroup using dget().\n\nUnfortunately, this is incorrect.  Although the iteration does check\ncgroup_is_dead() before invoking dget(), there\u0027s nothing which\nprevents the dentry from going away inbetween.  Note that this is\ndifferent from the usual css iterations where css_tryget() is used to\npin the css - css_tryget() tests whether the css can be pinned and\nfails if not.\n\nThe problem can be solved by simply holding cgroup_mutex instead of\nRCU read lock around the iteration, which actually reduces LOC.\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": "b58c89986a77a23658682a100eb15d8edb571ebb",
      "tree": "414266b86775faf92a7027e0ded52ca6b50f4c24",
      "parents": [
        "eb46bf89696972b856a9adb6aebd5c7b65c266e4"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:26:33 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:26:33 2014 -0500"
      },
      "message": "cgroup: fix error return from cgroup_create()\n\ncgroup_create() was returning 0 after allocation failures.  Fix it.\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": "eb46bf89696972b856a9adb6aebd5c7b65c266e4",
      "tree": "c4dd21535dd50996f296d056d05068fbe534dffa",
      "parents": [
        "ab3f5faa6255a0eb4f832675507d9e295ca7e9ba"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:26:33 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 08 10:26:33 2014 -0500"
      },
      "message": "cgroup: fix error return value in cgroup_mount()\n\nWhen cgroup_mount() fails to allocate an id for the root, it didn\u0027t\nset ret before jumping to unlock_drop ending up returning 0 after a\nfailure.  Fix it.\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": "ba341d55a420ab4fdd1a53fd395fd59bd65de880",
      "tree": "2de1c2cfc849e34434b275d78a9b40962418912a",
      "parents": [
        "fa4cd451cceb77e97432b91fcf50a7e4a7361e29"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:09:17 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 16:08:57 2014 -0800"
      },
      "message": "kernfs: add CONFIG_KERNFS\n\nAs sysfs was kernfs\u0027s only user, kernfs has been piggybacking on\nCONFIG_SYSFS; however, kernfs is scheduled to grow a new user very\nsoon.  Introduce a separate config option CONFIG_KERNFS which is to be\nselected by kernfs users.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: linux-fsdevel@vger.kernel.org\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "fa4cd451cceb77e97432b91fcf50a7e4a7361e29",
      "tree": "5e5740ea38ebe390cc4f054e9fd5426003dcf46c",
      "parents": [
        "3eef34ad7dc369b7183ec383908aff3da2f6e5ec"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Feb 07 13:32:07 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 16:08:57 2014 -0800"
      },
      "message": "sysfs, kobject: add sysfs wrapper for kernfs_enable_ns()\n\nCurrently, kobject is invoking kernfs_enable_ns() directly.  This is\nfine now as sysfs and kernfs are enabled and disabled together.  If\nsysfs is disabled, kernfs_enable_ns() is switched to dummy\nimplementation too and everything is fine; however, kernfs will soon\nhave its own config option CONFIG_KERNFS and !SYSFS \u0026\u0026 KERNFS will be\npossible, which can make kobject call into non-dummy\nkernfs_enable_ns() with NULL kernfs_node pointers leading to an oops.\n\nIntroduce sysfs_enable_ns() which is a wrapper around\nkernfs_enable_ns() so that it can be made a noop depending only on\nCONFIG_SYSFS regardless of the planned CONFIG_KERNFS.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "3eef34ad7dc369b7183ec383908aff3da2f6e5ec",
      "tree": "fac6ef1dd497adeff55fae499d953d5d51061867",
      "parents": [
        "0c23b2259a4850494e2c53e864ea840597c6cdd3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Feb 07 13:32:07 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 16:05:35 2014 -0800"
      },
      "message": "kernfs: implement kernfs_get_parent(), kernfs_name/path() and friends\n\nkernfs_node-\u003eparent and -\u003ename are currently marked as \"published\"\nindicating that kernfs users may access them directly; however, those\nfields may get updated by kernfs_rename[_ns]() and unrestricted access\nmay lead to erroneous values or oops.\n\nProtect -\u003eparent and -\u003ename updates with a irq-safe spinlock\nkernfs_rename_lock and implement the following accessors for these\nfields.\n\n* kernfs_name()\t\t- format the node\u0027s name into the specified buffer\n* kernfs_path()\t\t- format the node\u0027s path into the specified buffer\n* pr_cont_kernfs_name()\t- pr_cont a node\u0027s name (doesn\u0027t need buffer)\n* pr_cont_kernfs_path()\t- pr_cont a node\u0027s path (doesn\u0027t need buffer)\n* kernfs_get_parent()\t- pin and return a node\u0027s parent\n\nAll can be called under any context.  The recursive sysfs_pathname()\nin fs/sysfs/dir.c is replaced with kernfs_path() and\nsysfs_rename_dir_ns() is updated to use kernfs_get_parent() instead of\ndereferencing parent directly.\n\nv2: Dummy definition of kernfs_path() for !CONFIG_KERNFS was missing\n    static inline making it cause a lot of build warnings.  Add it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "0c23b2259a4850494e2c53e864ea840597c6cdd3",
      "tree": "f4d061ea433e443edd43d1f0a186e06aeb2ed95e",
      "parents": [
        "2536390da0d300b2734c721235c082498879841d"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:09:15 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 16:00:41 2014 -0800"
      },
      "message": "kernfs: implement kernfs_node_from_dentry(), kernfs_root_from_sb() and kernfs_rename()\n\nImplement helpers to determine node from dentry and root from\nsuper_block.  Also add a kernfs_rename_ns() wrapper which assumes NULL\nnamespace.  These generally make sense and will be used by cgroup.\n\nv2: Some dummy implementations for !CONFIG_SYSFS was missing.  Fixed.\n    Reported by kbuild test robot.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: kbuild test robot \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "2536390da0d300b2734c721235c082498879841d",
      "tree": "e0b4ccccb541a2c71d08dad217a5725fc7b8a900",
      "parents": [
        "4d3773c4bb41ed5228f1ab7a4a52b79e17b10515"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:09:14 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 16:00:40 2014 -0800"
      },
      "message": "kernfs: add kernfs_open_file-\u003epriv\n\nAdd a private data field to be used by kernfs file operations.  This\ngenerally makes sense and will be used by cgroup.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "4d3773c4bb41ed5228f1ab7a4a52b79e17b10515",
      "tree": "71c30d7009b36d22e9aab816f3dc7e373bb5f1e9",
      "parents": [
        "d35258ef702cca0c4e66d799f8e38b78c02ce8a5"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:09:13 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 15:52:48 2014 -0800"
      },
      "message": "kernfs: implement kernfs_ops-\u003eatomic_write_len\n\nA write to a kernfs_node is buffered through a kernel buffer.  Writes\n\u003c\u003d PAGE_SIZE are performed atomically, while larger ones are executed\nin PAGE_SIZE chunks.  While this is enough for sysfs, cgroup which is\nscheduled to be converted to use kernfs needs a bit more control over\nit.\n\nThis patch adds kernfs_ops-\u003eatomic_write_len.  If not set (zero), the\nbehavior stays the same.  If set, writes upto the size are executed\natomically and larger writes are rejected with -E2BIG.\n\nA different implementation strategy would be allowing configuring\nchunking size while making the original write size available to the\nwrite method; however, such strategy, while being more complicated,\ndoesn\u0027t really buy anything.  If the write implementation has to\nhandle chunking, the specific chunk size shouldn\u0027t matter all that\nmuch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "d35258ef702cca0c4e66d799f8e38b78c02ce8a5",
      "tree": "f3d98795cf620ad32edd4df982d015cfeedd1a97",
      "parents": [
        "b9c9dad0c457d32cf8c7d2e413463c8414c7a7a7"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:09:12 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 15:52:48 2014 -0800"
      },
      "message": "kernfs: allow nodes to be created in the deactivated state\n\nCurrently, kernfs_nodes are made visible to userland on creation,\nwhich makes it difficult for kernfs users to atomically succeed or\nfail creation of multiple nodes.  In addition, if something fails\nafter creating some nodes, the created nodes might already be in use\nand their active refs need to be drained for removal, which has the\npotential to introduce tricky reverse locking dependency on active_ref\ndepending on how the error path is synchronized.\n\nThis patch introduces per-root flag KERNFS_ROOT_CREATE_DEACTIVATED.\nIf set, all nodes under the root are created in the deactivated state\nand stay invisible to userland until explicitly enabled by the new\nkernfs_activate() API.  Also, nodes which have never been activated\nare guaranteed to bypass draining on removal thus allowing error paths\nto not worry about lockding dependency on active_ref draining.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "b9c9dad0c457d32cf8c7d2e413463c8414c7a7a7",
      "tree": "c20eaec5b60bb56f4b4873c2e06cde65edb59d7e",
      "parents": [
        "6a7fed4eefddad48224f1c9d534b4e262f0897f6"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:09:11 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 15:52:48 2014 -0800"
      },
      "message": "kernfs: add missing kernfs_active() checks in directory operations\n\nkernfs_iop_lookup(), kernfs_dir_pos() and kernfs_dir_next_pos() were\nmissing kernfs_active() tests before using the found kernfs_node.  As\ndeactivated state is currently visible only while a node is being\nremoved, this doesn\u0027t pose an actual problem.  e.g. lookup succeeding\non a deactivated node doesn\u0027t harm anything as the eventual file\noperations are gonna fail and those failures are indistinguishible\nfrom the cases in which the lookups had happened before the node was\ndeactivated.\n\nHowever, we\u0027re gonna allow new nodes to be created deactivated and\nthen activated explicitly by the kernfs user when it sees fit.  This\nis to support atomically making multiple nodes visible to userland and\nthus those nodes must not be visible to userland before activated.\n\nLet\u0027s plug the lookup and readdir holes so that deactivated nodes are\ninvisible to userland.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "6a7fed4eefddad48224f1c9d534b4e262f0897f6",
      "tree": "28c347ffd4cbb92146fde47768c396c088c44a95",
      "parents": [
        "90c07c895c87d38db100b6afcb686ab3ef0d6a64"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:09:10 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 15:52:48 2014 -0800"
      },
      "message": "kernfs: implement kernfs_syscall_ops-\u003eremount_fs() and -\u003eshow_options()\n\nAdd two super_block related syscall callbacks -\u003eremount_fs() and\n-\u003eshow_options() to kernfs_syscall_ops.  These simply forward the\nmatching super_operations.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "90c07c895c87d38db100b6afcb686ab3ef0d6a64",
      "tree": "22ff946cdcd306f0ba5ce998832db0028bae3aab",
      "parents": [
        "07c7530dd46728e25e938d0eb291f8085435c365"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:09:09 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 15:52:48 2014 -0800"
      },
      "message": "kernfs: rename kernfs_dir_ops to kernfs_syscall_ops\n\nWe\u0027re gonna need non-dir syscall callbacks, which will make dir_ops a\nmisnomer.  Let\u0027s rename kernfs_dir_ops to kernfs_syscall_ops.\n\nThis is pure rename.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "07c7530dd46728e25e938d0eb291f8085435c365",
      "tree": "af31cc0ecb79794e1294b7781350afc45c1657d2",
      "parents": [
        "ce8b04aa6c9bdf211b921fdd18c040ea29516b97"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:09:08 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 15:52:48 2014 -0800"
      },
      "message": "kernfs: invoke dir_ops while holding active ref of the target node\n\nkernfs_dir_ops are currently being invoked without any active\nreference, which makes it tricky for the invoked operations to\ndetermine whether the objects associated those nodes are safe to\naccess and will remain that way for the duration of such operations.\n\nkernfs already has active_ref mechanism to deal with this which makes\nthe removal of a given node the synchronization point for gating the\nfile operations.  There\u0027s no reason for dir_ops to be any different.\nUpdate the dir_ops handling so that active_ref is held while the\ndir_ops are executing.  This guarantees that while a dir_ops is\nexecuting the target nodes stay alive.\n\nAs kernfs_dir_ops doesn\u0027t have any in-kernel user at this point, this\ndoesn\u0027t affect anybody.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "ce8b04aa6c9bdf211b921fdd18c040ea29516b97",
      "tree": "9c45ed4ce13c1e956397bcef8d2f500dd8fac805",
      "parents": [
        "0b60f9ead5d4816e7e3d6e28f4a0d22d4a1b2513"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:03:05 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 15:42:41 2014 -0800"
      },
      "message": "sysfs, driver-core: remove unused {sysfs|device}_schedule_callback_owner()\n\nAll device_schedule_callback_owner() users are converted to use\ndevice_remove_file_self().  Remove now unused\n{sysfs|device}_schedule_callback_owner().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "0b60f9ead5d4816e7e3d6e28f4a0d22d4a1b2513",
      "tree": "2c46f7db6815641b51553b3c4bfa5a76e0ccd06d",
      "parents": [
        "ac0ece9174aca9aa895ce0accc54f1f8ff12d117"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:03:04 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 15:42:41 2014 -0800"
      },
      "message": "s390: use device_remove_file_self() instead of device_schedule_callback()\n\ndriver-core now supports synchrnous self-deletion of attributes and\nthe asynchrnous removal mechanism is scheduled for removal.  Use it\ninstead of device_schedule_callback().\n\n* Conversions in arch/s390/pci/pci_sysfs.c and\n  drivers/s390/block/dcssblk.c are straightforward.\n\n* drivers/s390/cio/ccwgroup.c is a bit more tricky because\n  ccwgroup_notifier() was (ab)using device_schedule_callback() to\n  purely obtain a process context to kick off ungroup operation which\n  may block from a notifier callback.\n\n  Rename ccwgroup_ungroup_callback() to ccwgroup_ungroup() and make it\n  take ccwgroup_device * instead.  The new function is now called\n  directly from ccwgroup_ungroup_store().\n\n  ccwgroup_notifier() chain is updated to explicitly bounce through\n  ccwgroup_device-\u003eungroup_work.  This also removes possible failure\n  from memory pressure.\n\nOnly compile-tested.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: linux390@de.ibm.com\nCc: linux-s390@vger.kernel.org\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "ac0ece9174aca9aa895ce0accc54f1f8ff12d117",
      "tree": "82b9f44feda06f9223406989a5472b66213e164a",
      "parents": [
        "bc6caf02cccedd30c9458e26dfdd8118af574ae5"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:03:03 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 15:42:41 2014 -0800"
      },
      "message": "scsi: use device_remove_file_self() instead of device_schedule_callback()\n\ndriver-core now supports synchrnous self-deletion of attributes and\nthe asynchrnous removal mechanism is scheduled for removal.  Use it\ninstead of device_schedule_callback().  This makes \"delete\" behave\nsynchronously.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: \"James E.J. Bottomley\" \u003cJBottomley@parallels.com\u003e\nCc: linux-scsi@vger.kernel.org\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "bc6caf02cccedd30c9458e26dfdd8118af574ae5",
      "tree": "9c0f72f4ba0001d4ddcca7122a0243c2ccb1bb54",
      "parents": [
        "6b0afc2a21726b2d6b6aa441af40cafaf5405cc8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:03:02 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 15:42:41 2014 -0800"
      },
      "message": "pci: use device_remove_file_self() instead of device_schedule_callback()\n\ndriver-core now supports synchrnous self-deletion of attributes and\nthe asynchrnous removal mechanism is scheduled for removal.  Use it\ninstead of device_schedule_callback().  This makes \"remove\" behave\nsynchronously.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Bjorn Helgaas \u003cbhelgaas@google.com\u003e\nCc: linux-pci@vger.kernel.org\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "6b0afc2a21726b2d6b6aa441af40cafaf5405cc8",
      "tree": "42db14d4525a9f7a248fda6bb56da7823bd86e12",
      "parents": [
        "81c173cb5e87fbb47ccd80630faefe39bbf68449"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:03:01 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 15:42:41 2014 -0800"
      },
      "message": "kernfs, sysfs, driver-core: implement kernfs_remove_self() and its wrappers\n\nSometimes it\u0027s necessary to implement a node which wants to delete\nnodes including itself.  This isn\u0027t straightforward because of kernfs\nactive reference.  While a file operation is in progress, an active\nreference is held and kernfs_remove() waits for all such references to\ndrain before completing.  For a self-deleting node, this is a deadlock\nas kernfs_remove() ends up waiting for an active reference that itself\nis sitting on top of.\n\nThis currently is worked around in the sysfs layer using\nsysfs_schedule_callback() which makes such removals asynchronous.\nWhile it works, it\u0027s rather cumbersome and inherently breaks\nsynchronicity of the operation - the file operation which triggered\nthe operation may complete before the removal is finished (or even\nstarted) and the removal may fail asynchronously.  If a removal\noperation is immmediately followed by another operation which expects\nthe specific name to be available (e.g. removal followed by rename\nonto the same name), there\u0027s no way to make the latter operation\nreliable.\n\nThe thing is there\u0027s no inherent reason for this to be asynchrnous.\nAll that\u0027s necessary to do this synchronous is a dedicated operation\nwhich drops its own active ref and deactivates self.  This patch\nimplements kernfs_remove_self() and its wrappers in sysfs and driver\ncore.  kernfs_remove_self() is to be called from one of the file\noperations, drops the active ref the task is holding, removes the self\nnode, and restores active ref to the dead node so that the ref is\nbalanced afterwards.  __kernfs_remove() is updated so that it takes an\nearly exit if the target node is already fully removed so that the\nactive ref restored by kernfs_remove_self() after removal doesn\u0027t\nconfuse the deactivation path.\n\nThis makes implementing self-deleting nodes very easy.  The normal\nremoval path doesn\u0027t even need to be changed to use\nkernfs_remove_self() for the self-deleting node.  The method can\ninvoke kernfs_remove_self() on itself before proceeding the normal\nremoval path.  kernfs_remove() invoked on the node by the normal\ndeletion path will simply be ignored.\n\nThis will replace sysfs_schedule_callback().  A subtle feature of\nsysfs_schedule_callback() is that it collapses multiple invocations -\neven if multiple removals are triggered, the removal callback is run\nonly once.  An equivalent effect can be achieved by testing the return\nvalue of kernfs_remove_self() - only the one which gets %true return\nvalue should proceed with actual deletion.  All other instances of\nkernfs_remove_self() will wait till the enclosing kernfs operation\nwhich invoked the winning instance of kernfs_remove_self() finishes\nand then return %false.  This trivially makes all users of\nkernfs_remove_self() automatically show correct synchronous behavior\neven when there are multiple concurrent operations - all \"echo 1 \u003e\ndelete\" instances will finish only after the whole operation is\ncompleted by one of the instances.\n\nNote that manipulation of active ref is implemented in separate public\nfunctions - kernfs_[un]break_active_protection().\nkernfs_remove_self() is the only user at the moment but this will be\nused to cater to more complex cases.\n\nv2: For !CONFIG_SYSFS, dummy version kernfs_remove_self() was missing\n    and sysfs_remove_file_self() had incorrect return type.  Fix it.\n    Reported by kbuild test bot.\n\nv3: kernfs_[un]break_active_protection() separated out from\n    kernfs_remove_self() and exposed as public API.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Alan Stern \u003cstern@rowland.harvard.edu\u003e\nCc: kbuild test robot \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "81c173cb5e87fbb47ccd80630faefe39bbf68449",
      "tree": "7b5aaa2255ac62f2879e2431062f9b96a38e8574",
      "parents": [
        "182fd64b66342219d6fcf2b84d337529d120d95c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:03:00 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 15:42:41 2014 -0800"
      },
      "message": "kernfs: remove KERNFS_REMOVED\n\nKERNFS_REMOVED is used to mark half-initialized and dying nodes so\nthat they don\u0027t show up in lookups and deny adding new nodes under or\nrenaming it; however, its role overlaps that of deactivation.\n\nIt\u0027s necessary to deny addition of new children while removal is in\nprogress; however, this role considerably intersects with deactivation\n- KERNFS_REMOVED prevents new children while deactivation prevents new\nfile operations.  There\u0027s no reason to have them separate making\nthings more complex than necessary.\n\nThis patch removes KERNFS_REMOVED.\n\n* Instead of KERNFS_REMOVED, each node now starts its life\n  deactivated.  This means that we now use both atomic_add() and\n  atomic_sub() on KN_DEACTIVATED_BIAS, which is INT_MIN.  The compiler\n  generates an overflow warnings when negating INT_MIN as the negation\n  can\u0027t be represented as a positive number.  Nothing is actually\n  broken but let\u0027s bump BIAS by one to avoid the warnings for archs\n  which negates the subtrahend..\n\n* A new helper kernfs_active() which tests whether kn-\u003eactive \u003e\u003d 0 is\n  added for convenience and lockdep annotation.  All KERNFS_REMOVED\n  tests are replaced with negated kernfs_active() tests.\n\n* __kernfs_remove() is updated to deactivate, but not drain, all nodes\n  in the subtree instead of setting KERNFS_REMOVED.  This removes\n  deactivation from kernfs_deactivate(), which is now renamed to\n  kernfs_drain().\n\n* Sanity check on KERNFS_REMOVED in kernfs_put() is replaced with\n  checks on the active ref.\n\n* Some comment style updates in the affected area.\n\nv2: Reordered before removal path restructuring.  kernfs_active()\n    dropped and kernfs_get/put_active() used instead.  RB_EMPTY_NODE()\n    used in the lookup paths.\n\nv3: Reverted most of v2 except for creating a new node with\n    KN_DEACTIVATED_BIAS.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "182fd64b66342219d6fcf2b84d337529d120d95c",
      "tree": "f8e0377fa5cdf90ea11245fd4f028c07ada4a5cd",
      "parents": [
        "988cd7afb3f37598891ca70b4c6eb914c338c46a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:02:59 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 15:42:40 2014 -0800"
      },
      "message": "kernfs: remove KERNFS_ACTIVE_REF and add kernfs_lockdep()\n\nThere currently are two mechanisms gating active ref lockdep\nannotations - KERNFS_LOCKDEP flag and KERNFS_ACTIVE_REF type mask.\nThe former disables lockdep annotations in kernfs_get/put_active()\nwhile the latter disables all of kernfs_deactivate().\n\nWhile KERNFS_ACTIVE_REF also behaves as an optimization to skip the\ndeactivation step for non-file nodes, the benefit is marginal and it\nneedlessly diverges code paths.  Let\u0027s drop KERNFS_ACTIVE_REF.\n\nWhile at it, add a test helper kernfs_lockdep() to test KERNFS_LOCKDEP\nflag so that it\u0027s more convenient and the related code can be compiled\nout when not enabled.\n\nv2: Refreshed on top of (\"kernfs: make kernfs_deactivate() honor\n    KERNFS_LOCKDEP flag\").  As the earlier patch already added\n    KERNFS_LOCKDEP tests to kernfs_deactivate(), those additions are\n    dropped from this patch and the existing ones are simply converted\n    to kernfs_lockdep().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "988cd7afb3f37598891ca70b4c6eb914c338c46a",
      "tree": "cea29f9fe0d8057441f3350235ec1666ff231d7a",
      "parents": [
        "ccf02aaf8167bb8bfb3c17c01c843d309b872671"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:02:58 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 15:42:40 2014 -0800"
      },
      "message": "kernfs: remove kernfs_addrm_cxt\n\nkernfs_addrm_cxt and the accompanying kernfs_addrm_start/finish() were\nadded because there were operations which should be performed outside\nkernfs_mutex after adding and removing kernfs_nodes.  The necessary\noperations were recorded in kernfs_addrm_cxt and performed by\nkernfs_addrm_finish(); however, after the recent changes which\nrelocated deactivation and unmapping so that they\u0027re performed\ndirectly during removal, the only operation kernfs_addrm_finish()\nperforms is kernfs_put(), which can be moved inside the removal path\ntoo.\n\nThis patch moves the kernfs_put() of the base ref to __kernfs_remove()\nand remove kernfs_addrm_cxt and kernfs_addrm_start/finish().\n\n* kernfs_add_one() is updated to grab and release kernfs_mutex itself.\n  sysfs_addrm_start/finish() invocations around it are removed from\n  all users.\n\n* __kernfs_remove() puts an unlinked node directly instead of chaining\n  it to kernfs_addrm_cxt.  Its callers are updated to grab and release\n  kernfs_mutex instead of calling kernfs_addrm_start/finish() around\n  it.\n\nv2: Rebased on top of \"kernfs: associate a new kernfs_node with its\n    parent on creation\" which dropped @parent from kernfs_add_one().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "ccf02aaf8167bb8bfb3c17c01c843d309b872671",
      "tree": "744c59c27e0883dca4da631118432a8df86ce894",
      "parents": [
        "35beab0635f3cdd475e3c11a304b866c25b76fcf"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:02:57 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 15:42:40 2014 -0800"
      },
      "message": "kernfs: invoke kernfs_unmap_bin_file() directly from kernfs_deactivate()\n\nkernfs_unmap_bin_file() is supposed to unmap all memory mappings of\nthe target file before kernfs_remove() finishes; however, it currently\nis being called from kernfs_addrm_finish() and has the same race\nproblem as the original implementation of deactivation when there are\nmultiple removers - only the remover which snatches the node to its\naddrm_cxt-\u003eremoved list is guaranteed to wait for its completion\nbefore returning.\n\nIt can be easily fixed by moving kernfs_unmap_bin_file() invocation\nfrom kernfs_addrm_finish() to kernfs_deactivated().  The function may\nbe called multiple times but that shouldn\u0027t do any harm.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "35beab0635f3cdd475e3c11a304b866c25b76fcf",
      "tree": "23505ba741ef2933c93514f89f2d646212c67802",
      "parents": [
        "abd54f028ec30976d6e797e7474ec91d96186a0c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:02:56 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 15:42:40 2014 -0800"
      },
      "message": "kernfs: restructure removal path to fix possible premature return\n\nThe recursive nature of kernfs_remove() means that, even if\nkernfs_remove() is not allowed to be called multiple times on the same\nnode, there may be race conditions between removal of parent and its\ndescendants.  While we can claim that kernfs_remove() shouldn\u0027t be\ncalled on one of the descendants while the removal of an ancestor is\nin progress, such rule is unnecessarily restrictive and very difficult\nto enforce.  It\u0027s better to simply allow invoking kernfs_remove() as\nthe caller sees fit as long as the caller ensures that the node is\naccessible.\n\nThe current behavior in such situations is broken.  Whoever enters\nremoval path first takes the node off the hierarchy and then\ndeactivates.  Following removers either return as soon as it notices\nthat it\u0027s not the first one or can\u0027t even find the target node as it\nhas already been removed from the hierarchy.  In both cases, the\nfollowing removers may finish prematurely while the nodes which should\nbe removed and drained are still being processed by the first one.\n\nThis patch restructures so that multiple removers, whether through\nrecursion or direction invocation, always follow the following rules.\n\n* When there are multiple concurrent removers, only one puts the base\n  ref.\n\n* Regardless of which one puts the base ref, all removers are blocked\n  until the target node is fully deactivated and removed.\n\nTo achieve the above, removal path now first marks all descendants\nincluding self REMOVED and then deactivates and unlinks leftmost\ndescendant one-by-one.  kernfs_deactivate() is called directly from\n__kernfs_removal() and drops and regrabs kernfs_mutex for each\ndescendant to drain active refs.  As this means that multiple removers\ncan enter kernfs_deactivate() for the same node, the function is\nupdated so that it can handle multiple deactivators of the same node -\nonly one actually deactivates but all wait till drain completion.\n\nThe restructured removal path guarantees that a removed node gets\nunlinked only after the node is deactivated and drained.  Combined\nwith proper multiple deactivator handling, this guarantees that any\ninvocation of kernfs_remove() returns only after the node itself and\nall its descendants are deactivated, drained and removed.\n\nv2: Draining separated into a separate loop (used to be in the same\n    loop as unlink) and done from __kernfs_deactivate().  This is to\n    allow exposing deactivation as a separate interface later.\n\n    Root node removal was broken in v1 patch.  Fixed.\n\nv3: Revert most of v2 except for root node removal fix and\n    simplification of KERNFS_REMOVED setting loop.\n\nv4: Refreshed on top of (\"kernfs: make kernfs_deactivate() honor\n    KERNFS_LOCKDEP flag\").\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "abd54f028ec30976d6e797e7474ec91d96186a0c",
      "tree": "3fc9f5240ec0dfdcb210499878e08a18a678157f",
      "parents": [
        "a6607930b6cd829fc7f680b48a937d827e0bb931"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:02:55 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 15:42:40 2014 -0800"
      },
      "message": "kernfs: replace kernfs_node-\u003eu.completion with kernfs_root-\u003edeactivate_waitq\n\nkernfs_node-\u003eu.completion is used to notify deactivation completion\nfrom kernfs_put_active() to kernfs_deactivate().  We now allow\nmultiple racing removals of the same node and the current removal\nscheme is no longer correct - kernfs_remove() invocation may return\nbefore the node is properly deactivated if it races against another\nremoval.  The removal path will be restructured to address the issue.\n\nTo help such restructure which requires supporting multiple waiters,\nthis patch replaces kernfs_node-\u003eu.completion with\nkernfs_root-\u003edeactivate_waitq.  This makes deactivation event\nnotifications share a per-root waitqueue_head; however, the wait path\nis quite cold and this will also allow shaving one pointer off\nkernfs_node.\n\nv2: Refreshed on top of (\"kernfs: make kernfs_deactivate() honor\n    KERNFS_LOCKDEP flag\").\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "a6607930b6cd829fc7f680b48a937d827e0bb931",
      "tree": "f85197a00523b06416fe964c599bfb74a625c400",
      "parents": [
        "fee0c54e28f6ca187add93dfca226a8093cfa931"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:02:54 2014 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 15:42:40 2014 -0800"
      },
      "message": "kernfs: make kernfs_deactivate() honor KERNFS_LOCKDEP flag\n\nkernfs_deactivate() forgot to check whether KERNFS_LOCKDEP is set\nbefore performing lockdep annotations and ends up feeding\nuninitialized lockdep_map to lockdep triggering warning like the\nfollowing on USB stick hotunplug.\n\n usb 1-2: USB disconnect, device number 2\n INFO: trying to register non-static key.\n the code is fine but needs lockdep annotation.\n turning off the locking correctness validator.\n CPU: 1 PID: 62 Comm: khubd Not tainted 3.13.0-work+ #82\n Hardware name: empty empty/S3992, BIOS 080011  10/26/2007\n  ffff880065ca7f60 ffff88013a4ffa08 ffffffff81cfb6bd 0000000000000002\n  ffff88013a4ffac8 ffffffff810f8530 ffff88013a4fc710 0000000000000002\n  ffff880100000000 ffffffff82a3db50 0000000000000001 ffff88013a4fc710\n Call Trace:\n  [\u003cffffffff81cfb6bd\u003e] dump_stack+0x4e/0x7a\n  [\u003cffffffff810f8530\u003e] __lock_acquire+0x1910/0x1e70\n  [\u003cffffffff810f931a\u003e] lock_acquire+0x9a/0x1d0\n  [\u003cffffffff8127c75e\u003e] kernfs_deactivate+0xee/0x130\n  [\u003cffffffff8127d4c8\u003e] kernfs_addrm_finish+0x38/0x60\n  [\u003cffffffff8127d701\u003e] kernfs_remove_by_name_ns+0x51/0xa0\n  [\u003cffffffff8127b4f1\u003e] remove_files.isra.1+0x41/0x80\n  [\u003cffffffff8127b7e7\u003e] sysfs_remove_group+0x47/0xa0\n  [\u003cffffffff8127b873\u003e] sysfs_remove_groups+0x33/0x50\n  [\u003cffffffff8177d66d\u003e] device_remove_attrs+0x4d/0x80\n  [\u003cffffffff8177e25e\u003e] device_del+0x12e/0x1d0\n  [\u003cffffffff819722c2\u003e] usb_disconnect+0x122/0x1a0\n  [\u003cffffffff819749b5\u003e] hub_thread+0x3c5/0x1290\n  [\u003cffffffff810c6a6d\u003e] kthread+0xed/0x110\n  [\u003cffffffff81d0a56c\u003e] ret_from_fork+0x7c/0xb0\n\nFix it by making kernfs_deactivate() perform lockdep annotations only\nif KERNFS_LOCKDEP is set.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Fabio Estevam \u003cfestevam@gmail.com\u003e\nReported-by: Alan Stern \u003cstern@rowland.harvard.edu\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "fee0c54e28f6ca187add93dfca226a8093cfa931",
      "tree": "d62c8c58d90fda69cf035b36c457a8ce9df945ca",
      "parents": [
        "38dbfb59d1175ef458d006556061adeaa8751b72"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Dec 20 16:43:50 2013 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Feb 07 14:21:09 2014 -0800"
      },
      "message": "dma-buf: avoid using IS_ERR_OR_NULL\n\ndma_buf_map_attachment and dma_buf_vmap can return NULL or\nERR_PTR on a error.  This encourages a common buggy pattern in\ncallers:\n\tsgt \u003d dma_buf_map_attachment(attach, DMA_BIDIRECTIONAL);\n\tif (IS_ERR_OR_NULL(sgt))\n                return PTR_ERR(sgt);\n\nThis causes the caller to return 0 on an error.  IS_ERR_OR_NULL\nis almost always a sign of poorly-defined error handling.\n\nThis patch converts dma_buf_map_attachment to always return\nERR_PTR, and fixes the callers that incorrectly handled NULL.\nThere are a few more callers that were not checking for NULL\nat all, which would have dereferenced a NULL pointer later.\nThere are also a few more callers that correctly handled NULL\nand ERR_PTR differently, I left those alone but they could also\nbe modified to delete the NULL check.\n\nThis patch also converts dma_buf_vmap to always return NULL.\nAll the callers to dma_buf_vmap only check for NULL, and would\nhave dereferenced an ERR_PTR and panic\u0027d if one was ever\nreturned. This is not consistent with the rest of the dma buf\nAPIs, but matches the expectations of all of the callers.\n\nSigned-off-by: Colin Cross \u003cccross@android.com\u003e\nReviewed-by: Rob Clark \u003crobdclark@gmail.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "ab3f5faa6255a0eb4f832675507d9e295ca7e9ba",
      "tree": "1f9a906214d8f20bf9f58ccb202d2eb8dade8db4",
      "parents": [
        "0a6be6555302eebb14510fd6b35bb17e8dfa1386"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Feb 06 15:56:01 2014 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Feb 07 10:21:12 2014 -0500"
      },
      "message": "cgroup: use an ordered workqueue for cgroup destruction\n\nSometimes the cleanup after memcg hierarchy testing gets stuck in\nmem_cgroup_reparent_charges(), unable to bring non-kmem usage down to 0.\n\nThere may turn out to be several causes, but a major cause is this: the\nworkitem to offline parent can get run before workitem to offline child;\nparent\u0027s mem_cgroup_reparent_charges() circles around waiting for the\nchild\u0027s pages to be reparented to its lrus, but it\u0027s holding cgroup_mutex\nwhich prevents the child from reaching its mem_cgroup_reparent_charges().\n\nJust use an ordered workqueue for cgroup_destroy_wq.\n\ntj: Committing as the temporary fix until the reverse dependency can\n    be removed from memcg.  Comment updated accordingly.\n\nFixes: e5fca243abae (\"cgroup: use a dedicated workqueue for cgroup destruction\")\nSuggested-by: Filipe Brandenburger \u003cfilbranden@google.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: stable@vger.kernel.org # 3.10+\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "0a6be6555302eebb14510fd6b35bb17e8dfa1386",
      "tree": "892a91e3624eaaf7c26833f5f7a6bbc482ed5591",
      "parents": [
        "230579d7e0c46fa078ba11899d9b091df689362f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 14:31:07 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 15:43:59 2014 -0500"
      },
      "message": "nfs: include xattr.h from fs/nfs/nfs3proc.c\n\nfs/nfs/nfs3proc.c is making use of xattr but was getting linux/xattr.h\nindirectly through linux/cgroup.h, which will soon drop the inclusion\nof xattr.h.  Explicitly include linux/xattr.h from nfs3proc.c so that\ncompilation doesn\u0027t fail when linux/cgroup.h drops linux/xattr.h.\n\nAs the following cgroup changes will depend on these changes, it\nprobably would be easier to route this through cgroup branch.  Would\nthat be okay?\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Trond Myklebust \u003ctrond.myklebust@primarydata.com\u003e\nCc: linux-nfs@vger.kernel.org\n"
    },
    {
      "commit": "230579d7e0c46fa078ba11899d9b091df689362f",
      "tree": "3c4422796a8d53ddd5bd2425e72134ebca288d7b",
      "parents": [
        "1ff6bbfd13ca2c114a5cb58e1a92d1e5d68ce0b7"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Tue Jan 28 11:29:09 2014 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 13:24:05 2014 -0500"
      },
      "message": "cpuset: update MAINTAINERS entry\n\nAdd mailing list and tree tag to the entry.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "1ff6bbfd13ca2c114a5cb58e1a92d1e5d68ce0b7",
      "tree": "3ef9611bb58c311a439b1fcdd46329c265c07b5e",
      "parents": [
        "38dbfb59d1175ef458d006556061adeaa8751b72"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jan 28 18:10:37 2014 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 03 13:24:01 2014 -0500"
      },
      "message": "arm, pm, vmpressure: add missing slab.h includes\n\narch/arm/mach-tegra/pm.c, kernel/power/console.c and mm/vmpressure.c\nwere somehow getting slab.h indirectly through cgroup.h which in turn\nwas getting it indirectly through xattr.h.  A scheduled cgroup change\ndrops xattr.h inclusion from cgroup.h and breaks compilation of these\nthree files.  Add explicit slab.h includes to the three files.\n\nA pending cgroup patch depends on this change and it\u0027d be great if\nthis can be routed through cgroup/for-3.14-fixes branch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Stephen Warren \u003cswarren@wwwdotorg.org\u003e\nCc: Thierry Reding \u003cthierry.reding@gmail.com\u003e\nCc: linux-tegra@vger.kernel.org\nCc: \"Rafael J. Wysocki\" \u003crjw@rjwysocki.net\u003e\nCc: linux-pm@vger.kernel.org\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: cgroups@vger.kernel.org\n"
    },
    {
      "commit": "38dbfb59d1175ef458d006556061adeaa8751b72",
      "tree": "af6b4e876c732daaafb59781836bfce9715d21c2",
      "parents": [
        "69048e01881747e27457cd514a6b85d925982046"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Feb 02 16:42:13 2014 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Feb 02 16:42:13 2014 -0800"
      },
      "message": "Linus 3.14-rc1\n"
    }
  ],
  "next": "69048e01881747e27457cd514a6b85d925982046"
}
