)]}'
{
  "log": [
    {
      "commit": "b67bfe0d42cac56c512dd5da4b1b347a23f4b70a",
      "tree": "3d465aea12b97683f26ffa38eba8744469de9997",
      "parents": [
        "1e142b29e210b5dfb2deeb6ce2210b60af16d2a6"
      ],
      "author": {
        "name": "Sasha Levin",
        "email": "sasha.levin@oracle.com",
        "time": "Wed Feb 27 17:06:00 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 27 19:10:24 2013 -0800"
      },
      "message": "hlist: drop the node parameter from iterators\n\nI\u0027m not sure why, but the hlist for each entry iterators were conceived\n\n        list_for_each_entry(pos, head, member)\n\nThe hlist ones were greedy and wanted an extra parameter:\n\n        hlist_for_each_entry(tpos, pos, head, member)\n\nWhy did they need an extra pos parameter? I\u0027m not quite sure. Not only\nthey don\u0027t really need it, it also prevents the iterator from looking\nexactly like the list iterator, which is unfortunate.\n\nBesides the semantic patch, there was some manual work required:\n\n - Fix up the actual hlist iterators in linux/list.h\n - Fix up the declaration of other iterators based on the hlist ones.\n - A very small amount of places were using the \u0027node\u0027 parameter, this\n was modified to use \u0027obj-\u003emember\u0027 instead.\n - Coccinelle didn\u0027t handle the hlist_for_each_entry_safe iterator\n properly, so those had to be fixed up manually.\n\nThe semantic patch which is mostly the work of Peter Senna Tschudin is here:\n\n@@\niterator name hlist_for_each_entry, hlist_for_each_entry_continue, hlist_for_each_entry_from, hlist_for_each_entry_rcu, hlist_for_each_entry_rcu_bh, hlist_for_each_entry_continue_rcu_bh, for_each_busy_worker, ax25_uid_for_each, ax25_for_each, inet_bind_bucket_for_each, sctp_for_each_hentry, sk_for_each, sk_for_each_rcu, sk_for_each_from, sk_for_each_safe, sk_for_each_bound, hlist_for_each_entry_safe, hlist_for_each_entry_continue_rcu, nr_neigh_for_each, nr_neigh_for_each_safe, nr_node_for_each, nr_node_for_each_safe, for_each_gfn_indirect_valid_sp, for_each_gfn_sp, for_each_host;\n\ntype T;\nexpression a,c,d,e;\nidentifier b;\nstatement S;\n@@\n\n-T b;\n    \u003c+... when !\u003d b\n(\nhlist_for_each_entry(a,\n- b,\nc, d) S\n|\nhlist_for_each_entry_continue(a,\n- b,\nc) S\n|\nhlist_for_each_entry_from(a,\n- b,\nc) S\n|\nhlist_for_each_entry_rcu(a,\n- b,\nc, d) S\n|\nhlist_for_each_entry_rcu_bh(a,\n- b,\nc, d) S\n|\nhlist_for_each_entry_continue_rcu_bh(a,\n- b,\nc) S\n|\nfor_each_busy_worker(a, c,\n- b,\nd) S\n|\nax25_uid_for_each(a,\n- b,\nc) S\n|\nax25_for_each(a,\n- b,\nc) S\n|\ninet_bind_bucket_for_each(a,\n- b,\nc) S\n|\nsctp_for_each_hentry(a,\n- b,\nc) S\n|\nsk_for_each(a,\n- b,\nc) S\n|\nsk_for_each_rcu(a,\n- b,\nc) S\n|\nsk_for_each_from\n-(a, b)\n+(a)\nS\n+ sk_for_each_from(a) S\n|\nsk_for_each_safe(a,\n- b,\nc, d) S\n|\nsk_for_each_bound(a,\n- b,\nc) S\n|\nhlist_for_each_entry_safe(a,\n- b,\nc, d, e) S\n|\nhlist_for_each_entry_continue_rcu(a,\n- b,\nc) S\n|\nnr_neigh_for_each(a,\n- b,\nc) S\n|\nnr_neigh_for_each_safe(a,\n- b,\nc, d) S\n|\nnr_node_for_each(a,\n- b,\nc) S\n|\nnr_node_for_each_safe(a,\n- b,\nc, d) S\n|\n- for_each_gfn_sp(a, c, d, b) S\n+ for_each_gfn_sp(a, c, d) S\n|\n- for_each_gfn_indirect_valid_sp(a, c, d, b) S\n+ for_each_gfn_indirect_valid_sp(a, c, d) S\n|\nfor_each_host(a,\n- b,\nc) S\n|\nfor_each_host_safe(a,\n- b,\nc, d) S\n|\nfor_each_mesh_entry(a,\n- b,\nc, d) S\n)\n    ...+\u003e\n\n[akpm@linux-foundation.org: drop bogus change from net/ipv4/raw.c]\n[akpm@linux-foundation.org: drop bogus hunk from net/ipv6/raw.c]\n[akpm@linux-foundation.org: checkpatch fixes]\n[akpm@linux-foundation.org: fix warnings]\n[akpm@linux-foudnation.org: redo intrusive kvm changes]\nTested-by: Peter Senna Tschudin \u003cpeter.senna@gmail.com\u003e\nAcked-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Sasha Levin \u003csasha.levin@oracle.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Marcelo Tosatti \u003cmtosatti@redhat.com\u003e\nCc: Gleb Natapov \u003cgleb@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d228d9ec2c9a119ce15c6446ebeec05786ab3287",
      "tree": "42ea38da991b681326ce20736dbae945e796c43d",
      "parents": [
        "54924ea33f3ba702243ba4ab068d7d2852db8098"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 27 17:04:54 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 27 19:10:19 2013 -0800"
      },
      "message": "cgroup: convert to idr_alloc()\n\nConvert to the much saner new idr interface.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c897ff68beec97768c31f9de97de93f77ff2d87e",
      "tree": "662fb6102cdbe5c21905c588c6f867add374619d",
      "parents": [
        "644e1b90ef06611268b48a0a8d14a0ab990ab3f4"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 27 17:03:49 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 27 19:10:14 2013 -0800"
      },
      "message": "cgroup: don\u0027t use idr_remove_all()\n\nidr_destroy() can destroy idr by itself and idr_remove_all() is being\ndeprecated.  Drop its usage.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d895cb1af15c04c522a25c79cc429076987c089b",
      "tree": "895dc9157e28f603d937a58be664e4e440d5530c",
      "parents": [
        "9626357371b519f2b955fef399647181034a77fe",
        "d3d009cb965eae7e002ea5badf603ea8f4c34915"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 26 20:16:07 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 26 20:16:07 2013 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs\n\nPull vfs pile (part one) from Al Viro:\n \"Assorted stuff - cleaning namei.c up a bit, fixing -\u003ed_name/-\u003ed_parent\n  locking violations, etc.\n\n  The most visible changes here are death of FS_REVAL_DOT (replaced with\n  \"has -\u003ed_weak_revalidate()\") and a new helper getting from struct file\n  to inode.  Some bits of preparation to xattr method interface changes.\n\n  Misc patches by various people sent this cycle *and* ocfs2 fixes from\n  several cycles ago that should\u0027ve been upstream right then.\n\n  PS: the next vfs pile will be xattr stuff.\"\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (46 commits)\n  saner proc_get_inode() calling conventions\n  proc: avoid extra pde_put() in proc_fill_super()\n  fs: change return values from -EACCES to -EPERM\n  fs/exec.c: make bprm_mm_init() static\n  ocfs2/dlm: use GFP_ATOMIC inside a spin_lock\n  ocfs2: fix possible use-after-free with AIO\n  ocfs2: Fix oops in ocfs2_fast_symlink_readpage() code path\n  get_empty_filp()/alloc_file() leave both -\u003ef_pos and -\u003ef_version zero\n  target: writev() on single-element vector is pointless\n  export kernel_write(), convert open-coded instances\n  fs: encode_fh: return FILEID_INVALID if invalid fid_type\n  kill f_vfsmnt\n  vfs: kill FS_REVAL_DOT by adding a d_weak_revalidate dentry op\n  nfsd: handle vfs_getattr errors in acl protocol\n  switch vfs_getattr() to struct path\n  default SET_PERSONALITY() in linux/elf.h\n  ceph: prepopulate inodes only when request is aborted\n  d_hash_and_lookup(): export, switch open-coded instances\n  9p: switch v9fs_set_create_acl() to inode+fid, do it before d_instantiate()\n  9p: split dropping the acls from v9fs_set_create_acl()\n  ...\n"
    },
    {
      "commit": "496ad9aa8ef448058e36ca7a787c61f2e63f0f54",
      "tree": "8f4abde793cd7db5bb8fde6d27ebcacd0e54379a",
      "parents": [
        "57eccb830f1cc93d4b506ba306d8dfa685e0c88f"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jan 23 17:07:38 2013 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Feb 22 23:31:31 2013 -0500"
      },
      "message": "new helper: file_inode(file)\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f169007b2773f285e098cb84c74aac0154d65ff7",
      "tree": "6b295320c25b9fe8c1e4e94fcc35570134ebb8be",
      "parents": [
        "810cbee4fad570ff167132d4ecf247d99c48f71d"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Mon Feb 18 14:13:35 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 18 09:31:35 2013 -0800"
      },
      "message": "cgroup: fail if monitored file and event_control are in different cgroup\n\nIf we pass fd of memory.usage_in_bytes of cgroup A to cgroup.event_control\nof cgroup B, then we won\u0027t get memory usage notification from A but B!\n\nWhat\u0027s worse, if A and B are in different mount hierarchy, we\u0027ll end up\naccessing NULL pointer!\n\nDisallow this kind of invalid usage.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "810cbee4fad570ff167132d4ecf247d99c48f71d",
      "tree": "2806f56a033f43b17ad2c547b2153941c0e77f40",
      "parents": [
        "63f43f55c9bbc14f76b582644019b8a07dc8219a"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Mon Feb 18 18:56:14 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 18 09:17:24 2013 -0800"
      },
      "message": "cgroup: fix cgroup_rmdir() vs close(eventfd) race\n\ncommit 205a872bd6f9a9a09ef035ef1e90185a8245cc58 (\"cgroup: fix lockdep\nwarning for event_control\") solved a deadlock by introducing a new\nbug.\n\nMove cgrp-\u003eevent_list to a temporary list doesn\u0027t mean you can traverse\nthis list locklessly, because at the same time cgroup_event_wake() can\nbe called and remove the event from the list. The result of this race\nis disastrous.\n\nWe adopt the way how kvm irqfd code implements race-free event removal,\nwhich is now described in the comments in cgroup_event_wake().\n\nv3:\n- call eventfd_signal() no matter it\u0027s eventfd close or cgroup removal\nthat removes the cgroup event.\n\nAcked-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "71b5707e119653039e6e95213f00479668c79b75",
      "tree": "cb0dfe84c3b8ec46efce2aa4185342a3a75cc3a1",
      "parents": [
        "9ed8a659703876a9fe96ab86d1b296c2f0084242"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Thu Jan 24 14:43:28 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 18 09:08:10 2013 -0800"
      },
      "message": "cgroup: fix exit() vs rmdir() race\n\nIn cgroup_exit() put_css_set_taskexit() is called without any lock,\nwhich might lead to accessing a freed cgroup:\n\nthread1                           thread2\n---------------------------------------------\nexit()\n  cgroup_exit()\n    put_css_set_taskexit()\n      atomic_dec(cgrp-\u003ecount);\n                                   rmdir();\n      /* not safe !! */\n      check_for_release(cgrp);\n\nrcu_read_lock() can be used to make sure the cgroup is alive.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "9ed8a659703876a9fe96ab86d1b296c2f0084242",
      "tree": "03db3def6303814681f19412c524b3951ccde242",
      "parents": [
        "be44562613851235d801d41d5b3976dc4333f622"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Thu Jan 24 14:32:02 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jan 24 12:05:18 2013 -0800"
      },
      "message": "cgroup: remove bogus comments in cgroup_diput()\n\nSince commit 48ddbe194623ae089cc0576e60363f2d2e85662a\n(\"cgroup: make css-\u003erefcnt clearing on cgroup removal optional\"),\neach css holds a ref on cgroup\u0027s dentry, so cgroup_diput() won\u0027t be\ncalled until all css\u0027 refs go down to 0, which invalids the comments.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "be44562613851235d801d41d5b3976dc4333f622",
      "tree": "ed68df6a444cd106b04f96645c03a6f97fcc2e0c",
      "parents": [
        "86a3db5643c7d29bb36ca85c7a4bb67ad4d88d77"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Thu Jan 24 14:31:42 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jan 24 12:05:18 2013 -0800"
      },
      "message": "cgroup: remove synchronize_rcu() from cgroup_diput()\n\nFree cgroup via call_rcu(). The actual work is done through\nworkqueue.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "86a3db5643c7d29bb36ca85c7a4bb67ad4d88d77",
      "tree": "62fb73cc15fbcb751ee434a7bd9d1546851a4556",
      "parents": [
        "2a73991b76cbd38c4a0c6704449ccc08c89c3ff3"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Thu Jan 24 14:31:27 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jan 24 12:05:18 2013 -0800"
      },
      "message": "cgroup: remove duplicate RCU free on struct cgroup\n\nWhen destroying a cgroup, though in cgroup_diput() we\u0027ve called\nsynchronize_rcu(), we then still have to free it via call_rcu().\n\nThe story is, long ago to fix a race between reading /proc/sched_debug\nand freeing cgroup, the code was changed to utilize call_rcu(). See\ncommit a47295e6bc42ad35f9c15ac66f598aa24debd4e2 (\"cgroups: make\ncgroup_path() RCU-safe\")\n\nAs we\u0027ve fixed cpu cgroup that cpu_cgroup_offline_css() is used\nto unregister a task_group so there won\u0027t be concurrent access\nto this task_group after synchronize_rcu() in diput(). Now we can\njust kfree(cgrp).\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "fe1c06ca7523baa668c1eaf1e1016fa64753c32e",
      "tree": "25a86fc2be7a9c155bb490332696b4228964207d",
      "parents": [
        "b5d646f5d5a135064232ff3a140a47a5b84bc911"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Thu Jan 24 14:30:22 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jan 24 12:05:17 2013 -0800"
      },
      "message": "cgroup: initialize cgrp-\u003edentry before css_alloc()\n\nWith this change, we\u0027re guaranteed that cgroup_path() won\u0027t see NULL\ncgrp-\u003edentry, and thus we can remove the NULL check in it.\n\n(Well, it\u0027s not strictly true, because dummptop.dentry is always NULL\n but we already handle that separately.)\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "b5d646f5d5a135064232ff3a140a47a5b84bc911",
      "tree": "5fc28dda2515b0c7eede54ab0a687d7a9714240f",
      "parents": [
        "2739d3cce9816805fe26774fea2527d5b16e924d"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Thu Jan 24 14:43:51 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jan 24 10:40:05 2013 -0800"
      },
      "message": "cgroup: remove a NULL check in cgroup_exit()\n\ninit_task.cgroups is initialized at boot phase, and whenver a ask\nis forked, it\u0027s cgroups pointer is inherited from its parent, and\nit\u0027s never set to NULL afterwards.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "2739d3cce9816805fe26774fea2527d5b16e924d",
      "tree": "de9fa4a5d6090835a551cea82c09a146d391f37e",
      "parents": [
        "130e3695a3edf6bf21464f2826720a79a6afdee0"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Mon Jan 21 18:18:33 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jan 22 16:29:07 2013 -0800"
      },
      "message": "cgroup: fix bogus kernel warnings when cgroup_create() failed\n\nIf cgroup_create() failed and cgroup_destroy_locked() is called to\ndo cleanup, we\u0027ll see a bunch of warnings:\n\ncgroup_addrm_files: failed to remove 2MB.limit_in_bytes, err\u003d-2\ncgroup_addrm_files: failed to remove 2MB.usage_in_bytes, err\u003d-2\ncgroup_addrm_files: failed to remove 2MB.max_usage_in_bytes, err\u003d-2\ncgroup_addrm_files: failed to remove 2MB.failcnt, err\u003d-2\ncgroup_addrm_files: failed to remove prioidx, err\u003d-2\ncgroup_addrm_files: failed to remove ifpriomap, err\u003d-2\n...\n\nWe failed to remove those files, because cgroup_create() has failed\nbefore creating those cgroup files.\n\nTo fix this, we simply don\u0027t warn if cgroup_rm_file() can\u0027t find the\ncft entry.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "130e3695a3edf6bf21464f2826720a79a6afdee0",
      "tree": "f2a38543101c92653b399520683f91e317617593",
      "parents": [
        "5d65bc0ca1bceb73204dab943922ba3c83276a8c"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Mon Jan 14 17:24:18 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jan 14 10:49:39 2013 -0800"
      },
      "message": "cgroup: remove synchronize_rcu() from rebind_subsystems()\n\nNothing\u0027s protected by RCU in rebind_subsystems(), and I can\u0027t think\nof a reason why it is needed.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "5d65bc0ca1bceb73204dab943922ba3c83276a8c",
      "tree": "3ebf35a0a034eb4f8a564d71c46ad7de1fdffcfa",
      "parents": [
        "0ac801fe07374148714b5ef53df90ac5b1673c0c"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Mon Jan 14 17:23:26 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jan 14 10:44:42 2013 -0800"
      },
      "message": "cgroup: remove synchronize_rcu() from cgroup_attach_{task|proc}()\n\nThese 2 syncronize_rcu()s make attaching a task to a cgroup\nquite slow, and it can\u0027t be ignored in some situations.\n\nA real case from Colin Cross: Android uses cgroups heavily to\nmanage thread priorities, putting threads in a background group\nwith reduced cpu.shares when they are not visible to the user,\nand in a foreground group when they are. Some RPCs from foreground\nthreads to background threads will temporarily move the background\nthread into the foreground group for the duration of the RPC.\nThis results in many calls to cgroup_attach_task.\n\nIn cgroup_attach_task() it\u0027s task-\u003ecgroups that is protected by RCU,\nand put_css_set() calls kfree_rcu() to free it.\n\nIf we remove this synchronize_rcu(), there can be threads in RCU-read\nsections accessing their old cgroup via current-\u003ecgroups with\nconcurrent rmdir operation, but this is safe.\n\n # time for ((i\u003d0; i\u003c50; i++)) { echo $$ \u003e /mnt/sub/tasks; echo $$ \u003e /mnt/tasks; }\n\nreal    0m2.524s\nuser    0m0.008s\nsys     0m0.004s\n\nWith this patch:\n\nreal    0m0.004s\nuser    0m0.004s\nsys     0m0.000s\n\ntj: These synchronize_rcu()s are utterly confused.  synchornize_rcu()\n    necessarily has to come between two operations to guarantee that\n    the changes made by the former operation are visible to all rcu\n    readers before proceeding to the latter operation.  Here,\n    synchornize_rcu() are at the end of attach operations with nothing\n    beyond it.  Its only effect would be delaying completion of\n    write(2) to sysfs tasks/procs files until all rcu readers see the\n    change, which doesn\u0027t mean anything.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Colin Cross \u003cccross@google.com\u003e\n"
    },
    {
      "commit": "0ac801fe07374148714b5ef53df90ac5b1673c0c",
      "tree": "aad528311f4d876c0b8e3750d9cb7b0e072b2935",
      "parents": [
        "799105d514384b80cbe3182dbcb4ed30aa07e1f5"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Thu Jan 10 11:49:27 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jan 10 12:10:31 2013 -0800"
      },
      "message": "cgroup: use new hashtable implementation\n\nSwitch cgroup to use the new hashtable implementation. No functional changes.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "12a9d2fef1d35770d3cdc2cd1faabb83c45bc0fa",
      "tree": "a7c50e81a638a156ce8d4f41dcab273397e6e474",
      "parents": [
        "d5b1fe68baa7213f198e5be8cd1a1037258ab2c8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jan 07 08:49:33 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jan 07 08:50:28 2013 -0800"
      },
      "message": "cgroup: implement cgroup_rightmost_descendant()\n\nImplement cgroup_rightmost_descendant() which returns the right most\ndescendant of the specified cgroup.  This can be used to skip the\ncgroup\u0027s subtree while iterating with\ncgroup_for_each_descendant_pre().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "848b81415c42ff3dc9a4204749087b015c37ef66",
      "tree": "391da3a73aea48632248220d2d6b8d45a88f7eae",
      "parents": [
        "992956189de58cae9f2be40585bc25105cd7c5ad",
        "6fd59a83b9261fa53eaf98fb5514abba504a3ea3"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 17 20:58:12 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 17 20:58:12 2012 -0800"
      },
      "message": "Merge branch \u0027akpm\u0027 (Andrew\u0027s patch-bomb)\n\nMerge misc patches from Andrew Morton:\n \"Incoming:\n\n   - lots of misc stuff\n\n   - backlight tree updates\n\n   - lib/ updates\n\n   - Oleg\u0027s percpu-rwsem changes\n\n   - checkpatch\n\n   - rtc\n\n   - aoe\n\n   - more checkpoint/restart support\n\n  I still have a pile of MM stuff pending - Pekka should be merging\n  later today after which that is good to go.  A number of other things\n  are twiddling thumbs awaiting maintainer merges.\"\n\n* emailed patches from Andrew Morton \u003cakpm@linux-foundation.org\u003e: (180 commits)\n  scatterlist: don\u0027t BUG when we can trivially return a proper error.\n  docs: update documentation about /proc/\u003cpid\u003e/fdinfo/\u003cfd\u003e fanotify output\n  fs, fanotify: add @mflags field to fanotify output\n  docs: add documentation about /proc/\u003cpid\u003e/fdinfo/\u003cfd\u003e output\n  fs, notify: add procfs fdinfo helper\n  fs, exportfs: add exportfs_encode_inode_fh() helper\n  fs, exportfs: escape nil dereference if no s_export_op present\n  fs, epoll: add procfs fdinfo helper\n  fs, eventfd: add procfs fdinfo helper\n  procfs: add ability to plug in auxiliary fdinfo providers\n  tools/testing/selftests/kcmp/kcmp_test.c: print reason for failure in kcmp_test\n  breakpoint selftests: print failure status instead of cause make error\n  kcmp selftests: print fail status instead of cause make error\n  kcmp selftests: make run_tests fix\n  mem-hotplug selftests: print failure status instead of cause make error\n  cpu-hotplug selftests: print failure status instead of cause make error\n  mqueue selftests: print failure status instead of cause make error\n  vm selftests: print failure status instead of cause make error\n  ubifs: use prandom_bytes\n  mtd: nandsim: use prandom_bytes\n  ...\n"
    },
    {
      "commit": "8ec7d50f1ed2b072d23ce810f86df09ee0568d4b",
      "tree": "913675a8d7d167a29e5d9dac4f16b6dfa0746bb8",
      "parents": [
        "66d93341b507185d6934756fb6f6b69b42ff43e4"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Mon Dec 17 15:59:36 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 17 17:15:12 2012 -0800"
      },
      "message": "kernel: remove reference to feature-removal-schedule.txt\n\nIn commit 9c0ece069b32 (\"Get rid of Documentation/feature-removal.txt\"),\nLinus removed feature-removal-schedule.txt from Documentation, but there\nis still some reference to this file.  So remove them.\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6a2b60b17b3e48a418695a94bd2420f6ab32e519",
      "tree": "54b7792fa68b8890f710fa6398b6ba8626a039a8",
      "parents": [
        "9228ff90387e276ad67b10c0eb525c9d6a57d5e9",
        "98f842e675f96ffac96e6c50315790912b2812be"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 17 15:44:47 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 17 15:44:47 2012 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace\n\nPull user namespace changes from Eric Biederman:\n \"While small this set of changes is very significant with respect to\n  containers in general and user namespaces in particular.  The user\n  space interface is now complete.\n\n  This set of changes adds support for unprivileged users to create user\n  namespaces and as a user namespace root to create other namespaces.\n  The tyranny of supporting suid root preventing unprivileged users from\n  using cool new kernel features is broken.\n\n  This set of changes completes the work on setns, adding support for\n  the pid, user, mount namespaces.\n\n  This set of changes includes a bunch of basic pid namespace\n  cleanups/simplifications.  Of particular significance is the rework of\n  the pid namespace cleanup so it no longer requires sending out\n  tendrils into all kinds of unexpected cleanup paths for operation.  At\n  least one case of broken error handling is fixed by this cleanup.\n\n  The files under /proc/\u003cpid\u003e/ns/ have been converted from regular files\n  to magic symlinks which prevents incorrect caching by the VFS,\n  ensuring the files always refer to the namespace the process is\n  currently using and ensuring that the ptrace_mayaccess permission\n  checks are always applied.\n\n  The files under /proc/\u003cpid\u003e/ns/ have been given stable inode numbers\n  so it is now possible to see if different processes share the same\n  namespaces.\n\n  Through the David Miller\u0027s net tree are changes to relax many of the\n  permission checks in the networking stack to allowing the user\n  namespace root to usefully use the networking stack.  Similar changes\n  for the mount namespace and the pid namespace are coming through my\n  tree.\n\n  Two small changes to add user namespace support were commited here adn\n  in David Miller\u0027s -net tree so that I could complete the work on the\n  /proc/\u003cpid\u003e/ns/ files in this tree.\n\n  Work remains to make it safe to build user namespaces and 9p, afs,\n  ceph, cifs, coda, gfs2, ncpfs, nfs, nfsd, ocfs2, and xfs so the\n  Kconfig guard remains in place preventing that user namespaces from\n  being built when any of those filesystems are enabled.\n\n  Future design work remains to allow root users outside of the initial\n  user namespace to mount more than just /proc and /sys.\"\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace: (38 commits)\n  proc: Usable inode numbers for the namespace file descriptors.\n  proc: Fix the namespace inode permission checks.\n  proc: Generalize proc inode allocation\n  userns: Allow unprivilged mounts of proc and sysfs\n  userns: For /proc/self/{uid,gid}_map derive the lower userns from the struct file\n  procfs: Print task uids and gids in the userns that opened the proc file\n  userns: Implement unshare of the user namespace\n  userns: Implent proc namespace operations\n  userns: Kill task_user_ns\n  userns: Make create_new_namespaces take a user_ns parameter\n  userns: Allow unprivileged use of setns.\n  userns: Allow unprivileged users to create new namespaces\n  userns: Allow setting a userns mapping to your current uid.\n  userns: Allow chown and setgid preservation\n  userns: Allow unprivileged users to create user namespaces.\n  userns: Ignore suid and sgid on binaries if the uid or gid can not be mapped\n  userns: fix return value on mntns_install() failure\n  vfs: Allow unprivileged manipulation of the mount namespace.\n  vfs: Only support slave subtrees across different user namespaces\n  vfs: Add a user namespace reference from struct mnt_namespace\n  ...\n"
    },
    {
      "commit": "f33fddc2b9573d8359f1007d4bbe5cd587a0c093",
      "tree": "a970a2cd9d59ed0bc80eea8e9392978c38517772",
      "parents": [
        "7083d0378a1746f2b45729cae494c6b92e75d73f"
      ],
      "author": {
        "name": "Gao feng",
        "email": "gaofeng@cn.fujitsu.com",
        "time": "Thu Dec 06 14:38:57 2012 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Dec 06 08:58:11 2012 -0800"
      },
      "message": "cgroup_rm_file: don\u0027t delete the uncreated files\n\nin cgroup_add_file,when creating files for cgroup,\nsome of creation may be skipped. So we need to avoid\ndeleting these uncreated files in cgroup_rm_file,\notherwise the warning msg will be triggered.\n\n\"cgroup_addrm_files: failed to remove memory_pressure_enabled, err\u003d-2\"\n\nSigned-off-by: Gao feng \u003cgaofeng@cn.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@redhat.com\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "7083d0378a1746f2b45729cae494c6b92e75d73f",
      "tree": "bc2a732ffe1e9b4337a55b3fb7cc215a27159053",
      "parents": [
        "879a3d9dbbde823ac77d39131e7a287f31b8296f"
      ],
      "author": {
        "name": "Gao feng",
        "email": "gaofeng@cn.fujitsu.com",
        "time": "Mon Dec 03 09:28:18 2012 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Dec 03 08:33:11 2012 -0800"
      },
      "message": "cgroup: remove subsystem files when remounting cgroup\n\ncgroup_clear_directroy is called by cgroup_d_remove_dir\nand cgroup_remount.\n\nwhen we call cgroup_remount to remount the cgroup,the subsystem\nmay be unlinked from cgroupfs_root-\u003esubsys_list in rebind_subsystem,this\nsubsystem\u0027s files will not be removed in cgroup_clear_directroy.\nAnd the system will panic when we try to access these files.\n\nthis patch removes subsystems\u0027s files before rebind_subsystems,\nif rebind_subsystems failed, repopulate these removed files.\n\nWith help from Tejun.\n\nSigned-off-by: Gao feng \u003cgaofeng@cn.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "879a3d9dbbde823ac77d39131e7a287f31b8296f",
      "tree": "081a858a5d37325fc3210180c34c1f79efbdfbae",
      "parents": [
        "1f869e8711d18aaf6e2979922bc9377ad394b82f"
      ],
      "author": {
        "name": "Gao feng",
        "email": "gaofeng@cn.fujitsu.com",
        "time": "Sat Dec 01 00:21:28 2012 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 30 11:44:12 2012 -0800"
      },
      "message": "cgroup: use cgroup_addrm_files() in cgroup_clear_directory()\n\ncgroup_clear_directory() incorrectly invokes cgroup_rm_file() on each\ncftset of the target subsystems, which only removes the first file of\neach set.  This leaves dangling files after subsystems are removed\nfrom a cgroup root via remount.\n\nUse cgroup_addrm_files() to remove all files of target subsystems.\n\ntj: Move cgroup_addrm_files() prototype decl upwards next to other\n    global declarations.  Commit message updated.\n\nSigned-off-by: Gao feng \u003cgaofeng@cn.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "1f869e8711d18aaf6e2979922bc9377ad394b82f",
      "tree": "b6da5d097987c745d6ff970efefec2225ca85bb5",
      "parents": [
        "9718ceb3431acdeee9bdec5c18e18266333970aa"
      ],
      "author": {
        "name": "Glauber Costa",
        "email": "glommer@parallels.com",
        "time": "Fri Nov 30 17:31:23 2012 +0400"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 30 07:11:07 2012 -0800"
      },
      "message": "cgroup: warn about broken hierarchies only after css_online\n\nIf everything goes right, it shouldn\u0027t really matter if we are spitting\nthis warning after css_alloc or css_online. If we fail between then,\nthere are some ill cases where we would previously see the message and\nnow we won\u0027t (like if the files fail to be created).\n\nI believe it really shouldn\u0027t matter: this message is intended in spirit\nto be shown when creation succeeds, but with insane settings.\n\nSigned-off-by: Glauber Costa \u003cglommer@parallels.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "9718ceb3431acdeee9bdec5c18e18266333970aa",
      "tree": "5f8cf33738076409cf0c311100b2972c0571ec27",
      "parents": [
        "205a872bd6f9a9a09ef035ef1e90185a8245cc58"
      ],
      "author": {
        "name": "Greg Thelen",
        "email": "gthelen@google.com",
        "time": "Wed Nov 28 13:50:45 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Nov 28 13:52:14 2012 -0800"
      },
      "message": "cgroup: list_del_init() on removed events\n\nUse list_del_init() rather than list_del() to remove events from\ncgrp-\u003eevent_list.  No functional change.  This is just defensive\ncoding.\n\nSigned-off-by: Greg Thelen \u003cgthelen@google.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "205a872bd6f9a9a09ef035ef1e90185a8245cc58",
      "tree": "9b39a5823dddf6319a021d4ab36c7cd35f612908",
      "parents": [
        "fddfb02ad0d0d3b479c2a26a8ae7e6411b34706b"
      ],
      "author": {
        "name": "Greg Thelen",
        "email": "gthelen@google.com",
        "time": "Wed Nov 28 13:50:44 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Nov 28 13:51:56 2012 -0800"
      },
      "message": "cgroup: fix lockdep warning for event_control\n\nThe cgroup_event_wake() function is called with the wait queue head\nlocked and it takes cgrp-\u003eevent_list_lock. However, in cgroup_rmdir()\nremove_wait_queue() was being called after taking\ncgrp-\u003eevent_list_lock.  Correct the lock ordering by using a temporary\nlist to obtain the event list to remove from the wait queue.\n\nSigned-off-by: Greg Thelen \u003cgthelen@google.com\u003e\nSigned-off-by: Aaron Durbin \u003cadurbin@google.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "fddfb02ad0d0d3b479c2a26a8ae7e6411b34706b",
      "tree": "f3d8aa9e526486f4d07fc6f0a3619ce98ffeb3b9",
      "parents": [
        "811d8d6ff59cbc7d618dfa2cd339ba6c3691a7eb"
      ],
      "author": {
        "name": "Li Zhong",
        "email": "zhong@linux.vnet.ibm.com",
        "time": "Wed Nov 28 17:15:21 2012 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Nov 28 06:02:39 2012 -0800"
      },
      "message": "cgroup: move list add after list head initilization\n\n2243076ad1 (\"cgroup: initialize cgrp-\u003eallcg_node in\ninit_cgroup_housekeeping()\") initializes cgrp-\u003eallcg_node in\ninit_cgroup_housekeeping().  Then in init_cgroup_root(), we should\ncall init_cgroup_housekeeping() before adding it to \u0026root-\u003eallcg_list;\notherwise, we are initializing an entry already in a list.\n\nSigned-off-by: Li Zhong \u003czhong@linux.vnet.ibm.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "d0b2fdd2a51203f04ea0a5d716e033c15e0231af",
      "tree": "778d37a6aa21db18b7416309a5cbd1d664e9c6e0",
      "parents": [
        "0a950f65e1e64f4e82b4b5507773848ea88bcb8e"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Tue Nov 20 22:06:18 2012 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Nov 20 06:44:58 2012 -0800"
      },
      "message": "cgroup: remove obsolete guarantee from cgroup_task_migrate.\n\n\u0027guarantee\u0027 is already removed from cgroup_task_migrate, so remove\nthe corresponding comments. Some other typos in cgroup are also\nchanged.\n\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "0a950f65e1e64f4e82b4b5507773848ea88bcb8e",
      "tree": "90106ea13abc3cfe9226dc0c7628ccad136f92b4",
      "parents": [
        "033fa1c5f5f73833598a0beb022c0048fb769dad"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 09:02:12 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 09:02:12 2012 -0800"
      },
      "message": "cgroup: add cgroup-\u003eid\n\nWith the introduction of generic cgroup hierarchy iterators, css_id is\nbeing phased out.  It was unnecessarily complex, id\u0027ing the wrong\nthing (cgroups need IDs, not CSSes) and has other oddities like not\nbeing available at -\u003ecss_alloc().\n\nThis patch adds cgroup-\u003eid, which is a simple per-hierarchy\nida-allocated ID which is assigned before -\u003ecss_alloc() and released\nafter -\u003ecss_free().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: Neil Horman \u003cnhorman@tuxdriver.com\u003e\n"
    },
    {
      "commit": "033fa1c5f5f73833598a0beb022c0048fb769dad",
      "tree": "ec6c34da43d3d71ec3dbfc116ae1c3b8197edc89",
      "parents": [
        "2260e7fc1f18ad815324605c1ce7d5c6fd9b19a2"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:39 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:39 2012 -0800"
      },
      "message": "cgroup, cpuset: remove cgroup_subsys-\u003epost_clone()\n\nCurrently CGRP_CPUSET_CLONE_CHILDREN triggers -\u003epost_clone().  Now\nthat clone_children is cpuset specific, there\u0027s no reason to have this\nrather odd option activation mechanism in cgroup core.  cpuset can\ncheck the flag from its -\u003ecss_allocate() and take the necessary\naction.\n\nMove cpuset_post_clone() logic to the end of cpuset_css_alloc() and\nremove cgroup_subsys-\u003epost_clone().\n\nLoosely based on Glauber\u0027s \"generalize post_clone into post_create\"\npatch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nOriginal-patch-by: Glauber Costa \u003cglommer@parallels.com\u003e\nOriginal-patch: \u003c1351686554-22592-2-git-send-email-glommer@parallels.com\u003e\nAcked-by: Serge E. Hallyn \u003cserge.hallyn@ubuntu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\n"
    },
    {
      "commit": "2260e7fc1f18ad815324605c1ce7d5c6fd9b19a2",
      "tree": "effa76704caa7a6ce40b19de3fa2c3367ac5b431",
      "parents": [
        "92fb97487a7e41b222c1417cabd1d1ab7cc3a48c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:38 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:38 2012 -0800"
      },
      "message": "cgroup: s/CGRP_CLONE_CHILDREN/CGRP_CPUSET_CLONE_CHILDREN/\n\nclone_children is only meaningful for cpuset and will stay that way.\nRename the flag to reflect that and update documentation.  Also, drop\nclone_children() wrapper in cgroup.c.  The thin wrapper is used only a\nfew times and one of them will go away soon.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Serge E. Hallyn \u003cserge.hallyn@ubuntu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\n"
    },
    {
      "commit": "92fb97487a7e41b222c1417cabd1d1ab7cc3a48c",
      "tree": "c220c622b9ac9b16535535d448e9cd29be72c77e",
      "parents": [
        "b1929db42f8a649d9a9e397119f628c27fd4021f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:38 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:38 2012 -0800"
      },
      "message": "cgroup: rename -\u003ecreate/post_create/pre_destroy/destroy() to -\u003ecss_alloc/online/offline/free()\n\nRename cgroup_subsys css lifetime related callbacks to better describe\nwhat their roles are.  Also, update documentation.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "b1929db42f8a649d9a9e397119f628c27fd4021f",
      "tree": "04c0fa6f056395f8d17b5cd918403547be3f1425",
      "parents": [
        "4b8b47eb0001a89f271d671d959b235faa8f03e2"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:38 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:38 2012 -0800"
      },
      "message": "cgroup: allow -\u003epost_create() to fail\n\nThere could be cases where controllers want to do initialization\noperations which may fail from -\u003epost_create().  This patch makes\n-\u003epost_create() return -errno to indicate failure and online_css()\nrelay such failures.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\n"
    },
    {
      "commit": "4b8b47eb0001a89f271d671d959b235faa8f03e2",
      "tree": "611245ac0c36952a3b3e4af19514baf2be3d9104",
      "parents": [
        "b8a2df6a5b576d04f78f54abf254c283527d8bbc"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:38 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:38 2012 -0800"
      },
      "message": "cgroup: update cgroup_create() failure path\n\ncgroup_create() was ignoring failure of cgroupfs files.  Update it\nsuch that, if file creation fails, it rolls back by calling\ncgroup_destroy_locked() and returns failure.\n\nNote that error out goto labels are renamed.  The labels are a bit\nconfusing but will become better w/ later cgroup operation renames.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "b8a2df6a5b576d04f78f54abf254c283527d8bbc",
      "tree": "6a49e4105d3bb3d813378d72ebf67c08d719d0de",
      "parents": [
        "d19e19de48aa0b90c56cd93c8a46ebac46273429"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:37 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:37 2012 -0800"
      },
      "message": "cgroup: use mutex_trylock() when grabbing i_mutex of a new cgroup directory\n\nAll cgroup directory i_mutexes nest outside cgroup_mutex; however, new\ndirectory creation is a special case.  A new cgroup directory is\ncreated while holding cgroup_mutex.  Populating the new directory\nrequires both the new directory\u0027s i_mutex and cgroup_mutex.  Because\nall directory i_mutexes nest outside cgroup_mutex, grabbing both\nrequires releasing cgroup_mutex first, which isn\u0027t a good idea as the\nnew cgroup isn\u0027t yet ready to be manipulated by other cgroup\nopreations.\n\nThis is worked around by grabbing the new directory\u0027s i_mutex while\nholding cgroup_mutex before making it visible.  As there\u0027s no other\nuser at that point, grabbing the i_mutex under cgroup_mutex can\u0027t lead\nto deadlock.\n\ncgroup_create_file() was using I_MUTEX_CHILD to tell lockdep not to\nworry about the reverse locking order; however, this creates pseudo\nlocking dependency cgroup_mutex -\u003e I_MUTEX_CHILD, which isn\u0027t true -\nall directory i_mutexes are still nested outside cgroup_mutex.  This\npseudo locking dependency can lead to spurious lockdep warnings.\n\nUse mutex_trylock() instead.  This will always succeed and lockdep\ndoesn\u0027t create any locking dependency for it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "d19e19de48aa0b90c56cd93c8a46ebac46273429",
      "tree": "ea485692e0b5a7fdfa6bf6a80558957e89b220c2",
      "parents": [
        "a31f2d3ff7fe20cbe2a143515a7d7c408b29dd0d"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:37 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:37 2012 -0800"
      },
      "message": "cgroup: simplify cgroup_load_subsys() failure path\n\nNow that cgroup_unload_subsys() can tell whether the root css is\nonline or not, we can safely call cgroup_unload_subsys() after idr\ninit failure in cgroup_load_subsys().\n\nReplace the manual unrolling and invoke cgroup_unload_subsys() on\nfailure.  This drops cgroup_mutex inbetween but should be safe as the\nsubsystem will fail try_module_get() and thus can\u0027t be mounted\ninbetween.  As this means that cgroup_unload_subsys() can be called\nbefore css_sets are rehashed, remove BUG_ON() on %NULL\ncss_set-\u003esubsys[] from cgroup_unload_subsys().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "a31f2d3ff7fe20cbe2a143515a7d7c408b29dd0d",
      "tree": "fd9e909ad92609eb189d406c4812325788d25bbc",
      "parents": [
        "42809dd4225b2f3127a4804314a1b33608620d96"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:37 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:37 2012 -0800"
      },
      "message": "cgroup: introduce CSS_ONLINE flag and on/offline_css() helpers\n\nNew helpers on/offline_css() respectively wrap -\u003epost_create() and\n-\u003epre_destroy() invocations.  online_css() sets CSS_ONLINE after\n-\u003epost_create() is complete and offline_css() invokes -\u003epre_destroy()\niff CSS_ONLINE is set and clears it while also handling the temporary\ndropping of cgroup_mutex.\n\nThis patch doesn\u0027t introduce any behavior change at the moment but\nwill be used to improve cgroup_create() failure path and allow\n-\u003epost_create() to fail.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "42809dd4225b2f3127a4804314a1b33608620d96",
      "tree": "7600d71baff46173b9b2c051a3530a4a4b7c9582",
      "parents": [
        "02ae7486d05ae6df8395409a4945b2420f1e35c2"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:37 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:37 2012 -0800"
      },
      "message": "cgroup: separate out cgroup_destroy_locked()\n\nSeparate out cgroup_destroy_locked() from cgroup_destroy().  This will\nbe later used in cgroup_create() failure path.\n\nWhile at it, add lockdep asserts on i_mutex and cgroup_mutex, and move\n@d and @parent assignments to their declarations.\n\nThis patch doesn\u0027t introduce any functional difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "02ae7486d05ae6df8395409a4945b2420f1e35c2",
      "tree": "18d3f09250a850d9d6dfe3f62dfe13f4f6353374",
      "parents": [
        "648bb56d076bde31113f09a7d24d95bc8d4155ac"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:37 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:37 2012 -0800"
      },
      "message": "cgroup: fix harmless bugs in cgroup_load_subsys() fail path and cgroup_unload_subsys()\n\n* If idr init fails, cgroup_load_subsys() cleared dummytop-\u003esubsys[]\n  before calilng -\u003edestroy() making CSS inaccessible to the callback,\n  and didn\u0027t unlink ss-\u003esibling.  As no modular controller uses\n  -\u003euse_id, this doesn\u0027t cause any actual problems.\n\n* cgroup_unload_subsys() was forgetting to free idr, call\n  -\u003epre_destroy() and clear -\u003eactive.  As there currently is no\n  modular controller which uses -\u003euse_id, -\u003epre_destroy() or -\u003eactive,\n  this doesn\u0027t cause any actual problems.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "648bb56d076bde31113f09a7d24d95bc8d4155ac",
      "tree": "5e17d543a77f3783e4cfce7f525f4c3255238c07",
      "parents": [
        "b48c6a80a0f7584056f768268fc12b87745a393f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:36 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:36 2012 -0800"
      },
      "message": "cgroup: lock cgroup_mutex in cgroup_init_subsys()\n\nMake cgroup_init_subsys() grab cgroup_mutex while initializing a\nsubsystem so that all helpers and callbacks are called under the\ncontext they expect.  This isn\u0027t strictly necessary as\ncgroup_init_subsys() doesn\u0027t race with anybody but will allow adding\nlockdep assertions.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "b48c6a80a0f7584056f768268fc12b87745a393f",
      "tree": "2bf2581057ce3ec3c0fc8305e5967dbd0c1a14bb",
      "parents": [
        "38b53abaa3e0c7e750ef73eee919cf42eee6b134"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:36 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:36 2012 -0800"
      },
      "message": "cgroup: trivial cleanup for cgroup_init/load_subsys()\n\nConsistently use @css and @dummytop in these two functions instead of\nreferring to them indirectly.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "38b53abaa3e0c7e750ef73eee919cf42eee6b134",
      "tree": "1692ce65068d5df48768564548ec7e4ed4b67da5",
      "parents": [
        "febfcef60d4f9457785b45aab548bc7ee5ea158f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:36 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:36 2012 -0800"
      },
      "message": "cgroup: make CSS_* flags bit masks instead of bit positions\n\nCurrently, CSS_* flags are defined as bit positions and manipulated\nusing atomic bitops.  There\u0027s no reason to use atomic bitops for them\nand bit positions are clunkier to deal with than bit masks.  Make\nCSS_* bit masks instead and use the usual C bitwise operators to\naccess them.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "febfcef60d4f9457785b45aab548bc7ee5ea158f",
      "tree": "70fab0e8ec07aec4142f1dc228f307e6b1d79de0",
      "parents": [
        "4e139afc22cb98d0d032ffce0285bfcc73ca5217"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:36 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:36 2012 -0800"
      },
      "message": "cgroup: cgroup-\u003edentry isn\u0027t a RCU pointer\n\ncgroup-\u003edentry is marked and used as a RCU pointer; however, it isn\u0027t\none - the final dentry put doesn\u0027t go through call_rcu().  cgroup and\ndentry share the same RCU freeing rule via synchronize_rcu() in\ncgroup_diput() (kfree_rcu() used on cgrp is unnecessary).  If cgrp is\naccessible under RCU read lock, so is its dentry and dereferencing\ncgrp-\u003edentry doesn\u0027t need any further RCU protection or annotation.\n\nWhile not being accurate, before the previous patch, the RCU accessors\nserved a purpose as memory barriers - cgroup-\u003edentry used to be\nassigned after the cgroup was made visible to cgroup_path(), so the\nassignment and dereferencing in cgroup_path() needed the memory\nbarrier pair.  Now that list_add_tail_rcu() happens after\ncgroup-\u003edentry is assigned, this no longer is necessary.\n\nRemove the now unnecessary and misleading RCU annotations from\ncgroup-\u003edentry.  To make up for the removal of rcu_dereference_check()\nin cgroup_path(), add an explicit rcu_lockdep_assert(), which asserts\nthe dereference rule of @cgrp, not cgrp-\u003edentry.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "4e139afc22cb98d0d032ffce0285bfcc73ca5217",
      "tree": "51577f433405360504dc67b0f3b0c49afcef36ca",
      "parents": [
        "28fd6f30ac3efd9170ae1ac89f3521d53b5eb83a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:36 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:36 2012 -0800"
      },
      "message": "cgroup: create directory before linking while creating a new cgroup\n\nWhile creating a new cgroup, cgroup_create() links the newly allocated\ncgroup into various places before trying to create its directory.\nBecause cgroup life-cycle is tied to the vfs objects, this makes it\nimpossible to use cgroup_rmdir() for rolling back creation - the\nremoval logic depends on having full vfs objects.\n\nThis patch moves directory creation above linking and collect linking\noperations to one place.  This allows directory creation failure to\nshare error exit path with css allocation failures and any failure\nsites afterwards (to be added later) can use cgroup_rmdir() logic to\nundo creation.\n\nNote that this also makes the memory barriers around cgroup-\u003edentry,\nwhich currently is misleadingly using RCU operations, unnecessary.\nThis will be handled in the next patch.\n\nWhile at it, locking BUG_ON() on i_mutex is converted to\nlockdep_assert_held().\n\nv2: Patch originally removed %NULL dentry check in cgroup_path();\n    however, Li pointed out that this patch doesn\u0027t make it\n    unnecessary as -\u003ecreate() may call cgroup_path().  Drop the\n    change for now.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "28fd6f30ac3efd9170ae1ac89f3521d53b5eb83a",
      "tree": "8f9742385f1e8447c3b66e8f87d7c2fc5ae4441c",
      "parents": [
        "2243076ad128d0cc196cf6597e6ddcf6bc907676"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:36 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:36 2012 -0800"
      },
      "message": "cgroup: open-code cgroup_create_dir()\n\nThe operation order of cgroup creation is about to change and\ncgroup_create_dir() is more of a hindrance than a proper abstraction.\nOpen-code it by moving the parent nlink adjustment next to self nlink\nadjustment in cgroup_create_file() and the rest to cgroup_create().\n\nThis patch doesn\u0027t introduce any behavior change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "2243076ad128d0cc196cf6597e6ddcf6bc907676",
      "tree": "97705aa98559f30740570f2234246836f9eb959d",
      "parents": [
        "175431635ec09b1d1bba04979b006b99e8305a83"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:35 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:35 2012 -0800"
      },
      "message": "cgroup: initialize cgrp-\u003eallcg_node in init_cgroup_housekeeping()\n\nNot strictly necessary but it\u0027s annoying to have uninitialized\nlist_head around.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "175431635ec09b1d1bba04979b006b99e8305a83",
      "tree": "2f7adf26ccaf5dfeae6e56cd37d2050b79c191da",
      "parents": [
        "ef9fe980c6fcc1821ab955b74b242d2d6585fa75"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:35 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:35 2012 -0800"
      },
      "message": "cgroup: remove incorrect dget/dput() pair in cgroup_create_dir()\n\ncgroup_create_dir() does weird dancing with dentry refcnt.  On\nsuccess, it gets and then puts it achieving nothing.  On failure, it\nputs but there isn\u0027t no matching get anywhere leading to the following\noops if cgroup_create_file() fails for whatever reason.\n\n  ------------[ cut here ]------------\n  kernel BUG at /work/os/work/fs/dcache.c:552!\n  invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC\n  Modules linked in:\n  CPU 2\n  Pid: 697, comm: mkdir Not tainted 3.7.0-rc4-work+ #3 Bochs Bochs\n  RIP: 0010:[\u003cffffffff811d9c0c\u003e]  [\u003cffffffff811d9c0c\u003e] dput+0x1dc/0x1e0\n  RSP: 0018:ffff88001a3ebef8  EFLAGS: 00010246\n  RAX: 0000000000000000 RBX: ffff88000e5b1ef8 RCX: 0000000000000403\n  RDX: 0000000000000303 RSI: 2000000000000000 RDI: ffff88000e5b1f58\n  RBP: ffff88001a3ebf18 R08: ffffffff82c76960 R09: 0000000000000001\n  R10: ffff880015022080 R11: ffd9bed70f48a041 R12: 00000000ffffffea\n  R13: 0000000000000001 R14: ffff88000e5b1f58 R15: 00007fff57656d60\n  FS:  00007ff05fcb3800(0000) GS:ffff88001fd00000(0000) knlGS:0000000000000000\n  CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033\n  CR2: 00000000004046f0 CR3: 000000001315f000 CR4: 00000000000006e0\n  DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\n  DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\n  Process mkdir (pid: 697, threadinfo ffff88001a3ea000, task ffff880015022080)\n  Stack:\n   ffff88001a3ebf48 00000000ffffffea 0000000000000001 0000000000000000\n   ffff88001a3ebf38 ffffffff811cc889 0000000000000001 ffff88000e5b1ef8\n   ffff88001a3ebf68 ffffffff811d1fc9 ffff8800198d7f18 ffff880019106ef8\n  Call Trace:\n   [\u003cffffffff811cc889\u003e] done_path_create+0x19/0x50\n   [\u003cffffffff811d1fc9\u003e] sys_mkdirat+0x59/0x80\n   [\u003cffffffff811d2009\u003e] sys_mkdir+0x19/0x20\n   [\u003cffffffff81be1e02\u003e] system_call_fastpath+0x16/0x1b\n  Code: 00 48 8d 90 18 01 00 00 48 89 93 c0 00 00 00 4c 89 a0 18 01 00 00 48 8b 83 a0 00 00 00 83 80 28 01 00 00 01 e8 e6 6f a0 00 eb 92 \u003c0f\u003e 0b 66 90 0f 1f 44 00 00 55 48 89 e5 41 57 41 56 49 89 fe 41\n  RIP  [\u003cffffffff811d9c0c\u003e] dput+0x1dc/0x1e0\n   RSP \u003cffff88001a3ebef8\u003e\n  ---[ end trace 1277bcfd9561ddb0 ]---\n\nFix it by dropping the unnecessary dget/dput() pair.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "17cf22c33e1f1b5e435469c84e43872579497653",
      "tree": "c5cec307c06f7e4ddc26e04e73c8833897b67113",
      "parents": [
        "49f4d8b93ccf9454284b6f524b96c66d8d7fbccc"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Tue Mar 02 14:51:53 2010 -0800"
      },
      "committer": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Mon Nov 19 05:59:09 2012 -0800"
      },
      "message": "pidns: Use task_active_pid_ns where appropriate\n\nThe expressions tsk-\u003ensproxy-\u003epid_ns and task_active_pid_ns\naka ns_of_pid(task_pid(tsk)) should have the same number of\ncache line misses with the practical difference that\nns_of_pid(task_pid(tsk)) is released later in a processes life.\n\nFurthermore by using task_active_pid_ns it becomes trivial\nto write an unshare implementation for the the pid namespace.\n\nSo I have used task_active_pid_ns everywhere I can.\n\nIn fork since the pid has not yet been attached to the\nprocess I use ns_of_pid, to achieve the same effect.\n\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\n"
    },
    {
      "commit": "574bd9f7c7c1d32f52dea5488018a6ff79031e22",
      "tree": "f43657afb59dd12fe1eca329acc6caf885507727",
      "parents": [
        "eb6fd5040ee799009173daa49c3e7aa0362167c9"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 09 09:12:29 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 09 09:12:29 2012 -0800"
      },
      "message": "cgroup: implement generic child / descendant walk macros\n\nCurrently, cgroup doesn\u0027t provide any generic helper for walking a\ngiven cgroup\u0027s children or descendants.  This patch adds the following\nthree macros.\n\n* cgroup_for_each_child() - walk immediate children of a cgroup.\n\n* cgroup_for_each_descendant_pre() - visit all descendants of a cgroup\n  in pre-order tree traversal.\n\n* cgroup_for_each_descendant_post() - visit all descendants of a\n  cgroup in post-order tree traversal.\n\nAll three only require the user to hold RCU read lock during\ntraversal.  Verifying that each iterated cgroup is online is the\nresponsibility of the user.  When used with proper synchronization,\ncgroup_for_each_descendant_pre() can be used to propagate state\nupdates to descendants in reliable way.  See comments for details.\n\nv2: s/config/state/ in commit message and comments per Michal.  More\n    documentation on synchronization rules.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujisu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "eb6fd5040ee799009173daa49c3e7aa0362167c9",
      "tree": "16d837a4479b25d379b558d850431fb3b7291dd1",
      "parents": [
        "a8638030f668884720b8f4456448d0ce33952b05"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 09 09:12:29 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 09 09:12:29 2012 -0800"
      },
      "message": "cgroup: use rculist ops for cgroup-\u003echildren\n\nUse RCU safe list operations for cgroup-\u003echildren.  This will be used\nto implement cgroup children / descendant walking which can be used by\ncontrollers.\n\nNote that cgroup_create() now puts a new cgroup at the end of the\n-\u003echildren list instead of head.  This isn\u0027t strictly necessary but is\ndone so that the iteration order is more conventional.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "a8638030f668884720b8f4456448d0ce33952b05",
      "tree": "2532b2ef9def879513fad0e304a6a9c98fa798f0",
      "parents": [
        "316eb661f125397d46f16f94e3c81ad3dc4c1233"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 09 09:12:29 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 09 09:12:29 2012 -0800"
      },
      "message": "cgroup: add cgroup_subsys-\u003epost_create()\n\nCurrently, there\u0027s no way for a controller to find out whether a new\ncgroup finished all -\u003ecreate() allocatinos successfully and is\nconsidered \"live\" by cgroup.\n\nThis becomes a problem later when we add generic descendants walking\nto cgroup which can be used by controllers as controllers don\u0027t have a\nsynchronization point where it can synchronize against new cgroups\nappearing in such walks.\n\nThis patch adds -\u003epost_create().  It\u0027s called after all -\u003ecreate()\nsucceeded and the cgroup is linked into the generic cgroup hierarchy.\nThis plays the counterpart of -\u003epre_destroy().\n\nWhen used in combination with the to-be-added generic descendant\niterators, -\u003epost_create() can be used to implement reliable state\ninheritance.  It will be explained with the descendant iterators.\n\nv2: Added a paragraph about its future use w/ descendant iterators per\n    Michal.\n\nv3: Forgot to add -\u003epost_create() invocation to cgroup_load_subsys().\n    Fixed.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\n"
    },
    {
      "commit": "316eb661f125397d46f16f94e3c81ad3dc4c1233",
      "tree": "6b3298bff5f264a7046e7bdac2a0ffcd04fbadc8",
      "parents": [
        "4b1c7840b7d01b14a1a00fa0e61b761d4391ba67"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Thu Nov 08 21:36:38 2012 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Nov 08 06:23:02 2012 -0800"
      },
      "message": "cgroup: set \u0027start\u0027 with the right value in cgroup_path.\n\n\u0027start\u0027 is set to buf + buflen and do the \u0027--\u0027 immediately.\nJust set it to \u0027buf + buflen - 1\u0027 directly.\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "5b805f2a7675634fbdf9ac1c9b2256905ab2ea68",
      "tree": "ee00d1e3d757458d66209b926d274491c6c3f61c",
      "parents": [
        "1db1e31b1ee3ae126ef98f39083b5f213c7b41bf",
        "201e72acb2d3821e2de9ce6091e98859c316b29a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Nov 06 12:26:23 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Nov 06 12:26:23 2012 -0800"
      },
      "message": "Merge branch \u0027cgroup/for-3.7-fixes\u0027 into cgroup/for-3.8\n\nThis is to receive device_cgroup fixes so that further device_cgroup\nchanges can be made in cgroup/for-3.8.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "1db1e31b1ee3ae126ef98f39083b5f213c7b41bf",
      "tree": "98328124d3b8b08b6db894c79d0e79b3a42417bf",
      "parents": [
        "5d8f72b55c275677865de670fa147ed318191d81",
        "bcf6de1b9129531215d26dd9af8331e84973bc52"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:21:51 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:21:51 2012 -0800"
      },
      "message": "Merge branch \u0027cgroup-rmdir-updates\u0027 into cgroup/for-3.8\n\nPull rmdir updates into for-3.8 so that further callback updates can\nbe put on top.  This pull created a trivial conflict between the\nfollowing two commits.\n\n  8c7f6edbda (\"cgroup: mark subsystems with broken hierarchy support and whine if cgroups are nested for them\")\n  ed95779340 (\"cgroup: kill cgroup_subsys-\u003e__DEPRECATED_clear_css_refs\")\n\nThe former added a field to cgroup_subsys and the latter removed one\nfrom it.  They happen to be colocated causing the conflict.  Keeping\nwhat\u0027s added and removing what\u0027s removed resolves the conflict.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "bcf6de1b9129531215d26dd9af8331e84973bc52",
      "tree": "0666760423e4579a50a7752568036a13e0cfa9d5",
      "parents": [
        "9d093cb10eb482adfba6ddc71a0969b78823ee8b"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:59 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:59 2012 -0800"
      },
      "message": "cgroup: make -\u003epre_destroy() return void\n\nAll -\u003epre_destory() implementations return 0 now, which is the only\nallowed return value.  Make it return void.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\n"
    },
    {
      "commit": "b25ed609d0eecf077db607e88ea70bae83b6adb2",
      "tree": "ba6d9f2b6d1f0a389acb5a52cd4498c0f5ee6060",
      "parents": [
        "1a90dd508b0b00e382fd61a46f55dc889ac21b39"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:59 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:59 2012 -0800"
      },
      "message": "cgroup: remove CGRP_WAIT_ON_RMDIR, cgroup_exclude_rmdir() and cgroup_release_and_wakeup_rmdir()\n\nCGRP_WAIT_ON_RMDIR is another kludge which was added to make cgroup\ndestruction rollback somewhat working.  cgroup_rmdir() used to drain\nCSS references and CGRP_WAIT_ON_RMDIR and the associated waitqueue and\nhelpers were used to allow the task performing rmdir to wait for the\nnext relevant event.\n\nUnfortunately, the wait is visible to controllers too and the\nmechanism got exposed to memcg by 887032670d (\"cgroup avoid permanent\nsleep at rmdir\").\n\nNow that the draining and retries are gone, CGRP_WAIT_ON_RMDIR is\nunnecessary.  Remove it and all the mechanisms supporting it.  Note\nthat memcontrol.c changes are essentially revert of 887032670d\n(\"cgroup avoid permanent sleep at rmdir\").\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\n"
    },
    {
      "commit": "1a90dd508b0b00e382fd61a46f55dc889ac21b39",
      "tree": "58eb9d638000caa28b29866f0140b609ec397ff8",
      "parents": [
        "976c06bcccc50573997609fa7ec842479bd96ffb"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:59 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:59 2012 -0800"
      },
      "message": "cgroup: deactivate CSS\u0027s and mark cgroup dead before invoking -\u003epre_destroy()\n\nBecause -\u003epre_destroy() could fail and can\u0027t be called under\ncgroup_mutex, cgroup destruction did something very ugly.\n\n  1. Grab cgroup_mutex and verify it can be destroyed; fail otherwise.\n\n  2. Release cgroup_mutex and call -\u003epre_destroy().\n\n  3. Re-grab cgroup_mutex and verify it can still be destroyed; fail\n     otherwise.\n\n  4. Continue destroying.\n\nIn addition to being ugly, it has been always broken in various ways.\nFor example, memcg -\u003epre_destroy() expects the cgroup to be inactive\nafter it\u0027s done but tasks can be attached and detached between #2 and\n#3 and the conditions that memcg verified in -\u003epre_destroy() might no\nlonger hold by the time control reaches #3.\n\nNow that -\u003epre_destroy() is no longer allowed to fail.  We can switch\nto the following.\n\n  1. Grab cgroup_mutex and verify it can be destroyed; fail otherwise.\n\n  2. Deactivate CSS\u0027s and mark the cgroup removed thus preventing any\n     further operations which can invalidate the verification from #1.\n\n  3. Release cgroup_mutex and call -\u003epre_destroy().\n\n  4. Re-grab cgroup_mutex and continue destroying.\n\nAfter this change, controllers can safely assume that -\u003epre_destroy()\nwill only be called only once for a given cgroup and, once\n-\u003epre_destroy() is called, the cgroup will stay dormant till it\u0027s\ndestroyed.\n\nThis removes the only reason -\u003epre_destroy() can fail - new task being\nattached or child cgroup being created inbetween.  Error out path is\nremoved and -\u003epre_destroy() invocation is open coded in\ncgroup_rmdir().\n\nv2: cgroup_call_pre_destroy() removal moved to this patch per Michal.\n    Commit message updated per Glauber.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\n"
    },
    {
      "commit": "976c06bcccc50573997609fa7ec842479bd96ffb",
      "tree": "451f67b3cb6e4b3eb52a1df56d9018eb447960f1",
      "parents": [
        "e93160803ffda2e67d9ff9cacb63bb6868c8398f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:59 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:59 2012 -0800"
      },
      "message": "cgroup: use cgroup_lock_live_group(parent) in cgroup_create()\n\nThis patch makes cgroup_create() fail if @parent is marked removed.\nThis is to prepare for further updates to cgroup_rmdir() path.\n\nNote that this change isn\u0027t strictly necessary.  cgroup can only be\ncreated via mkdir and the removed marking and dentry removal happen\nwithout releasing cgroup_mutex, so cgroup_create() can never race with\ncgroup_rmdir().  Even after the scheduled updates to cgroup_rmdir(),\ncgroup_mkdir() and cgroup_rmdir() are synchronized by i_mutex\nrendering the added liveliness check unnecessary.\n\nDo it anyway such that locking is contained inside cgroup proper and\nwe don\u0027t get nasty surprises if we ever grow another caller of\ncgroup_create().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "e93160803ffda2e67d9ff9cacb63bb6868c8398f",
      "tree": "e3305bb56336c32862f1970882f030caca7f11b2",
      "parents": [
        "ed95779340b50e362245c81b5dec0d11a1debfa8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:58 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:58 2012 -0800"
      },
      "message": "cgroup: kill CSS_REMOVED\n\nCSS_REMOVED is one of the several contortions which were necessary to\nsupport css reference draining on cgroup removal.  All css-\u003erefcnts\nwhich need draining should be deactivated and verified to equal zero\natomically w.r.t. css_tryget().  If any one isn\u0027t zero, all refcnts\nneeded to be re-activated and css_tryget() shouldn\u0027t fail in the\nprocess.\n\nThis was achieved by letting css_tryget() busy-loop until either the\nrefcnt is reactivated (failed removal attempt) or CSS_REMOVED is set\n(committing to removal).\n\nNow that css refcnt draining is no longer used, there\u0027s no need for\natomic rollback mechanism.  css_tryget() simply can look at the\nreference count and fail if it\u0027s deactivated - it\u0027s never getting\nre-activated.\n\nThis patch removes CSS_REMOVED and updates __css_tryget() to fail if\nthe refcnt is deactivated.  As deactivation and removal are a single\nstep now, they no longer need to be protected against css_tryget()\nhappening from irq context.  Remove local_irq_disable/enable() from\ncgroup_rmdir().\n\nNote that this removes css_is_removed() whose only user is VM_BUG_ON()\nin memcontrol.c.  We can replace it with a check on the refcnt but\ngiven that the only use case is a debug assert, I think it\u0027s better to\nsimply unexport it.\n\nv2: Comment updated and explanation on local_irq_disable/enable()\n    added per Michal Hocko.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\n"
    },
    {
      "commit": "ed95779340b50e362245c81b5dec0d11a1debfa8",
      "tree": "875124b1945f62ca741a34d8171189b5c4c3378b",
      "parents": [
        "2ef37d3fe474b218e170010a59066e19427c9847"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:58 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:58 2012 -0800"
      },
      "message": "cgroup: kill cgroup_subsys-\u003e__DEPRECATED_clear_css_refs\n\n2ef37d3fe4 (\"memcg: Simplify mem_cgroup_force_empty_list error\nhandling\") removed the last user of __DEPRECATED_clear_css_refs.  This\npatch removes __DEPRECATED_clear_css_refs and mechanisms to support\nit.\n\n* Conditionals dependent on __DEPRECATED_clear_css_refs removed.\n\n* cgroup_clear_css_refs() can no longer fail.  All that needs to be\n  done are deactivating refcnts, setting CSS_REMOVED and putting the\n  base reference on each css.  Remove cgroup_clear_css_refs() and the\n  failure path, and open-code the loops into cgroup_rmdir().\n\nThis patch keeps the two for_each_subsys() loops separate while open\ncoding them.  They can be merged now but there are scheduled changes\nwhich need them to be separate, so keep them separate to reduce the\namount of churn.\n\nlocal_irq_save/restore() from cgroup_clear_css_refs() are replaced\nwith local_irq_disable/enable() for simplicity.  This is safe as\ncgroup_rmdir() is always called with IRQ enabled.  Note that this IRQ\nswitching is necessary to ensure that css_tryget() isn\u0027t called from\nIRQ context on the same CPU while lower context is between CSS\ndeactivation and setting CSS_REMOVED as css_tryget() would hang\nforever in such cases waiting for CSS to be re-activated or\nCSS_REMOVED set.  This will go away soon.\n\nv2: cgroup_call_pre_destroy() removal dropped per Michal.  Commit\n    message updated to explain local_irq_disable/enable() conversion.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "d87838321124061f6c935069d97f37010fa417e6",
      "tree": "825e291d0ad7bdc7e7eb68e4bb829121de2586bc",
      "parents": [
        "9bb71308b8133d643648776243e4d5599b1c193d"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Oct 18 17:40:30 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Oct 19 14:09:35 2012 -0700"
      },
      "message": "Revert \"cgroup: Remove task_lock() from cgroup_post_fork()\"\n\nThis reverts commit 7e3aa30ac8c904a706518b725c451bb486daaae9.\n\nThe commit incorrectly assumed that fork path always performed\nthreadgroup_change_begin/end() and depended on that for\nsynchronization against task exit and cgroup migration paths instead\nof explicitly grabbing task_lock().\n\nthreadgroup_change is not locked when forking a new process (as\nopposed to a new thread in the same process) and even if it were it\nwouldn\u0027t be effective as different processes use different threadgroup\nlocks.\n\nRevert the incorrect optimization.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nLKML-Reference: \u003c20121008020000.GB2575@localhost\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "9bb71308b8133d643648776243e4d5599b1c193d",
      "tree": "f975fb2ffcd3d9b2ae222705836a9a142b97d350",
      "parents": [
        "1f5320d5972aa50d3e8d2b227b636b370e608359"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Oct 18 17:52:07 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Oct 19 14:08:49 2012 -0700"
      },
      "message": "Revert \"cgroup: Drop task_lock(parent) on cgroup_fork()\"\n\nThis reverts commit 7e381b0eb1e1a9805c37335562e8dc02e7d7848c.\n\nThe commit incorrectly assumed that fork path always performed\nthreadgroup_change_begin/end() and depended on that for\nsynchronization against task exit and cgroup migration paths instead\nof explicitly grabbing task_lock().\n\nthreadgroup_change is not locked when forking a new process (as\nopposed to a new thread in the same process) and even if it were it\nwouldn\u0027t be effective as different processes use different threadgroup\nlocks.\n\nRevert the incorrect optimization.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nLKML-Reference: \u003c20121008020000.GB2575@localhost\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nBitterly-Acked-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "1f5320d5972aa50d3e8d2b227b636b370e608359",
      "tree": "a36f1ef6a2f2f72d81e5aef43c0089bb62056bf5",
      "parents": [
        "ddffeb8c4d0331609ef2581d84de4d763607bd37"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Thu Oct 04 16:37:16 2012 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Oct 16 17:09:36 2012 -0700"
      },
      "message": "cgroup: notify_on_release may not be triggered in some cases\n\nnotify_on_release must be triggered when the last process in a cgroup is\nmove to another. But if the first(and only) process in a cgroup is moved to\nanother, notify_on_release is not triggered.\n\n\t# mkdir /cgroup/cpu/SRC\n\t# mkdir /cgroup/cpu/DST\n\t#\n\t# echo 1 \u003e/cgroup/cpu/SRC/notify_on_release\n\t# echo 1 \u003e/cgroup/cpu/DST/notify_on_release\n\t#\n\t# sleep 300 \u0026\n\t[1] 8629\n\t#\n\t# echo 8629 \u003e/cgroup/cpu/SRC/tasks\n\t# echo 8629 \u003e/cgroup/cpu/DST/tasks\n\t-\u003e notify_on_release for /SRC must be triggered at this point,\n\t   but it isn\u0027t.\n\nThis is because put_css_set() is called before setting CGRP_RELEASABLE\nin cgroup_task_migrate(), and is a regression introduce by the\ncommit:74a1166d(cgroups: make procs file writable), which was merged\ninto v3.0.\n\nCc: Ben Blum \u003cbblum@andrew.cmu.edu\u003e\nCc: \u003cstable@vger.kernel.org\u003e # v3.0.x and later\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "5edee61edeaaebafe584f8fb7074c1ef4658596b",
      "tree": "23e6ee3581eb0009b3c2a2686c25fdba538219de",
      "parents": [
        "ddffeb8c4d0331609ef2581d84de4d763607bd37"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Oct 16 15:03:14 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Oct 16 15:03:14 2012 -0700"
      },
      "message": "cgroup: cgroup_subsys-\u003efork() should be called after the task is added to css_set\n\ncgroup core has a bug which violates a basic rule about event\nnotifications - when a new entity needs to be added, you add that to\nthe notification list first and then make the new entity conform to\nthe current state.  If done in the reverse order, an event happening\ninbetween will be lost.\n\ncgroup_subsys-\u003efork() is invoked way before the new task is added to\nthe css_set.  Currently, cgroup_freezer is the only user of -\u003efork()\nand uses it to make new tasks conform to the current state of the\nfreezer.  If FROZEN state is requested while fork is in progress\nbetween cgroup_fork_callbacks() and cgroup_post_fork(), the child\ncould escape freezing - the cgroup isn\u0027t frozen when -\u003efork() is\ncalled and the freezer couldn\u0027t see the new task on the css_set.\n\nThis patch moves cgroup_subsys-\u003efork() invocation to\ncgroup_post_fork() after the new task is added to the css_set.\ncgroup_fork_callbacks() is removed.\n\nBecause now a task may be migrated during cgroup_subsys-\u003efork(),\nfreezer_fork() is updated so that it adheres to the usual RCU locking\nand the rather pointless comment on why locking can be different there\nis removed (if it doesn\u0027t make anything simpler, why even bother?).\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "68d47a137c3bef754923bccf73fb639c9b0bbd5e",
      "tree": "e82a527bd978ee96283f03d0df36f47d9aee1e41",
      "parents": [
        "c0e8a139a5bb8add02b4111e9e1957d810d7285e",
        "8c7f6edbda01f1b1a2e60ad61f14fe38023e433b"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 02 10:52:28 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 02 10:52:28 2012 -0700"
      },
      "message": "Merge branch \u0027for-3.7-hierarchy\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup\n\nPull cgroup hierarchy update from Tejun Heo:\n \"Currently, different cgroup subsystems handle nested cgroups\n  completely differently.  There\u0027s no consistency among subsystems and\n  the behaviors often are outright broken.\n\n  People at least seem to agree that the broken hierarhcy behaviors need\n  to be weeded out if any progress is gonna be made on this front and\n  that the fallouts from deprecating the broken behaviors should be\n  acceptable especially given that the current behaviors don\u0027t make much\n  sense when nested.\n\n  This patch makes cgroup emit warning messages if cgroups for\n  subsystems with broken hierarchy behavior are nested to prepare for\n  fixing them in the future.  This was put in a separate branch because\n  more related changes were expected (didn\u0027t make it this round) and the\n  memory cgroup wanted to pull in this and make changes on top.\"\n\n* \u0027for-3.7-hierarchy\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup:\n  cgroup: mark subsystems with broken hierarchy support and whine if cgroups are nested for them\n"
    },
    {
      "commit": "8c7f6edbda01f1b1a2e60ad61f14fe38023e433b",
      "tree": "f1db9712b109575cba86e37140e1e4f8a56ca780",
      "parents": [
        "fbcbe2b3c92ee1c930dcfcf8bb764074c100fd63"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Sep 13 12:20:58 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 14 12:01:16 2012 -0700"
      },
      "message": "cgroup: mark subsystems with broken hierarchy support and whine if cgroups are nested for them\n\nCurrently, cgroup hierarchy support is a mess.  cpu related subsystems\nbehave correctly - configuration, accounting and control on a parent\nproperly cover its children.  blkio and freezer completely ignore\nhierarchy and treat all cgroups as if they\u0027re directly under the root\ncgroup.  Others show yet different behaviors.\n\nThese differing interpretations of cgroup hierarchy make using cgroup\nconfusing and it impossible to co-mount controllers into the same\nhierarchy and obtain sane behavior.\n\nEventually, we want full hierarchy support from all subsystems and\nprobably a unified hierarchy.  Users using separate hierarchies\nexpecting completely different behaviors depending on the mounted\nsubsystem is deterimental to making any progress on this front.\n\nThis patch adds cgroup_subsys.broken_hierarchy and sets it to %true\nfor controllers which are lacking in hierarchy support.  The goal of\nthis patch is two-fold.\n\n* Move users away from using hierarchy on currently non-hierarchical\n  subsystems, so that implementing proper hierarchy support on those\n  doesn\u0027t surprise them.\n\n* Keep track of which controllers are broken how and nudge the\n  subsystems to implement proper hierarchy support.\n\nFor now, start with a single warning message.  We can whine louder\nlater on.\n\nv2: Fixed a typo spotted by Michal. Warning message updated.\n\nv3: Updated memcg part so that it doesn\u0027t generate warning in the\n    cases where .use_hierarchy\u003dfalse doesn\u0027t make the behavior\n    different from root.use_hierarchy\u003dtrue.  Fixed a typo spotted by\n    Glauber.\n\nv4: Check -\u003ebroken_hierarchy after cgroup creation is complete so that\n    -\u003ecreate() can affect the result per Michal.  Dropped unnecessary\n    memcg root handling per Michal.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: Serge E. Hallyn \u003cserue@us.ibm.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Paul Turner \u003cpjt@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Thomas Graf \u003ctgraf@suug.ch\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Arnaldo Carvalho de Melo \u003cacme@ghostprotocols.net\u003e\nCc: Neil Horman \u003cnhorman@tuxdriver.com\u003e\nCc: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "8a8e04df4747661daaee77e98e102d99c9e09b98",
      "tree": "8ecd4288cfad84ed2bfc1820331b2483e70abfd3",
      "parents": [
        "80f4c87774721e864d5a5a1f7aca3e95fd90e194"
      ],
      "author": {
        "name": "Daniel Wagner",
        "email": "daniel.wagner@bmw-carit.de",
        "time": "Wed Sep 12 16:12:07 2012 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 14 09:57:43 2012 -0700"
      },
      "message": "cgroup: Assign subsystem IDs during compile time\n\nWARNING: With this change it is impossible to load external built\ncontrollers anymore.\n\nIn case where CONFIG_NETPRIO_CGROUP\u003dm and CONFIG_NET_CLS_CGROUP\u003dm is\nset, corresponding subsys_id should also be a constant. Up to now,\nnet_prio_subsys_id and net_cls_subsys_id would be of the type int and\nthe value would be assigned during runtime.\n\nBy switching the macro definition IS_SUBSYS_ENABLED from IS_BUILTIN\nto IS_ENABLED, all *_subsys_id will have constant value. That means we\nneed to remove all the code which assumes a value can be assigned to\nnet_prio_subsys_id and net_cls_subsys_id.\n\nA close look is necessary on the RCU part which was introduces by\nfollowing patch:\n\n  commit f845172531fb7410c7fb7780b1a6e51ee6df7d52\n  Author:\tHerbert Xu \u003cherbert@gondor.apana.org.au\u003e  Mon May 24 09:12:34 2010\n  Committer:\tDavid S. Miller \u003cdavem@davemloft.net\u003e  Mon May 24 09:12:34 2010\n\n  cls_cgroup: Store classid in struct sock\n\n  Tis code was added to init_cgroup_cls()\n\n\t  /* We can\u0027t use rcu_assign_pointer because this is an int. */\n\t  smp_wmb();\n\t  net_cls_subsys_id \u003d net_cls_subsys.subsys_id;\n\n  respectively to exit_cgroup_cls()\n\n\t  net_cls_subsys_id \u003d -1;\n\t  synchronize_rcu();\n\n  and in module version of task_cls_classid()\n\n\t  rcu_read_lock();\n\t  id \u003d rcu_dereference(net_cls_subsys_id);\n\t  if (id \u003e\u003d 0)\n\t\t  classid \u003d container_of(task_subsys_state(p, id),\n\t\t\t\t\t struct cgroup_cls_state, css)-\u003eclassid;\n\t  rcu_read_unlock();\n\nWithout an explicit explaination why the RCU part is needed. (The\nrcu_deference was fixed by exchanging it to rcu_derefence_index_check()\nin a later commit, but that is a minor detail.)\n\nSo here is my pondering why it was introduced and why it safe to\nremove it now. Note that this code was copied over to net_prio the\nreasoning holds for that subsystem too.\n\nThe idea behind the RCU use for net_cls_subsys_id is to make sure we\nget a valid pointer back from task_subsys_state(). task_subsys_state()\nis just blindly accessing the subsys array and returning the\npointer. Obviously, passing in -1 as id into task_subsys_state()\nreturns an invalid value (out of lower bound).\n\nSo this code makes sure that only after module is loaded and the\nsubsystem registered, the id is assigned.\n\nBefore unregistering the module all old readers must have left the\ncritical section. This is done by assigning -1 to the id and issuing a\nsynchronized_rcu(). Any new readers wont call task_subsys_state()\nanymore and therefore it is safe to unregister the subsystem.\n\nThe new code relies on the same trick, but it looks at the subsys\npointer return by task_subsys_state() (remember the id is constant\nand therefore we allways have a valid index into the subsys\narray).\n\nNo precautions need to be taken during module loading\nmodule. Eventually, all CPUs will get a valid pointer back from\ntask_subsys_state() because rebind_subsystem() which is called after\nthe module init() function will assigned subsys[net_cls_subsys_id] the\nnewly loaded module subsystem pointer.\n\nWhen the subsystem is about to be removed, rebind_subsystem() will\ncalled before the module exit() function. In this case,\nrebind_subsys() will assign subsys[net_cls_subsys_id] a NULL pointer\nand then it calls synchronize_rcu(). All old readers have left by then\nthe critical section. Any new reader wont access the subsystem\nanymore.  At this point we are safe to unregister the subsystem. No\nsynchronize_rcu() call is needed.\n\nSigned-off-by: Daniel Wagner \u003cdaniel.wagner@bmw-carit.de\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: Neil Horman \u003cnhorman@tuxdriver.com\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: \"Paul E. McKenney\" \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Eric Dumazet \u003cedumazet@google.com\u003e\nCc: Gao feng \u003cgaofeng@cn.fujitsu.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\nCc: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\nCc: Jamal Hadi Salim \u003cjhs@mojatatu.com\u003e\nCc: John Fastabend \u003cjohn.r.fastabend@intel.com\u003e\nCc: Kamezawa Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: netdev@vger.kernel.org\nCc: cgroups@vger.kernel.org\n"
    },
    {
      "commit": "80f4c87774721e864d5a5a1f7aca3e95fd90e194",
      "tree": "51e770b751cf6b7716ea6352a5df14bd3dbc7d02",
      "parents": [
        "5fc0b02544b3b9bd3db5a8156b5f3e7350f8e797"
      ],
      "author": {
        "name": "Daniel Wagner",
        "email": "daniel.wagner@bmw-carit.de",
        "time": "Wed Sep 12 16:12:06 2012 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 14 09:57:40 2012 -0700"
      },
      "message": "cgroup: Do not depend on a given order when populating the subsys array\n\nThe *_subsys_id will be used as index to access the subsys. Therefore\nwe need to care we populate the subsystem at the correct position by\nusing designated initialization.\n\nWith this change we are able to interleave builtin and modules in the subsys\narray.\n\nSigned-off-by: Daniel Wagner \u003cdaniel.wagner@bmw-carit.de\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: Neil Horman \u003cnhorman@tuxdriver.com\u003e\nCc: Gao feng \u003cgaofeng@cn.fujitsu.com\u003e\nCc: Jamal Hadi Salim \u003cjhs@mojatatu.com\u003e\nCc: John Fastabend \u003cjohn.r.fastabend@intel.com\u003e\nCc: netdev@vger.kernel.org\nCc: cgroups@vger.kernel.org\n"
    },
    {
      "commit": "5fc0b02544b3b9bd3db5a8156b5f3e7350f8e797",
      "tree": "9382ec0de547289cbda8f4bdb90eb65a029398eb",
      "parents": [
        "be45c900fdc2c66baad5a7703fb8136991d88aeb"
      ],
      "author": {
        "name": "Daniel Wagner",
        "email": "daniel.wagner@bmw-carit.de",
        "time": "Wed Sep 12 16:12:05 2012 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 14 09:57:37 2012 -0700"
      },
      "message": "cgroup: Wrap subsystem selection macro\n\nBefore we are able to define all subsystem ids at compile time we need\na more fine grained control what gets defined when we include\ncgroup_subsys.h. For example we define the enums for the subsystems or\nto declare for struct cgroup_subsys (builtin subsystem) by including\ncgroup_subsys.h and defining SUBSYS accordingly.\n\nCurrently, the decision if a subsys is used is defined inside the\nheader by testing if CONFIG_*\u003dy is true. By moving this test outside\nof cgroup_subsys.h we are able to control it on the include level.\n\nThis is done by introducing IS_SUBSYS_ENABLED which then is defined\naccording the task, e.g. is CONFIG_*\u003dy or CONFIG_*\u003dm.\n\nSigned-off-by: Daniel Wagner \u003cdaniel.wagner@bmw-carit.de\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: Neil Horman \u003cnhorman@tuxdriver.com\u003e\nCc: Gao feng \u003cgaofeng@cn.fujitsu.com\u003e\nCc: Jamal Hadi Salim \u003cjhs@mojatatu.com\u003e\nCc: John Fastabend \u003cjohn.r.fastabend@intel.com\u003e\nCc: netdev@vger.kernel.org\nCc: cgroups@vger.kernel.org\n"
    },
    {
      "commit": "be45c900fdc2c66baad5a7703fb8136991d88aeb",
      "tree": "d787ad6f2d2a762c6ec581123b7325ebd62857f1",
      "parents": [
        "51e4e7faba786d33e5e33f8776c5027a1c8d6fb7"
      ],
      "author": {
        "name": "Daniel Wagner",
        "email": "daniel.wagner@bmw-carit.de",
        "time": "Thu Sep 13 09:50:55 2012 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 14 09:57:32 2012 -0700"
      },
      "message": "cgroup: Remove CGROUP_BUILTIN_SUBSYS_COUNT\n\nCGROUP_BUILTIN_SUBSYS_COUNT is used as start index or stop index when\nlooping over the subsys array looking either at the builtin or the\nmodule subsystems. Since all the builtin subsystems have an id which\nis lower then CGROUP_BUILTIN_SUBSYS_COUNT we know that any module will\nhave an id larger than CGROUP_BUILTIN_SUBSYS_COUNT. In short the ids\nare sorted.\n\nWe are about to change id assignment to happen only at compile time\nlater in this series. That means we can\u0027t rely on the above trick\nsince all ids will always be defined at compile time. Furthermore,\nordering the builtin subsystems and the module subsystems is not\nreally necessary.\n\nSo we need a different way to know which subsystem is a builtin or a\nmodule one. We can use the subsys[]-\u003emodule pointer for this. Any\nplace where we need to know if a subsys is module we just check for\nthe pointer. If it is NULL then the subsystem is a builtin one.\n\nWith this we are able to drop the CGROUP_BUILTIN_SUBSYS_COUNT\nenum. Though we need to introduce a temporary placeholder so that we\ndon\u0027t get a compilation error when only CONFIG_CGROUP is selected and\nno single controller. An empty enum definition is not valid. Later in\nthis series we are able to remove the placeholder again.\n\nAnd with this change we get a fix for this:\n\nkernel/cgroup.c: In function ‘cgroup_load_subsys’:\nkernel/cgroup.c:4326:38: warning: array subscript is below array bounds [-Warray-bounds]\n\nwhen CONFIG_CGROUP\u003dy and no built in controller was enabled.\n\nSigned-off-by: Daniel Wagner \u003cdaniel.wagner@bmw-carit.de\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: Neil Horman \u003cnhorman@tuxdriver.com\u003e\nCc: Gao feng \u003cgaofeng@cn.fujitsu.com\u003e\nCc: Jamal Hadi Salim \u003cjhs@mojatatu.com\u003e\nCc: John Fastabend \u003cjohn.r.fastabend@intel.com\u003e\nCc: netdev@vger.kernel.org\nCc: cgroups@vger.kernel.org\n"
    },
    {
      "commit": "a1a71b45a66fd3c3c453b55fbd180f8fccdd1daa",
      "tree": "bf1ffd6aa6cc5374a7787b5b197aaa440d8366b9",
      "parents": [
        "03b1cde6b22f625ae832b939bc7379ec1466aec5"
      ],
      "author": {
        "name": "Aristeu Rozanski",
        "email": "aris@redhat.com",
        "time": "Thu Aug 23 16:53:31 2012 -0400"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Aug 24 15:55:33 2012 -0700"
      },
      "message": "cgroup: rename subsys_bits to subsys_mask\n\nIn a previous discussion, Tejun Heo suggested to rename references to\nsubsys_bits (added_bits, removed_bits, etc) by something more meaningful.\n\nCc: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: Lennart Poettering \u003clpoetter@redhat.com\u003e\nSigned-off-by: Aristeu Rozanski \u003caris@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "03b1cde6b22f625ae832b939bc7379ec1466aec5",
      "tree": "0aecdc872a6ab2a00a8026e1898d4f3492cca87b",
      "parents": [
        "13af07df9b7e49f1987cf36aa048dc6c49d0f93d"
      ],
      "author": {
        "name": "Aristeu Rozanski",
        "email": "aris@redhat.com",
        "time": "Thu Aug 23 16:53:30 2012 -0400"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Aug 24 15:55:33 2012 -0700"
      },
      "message": "cgroup: add xattr support\n\nThis is one of the items in the plumber\u0027s wish list.\n\nFor use cases:\n\n\u003e\u003e What would the use case be for this?\n\u003e\n\u003e Attaching meta information to services, in an easily discoverable\n\u003e way. For example, in systemd we create one cgroup for each service, and\n\u003e could then store data like the main pid of the specific service as an\n\u003e xattr on the cgroup itself. That way we\u0027d have almost all service state\n\u003e in the cgroupfs, which would make it possible to terminate systemd and\n\u003e later restart it without losing any state information. But there\u0027s more:\n\u003e for example, some very peculiar services cannot be terminated on\n\u003e shutdown (i.e. fakeraid DM stuff) and it would be really nice if the\n\u003e services in question could just mark that on their cgroup, by setting an\n\u003e xattr. On the more desktopy side of things there are other\n\u003e possibilities: for example there are plans defining what an application\n\u003e is along the lines of a cgroup (i.e. an app being a collection of\n\u003e processes). With xattrs one could then attach an icon or human readable\n\u003e program name on the cgroup.\n\u003e\n\u003e The key idea is that this would allow attaching runtime meta information\n\u003e to cgroups and everything they model (services, apps, vms), that doesn\u0027t\n\u003e need any complex userspace infrastructure, has good access control\n\u003e (i.e. because the file system enforces that anyway, and there\u0027s the\n\u003e \"trusted.\" xattr namespace), notifications (inotify), and can easily be\n\u003e shared among applications.\n\u003e\n\u003e Lennart\n\nv7:\n- no changes\nv6:\n- remove user xattr namespace, only allow trusted and security\nv5:\n- check for capabilities before setting/removing xattrs\nv4:\n- no changes\nv3:\n- instead of config option, use mount option to enable xattr support\n\nOriginal-patch-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: Lennart Poettering \u003clpoetter@redhat.com\u003e\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Aristeu Rozanski \u003caris@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "13af07df9b7e49f1987cf36aa048dc6c49d0f93d",
      "tree": "ae726e287583d98c6e3f85a31d574e5d48075861",
      "parents": [
        "38f38657444d15e1a8574eae80ed3de9f501737a"
      ],
      "author": {
        "name": "Aristeu Rozanski",
        "email": "aris@redhat.com",
        "time": "Thu Aug 23 16:53:29 2012 -0400"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Aug 24 15:55:33 2012 -0700"
      },
      "message": "cgroup: revise how we re-populate root directory\n\nWhen remounting cgroupfs with some subsystems added to it and some\nremoved, cgroup will remove all the files in root directory and then\nre-popluate it.\n\nWhat I\u0027m doing here is, only remove files which belong to subsystems that\nare to be unbinded, and only create files for newly-added subsystems.\nThe purpose is to have all other files untouched.\n\nThis is a preparation for cgroup xattr support.\n\nv7:\n- checkpatch warnings fixed\nv6:\n- no changes\nv5:\n- no changes\nv4:\n- refactored cgroup_clear_directory() to not use cgroup_rm_file()\n- instead of going thru the list of files, get the file list using the\n  subsystems\n- use \u0027subsys_mask\u0027 instead of {added,removed}_bits and made\n  cgroup_populate_dir() to match the parameters with cgroup_clear_directory()\nv3:\n- refresh patches after recent refactoring\n\nOriginal-patch-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: Lennart Poettering \u003clpoetter@redhat.com\u003e\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Aristeu Rozanski \u003caris@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "614a6d4341b3760ca98a1c2c09141b71db5d1e90",
      "tree": "6345a6fe908e002f2bd6056427d49b2d0e5652a5",
      "parents": [
        "a08489c569dc174cff97d2cb165aa81e3f1501cc",
        "9a8054aa5d7a98106f72d9ab76e26ebd42320ee0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 24 17:47:44 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 24 17:47:44 2012 -0700"
      },
      "message": "Merge branch \u0027for-3.6\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup\n\nPull cgroup changes from Tejun Heo:\n \"Nothing too interesting.  A minor bug fix and some cleanups.\"\n\n* \u0027for-3.6\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup:\n  cgroup: Update remount documentation\n  cgroup: cgroup_rm_files() was calling simple_unlink() with the wrong inode\n  cgroup: Remove populate() documentation\n  cgroup: remove hierarchy_mutex\n"
    },
    {
      "commit": "9249e17fe094d853d1ef7475dd559a2cc7e23d42",
      "tree": "fa80a6044c14b38994d232c0e05cb7365800adf2",
      "parents": [
        "f015f1267b23d3530d3f874243fb83cb5f443005"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Mon Jun 25 12:55:37 2012 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jul 14 16:38:34 2012 +0400"
      },
      "message": "VFS: Pass mount flags to sget()\n\nPass mount flags to sget() so that it can use them in initialising a new\nsuperblock before the set function is called.  They could also be passed to the\ncompare function.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "00cd8dd3bf95f2cc8435b4cac01d9995635c6d0b",
      "tree": "d44be476ced0317ae79f28853734ebe2210ad38e",
      "parents": [
        "201f956e43d4542723514e024d948011dd766d43"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jun 10 17:13:09 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jul 14 16:34:32 2012 +0400"
      },
      "message": "stop passing nameidata to -\u003elookup()\n\nJust the flags; only NFS cares even about that, but there are\nlegitimate uses for such argument.  And getting rid of that\ncompletely would require splitting -\u003elookup() into a couple\nof methods (at least), so let\u0027s leave that alone for now...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ce27e317ba22b359bde02216afab934dac3af095",
      "tree": "3f301645162ea464d13f6653b3271445f6045d3f",
      "parents": [
        "496f1314f9cac3b59016b5af71ddf47e7a4eb2fb"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jul 03 10:38:06 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jul 09 10:11:14 2012 -0700"
      },
      "message": "cgroup: cgroup_rm_files() was calling simple_unlink() with the wrong inode\n\nWhile refactoring cgroup file removal path, 05ef1d7c4a \"cgroup:\nintroduce struct cfent\" incorrectly changed the @dir argument of\nsimple_unlink() to the inode of the file being deleted instead of that\nof the containing directory.\n\nThe effect of this bug is minor - ctime and mtime of the parent\nweren\u0027t properly updated on file deletion.\n\nFix it by using @cgrp-\u003edentry-\u003ed_inode instead.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Al Viro \u003cviro@ZenIV.linux.org.uk\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "5db9a4d99b0157a513944e9a44d29c9cec2e91dc",
      "tree": "8373f346ea412ece84781bdce33c5e938ad3e3ee",
      "parents": [
        "7db5b3ca0ecdb2e8fad52a4770e4e320e61c77a6"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Jul 07 16:08:18 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Jul 07 16:08:18 2012 -0700"
      },
      "message": "cgroup: fix cgroup hierarchy umount race\n\n48ddbe1946 \"cgroup: make css-\u003erefcnt clearing on cgroup removal\noptional\" allowed a css to linger after the associated cgroup is\nremoved.  As a css holds a reference on the cgroup\u0027s dentry, it means\nthat cgroup dentries may linger for a while.\n\nDestroying a superblock which has dentries with positive refcnts is a\ncritical bug and triggers BUG() in vfs code.  As each cgroup dentry\nholds an s_active reference, any lingering cgroup has both its dentry\nand the superblock pinned and thus preventing premature release of\nsuperblock.\n\nUnfortunately, after 48ddbe1946, there\u0027s a small window while\nreleasing a cgroup which is directly under the root of the hierarchy.\nWhen a cgroup directory is released, vfs layer first deletes the\ncorresponding dentry and then invokes dput() on the parent, which may\nrecurse further, so when a cgroup directly below root cgroup is\nreleased, the cgroup is first destroyed - which releases the s_active\nit was holding - and then the dentry for the root cgroup is dput().\n\nThis creates a window where the root dentry\u0027s refcnt isn\u0027t zero but\nsuperblock\u0027s s_active is.  If umount happens before or during this\nwindow, vfs will see the root dentry with non-zero refcnt and trigger\nBUG().\n\nBefore 48ddbe1946, this problem didn\u0027t exist because the last dentry\nreference was guaranteed to be put synchronously from rmdir(2)\ninvocation which holds s_active around the whole process.\n\nFix it by holding an extra superblock-\u003es_active reference across\ndput() from css release, which is the dput() path added by 48ddbe1946\nand the only one which doesn\u0027t hold an extra s_active ref across the\nfinal cgroup dput().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nLKML-Reference: \u003c4FEEA5CB.8070809@huawei.com\u003e\nReported-by: shyju pv \u003cshyju.pv@huawei.com\u003e\nTested-by: shyju pv \u003cshyju.pv@huawei.com\u003e\nCc: Sasha Levin \u003clevinsasha928@gmail.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "7db5b3ca0ecdb2e8fad52a4770e4e320e61c77a6",
      "tree": "3a6c5d2482e1be5c7d8104073e958b9638e31dec",
      "parents": [
        "cd6407fe220c5cf26c117457f5bcdfd6a81fbef8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Jul 07 15:55:47 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Jul 07 15:55:47 2012 -0700"
      },
      "message": "Revert \"cgroup: superblock can\u0027t be released with active dentries\"\n\nThis reverts commit fa980ca87d15bb8a1317853f257a505990f3ffde.  The\ncommit was an attempt to fix a race condition where a cgroup hierarchy\nmay be unmounted with positive dentry reference on root cgroup.  While\nthe commit made the race condition slightly more difficult to trigger,\nthe race was still there and could be reliably triggered using a\ndifferent test case.\n\nRevert the incorrect fix.  The next commit will describe the race and\nfix it correctly.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nLKML-Reference: \u003c4FEEA5CB.8070809@huawei.com\u003e\nReported-by: shyju pv \u003cshyju.pv@huawei.com\u003e\nCc: Sasha Levin \u003clevinsasha928@gmail.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "8e3bbf42c6d73881956863cc3305456afe2bc4ea",
      "tree": "bb3369e7444a2efe8e890ddd341e576e3cba18c1",
      "parents": [
        "967db0ea65b0bf8507a7643ac8f296c4f2c0a834"
      ],
      "author": {
        "name": "Salman Qazi",
        "email": "sqazi@google.com",
        "time": "Thu Jun 14 14:55:30 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jun 18 15:38:02 2012 -0700"
      },
      "message": "cgroups: Account for CSS_DEACT_BIAS in __css_put\n\nWhen we fixed the race between atomic_dec and css_refcnt, we missed\nthe fact that css_refcnt internally subtracts CSS_DEACT_BIAS to get\nthe actual reference count.  This can potentially cause a refcount leak\nif __css_put races with cgroup_clear_css_refs.\n\nSigned-off-by: Salman Qazi \u003csqazi@google.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "6be96a5c905178637ec06a5d456a76b2b304fca3",
      "tree": "06cc22397df498c7e4dbb7195f77d1bc587295e3",
      "parents": [
        "967db0ea65b0bf8507a7643ac8f296c4f2c0a834"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Wed Jun 06 19:12:30 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jun 06 19:12:30 2012 -0700"
      },
      "message": "cgroup: remove hierarchy_mutex\n\nIt was introduced for memcg to iterate cgroup hierarchy without\nholding cgroup_mutex, but soon after that it was replaced with\na lockless way in memcg.\n\nNo one used hierarchy_mutex since that, so remove it.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "967db0ea65b0bf8507a7643ac8f296c4f2c0a834",
      "tree": "143a9493c9a81db130b313c0c46d87a909485541",
      "parents": [
        "71fae7e714749a52cb8be777ec014f82e8a747f4"
      ],
      "author": {
        "name": "Salman Qazi",
        "email": "sqazi@google.com",
        "time": "Wed Jun 06 18:51:35 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jun 06 18:51:35 2012 -0700"
      },
      "message": "cgroup: make sure that decisions in __css_put are atomic\n\n__css_put is using atomic_dec on the ref count, and then\nlooking at the ref count to make decisions.  This is prone\nto races, as someone else may decrement ref count between\nour decrement and our decision.  Instead, we should base our\ndecisions on the value that we decremented the ref count to.\n\n(This results in an actual race on Google\u0027s kernel which I\nhaven\u0027t been able to reproduce on the upstream kernel.  Having\nsaid that, it\u0027s still incorrect by inspection).\n\nSigned-off-by: Salman Qazi \u003csqazi@google.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "365f0e173f44aad979c464eb8250f6138a9911ef",
      "tree": "cec00f56b5ab382df2701e06dc02bdfd04dbd628",
      "parents": [
        "690efa08e268a36df170bee79df93a9649c3f217",
        "fa980ca87d15bb8a1317853f257a505990f3ffde"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 05 11:54:12 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 05 11:54:12 2012 -0700"
      },
      "message": "Merge branch \u0027for-3.5-fixes\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup\n\nPull cgroup fix from Tejun Heo:\n \"This fixes the possible premature superblock release on umount bug\n  mentioned during v3.5-rc1 pull request.\n\n  Originally, cgroup dentry destruction path assumed that cgroup dentry\n  didn\u0027t have any reference left after cgroup removal thus put super\n  during dentry removal.  Now that there can be lingering dentry\n  references, this led to super being put with live dentries.  This\n  patch fixes the problem by putting super ref on dentry release instead\n  of removal.\"\n\n* \u0027for-3.5-fixes\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup:\n  cgroup: superblock can\u0027t be released with active dentries\n"
    },
    {
      "commit": "91c63734f6908425903aed69c04035592f18d398",
      "tree": "6790827ab915b17c63d5c39d8c72c47f3764f868",
      "parents": [
        "0ce72d4f7333248efbef1f3309770c7edb1b2625"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue May 29 15:06:24 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:20 2012 -0700"
      },
      "message": "kernel: cgroup: push rcu read locking from css_is_ancestor() to callsite\n\nLibrary functions should not grab locks when the callsites can do it,\neven if the lock nests like the rcu read-side lock does.\n\nPush the rcu_read_lock() from css_is_ancestor() to its single user,\nmem_cgroup_same_or_subtree() in preparation for another user that may\nalready hold the rcu read-side lock.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fa980ca87d15bb8a1317853f257a505990f3ffde",
      "tree": "4288f6d27c8a2e30c1fa3b8a9a0f95c5fd6d48c6",
      "parents": [
        "6101167727932a929e37fb8a6eeb68bdbf54d58e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu May 24 08:24:39 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun May 27 17:22:56 2012 -0700"
      },
      "message": "cgroup: superblock can\u0027t be released with active dentries\n\n48ddbe1946 \"cgroup: make css-\u003erefcnt clearing on cgroup removal\noptional\" allowed a css to linger after the associated cgroup is\nremoved.  As a css holds a reference on the cgroup\u0027s dentry, it means\nthat cgroup dentries may linger for a while.\n\ncgroup_create() does grab an active reference on the superblock to\nprevent it from going away while there are !root cgroups; however, the\nreference is put from cgroup_diput() which is invoked on cgroup\nremoval, so cgroup dentries which are removed but persisting due to\nlingering csses already have released their superblock active refs\nallowing superblock to be killed while those dentries are around.\n\nGiven the right condition, this makes cgroup_kill_sb() call\nkill_litter_super() with dentries with non-zero d_count leading to\nBUG() in shrink_dcache_for_umount_subtree().\n\nFix it by adding cgroup_dops-\u003ed_release() operation and moving\ndeactivate_super() to it.  cgroup_diput() now marks dentry-\u003ed_fsdata\nwith itself if superblock should be deactivated and cgroup_d_release()\ndeactivates the superblock on dentry release.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Sasha Levin \u003clevinsasha928@gmail.com\u003e\nTested-by: Sasha Levin \u003clevinsasha928@gmail.com\u003e\nLKML-Reference: \u003cCA+1xoqe5hMuxzCRhMy7J0XchDk2ZnuxOHJKikROk1-ReAzcT6g@mail.gmail.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "644473e9c60c1ff4f6351fed637a6e5551e3dce7",
      "tree": "10316518bedc735a2c6552886658d69dfd9f1eb0",
      "parents": [
        "fb827ec68446c83e9e8754fa9b55aed27ecc4661",
        "4b06a81f1daee668fbd6de85557bfb36dd36078f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 23 17:42:39 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 23 17:42:39 2012 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace\n\nPull user namespace enhancements from Eric Biederman:\n \"This is a course correction for the user namespace, so that we can\n  reach an inexpensive, maintainable, and reasonably complete\n  implementation.\n\n  Highlights:\n   - Config guards make it impossible to enable the user namespace and\n     code that has not been converted to be user namespace safe.\n\n   - Use of the new kuid_t type ensures the if you somehow get past the\n     config guards the kernel will encounter type errors if you enable\n     user namespaces and attempt to compile in code whose permission\n     checks have not been updated to be user namespace safe.\n\n   - All uids from child user namespaces are mapped into the initial\n     user namespace before they are processed.  Removing the need to add\n     an additional check to see if the user namespace of the compared\n     uids remains the same.\n\n   - With the user namespaces compiled out the performance is as good or\n     better than it is today.\n\n   - For most operations absolutely nothing changes performance or\n     operationally with the user namespace enabled.\n\n   - The worst case performance I could come up with was timing 1\n     billion cache cold stat operations with the user namespace code\n     enabled.  This went from 156s to 164s on my laptop (or 156ns to\n     164ns per stat operation).\n\n   - (uid_t)-1 and (gid_t)-1 are reserved as an internal error value.\n     Most uid/gid setting system calls treat these value specially\n     anyway so attempting to use -1 as a uid would likely cause\n     entertaining failures in userspace.\n\n   - If setuid is called with a uid that can not be mapped setuid fails.\n     I have looked at sendmail, login, ssh and every other program I\n     could think of that would call setuid and they all check for and\n     handle the case where setuid fails.\n\n   - If stat or a similar system call is called from a context in which\n     we can not map a uid we lie and return overflowuid.  The LFS\n     experience suggests not lying and returning an error code might be\n     better, but the historical precedent with uids is different and I\n     can not think of anything that would break by lying about a uid we\n     can\u0027t map.\n\n   - Capabilities are localized to the current user namespace making it\n     safe to give the initial user in a user namespace all capabilities.\n\n  My git tree covers all of the modifications needed to convert the core\n  kernel and enough changes to make a system bootable to runlevel 1.\"\n\nFix up trivial conflicts due to nearby independent changes in fs/stat.c\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace: (46 commits)\n  userns:  Silence silly gcc warning.\n  cred: use correct cred accessor with regards to rcu read lock\n  userns: Convert the move_pages, and migrate_pages permission checks to use uid_eq\n  userns: Convert cgroup permission checks to use uid_eq\n  userns: Convert tmpfs to use kuid and kgid where appropriate\n  userns: Convert sysfs to use kgid/kuid where appropriate\n  userns: Convert sysctl permission checks to use kuid and kgids.\n  userns: Convert proc to use kuid/kgid where appropriate\n  userns: Convert ext4 to user kuid/kgid where appropriate\n  userns: Convert ext3 to use kuid/kgid where appropriate\n  userns: Convert ext2 to use kuid/kgid where appropriate.\n  userns: Convert devpts to use kuid/kgid where appropriate\n  userns: Convert binary formats to use kuid/kgid where appropriate\n  userns: Add negative depends on entries to avoid building code that is userns unsafe\n  userns: signal remove unnecessary map_cred_ns\n  userns: Teach inode_capable to understand inodes whose uids map to other namespaces.\n  userns: Fail exec for suid and sgid binaries with ids outside our user namespace.\n  userns: Convert stat to return values mapped from kuids and kgids\n  userns: Convert user specfied uids and gids in chown into kuids and kgid\n  userns: Use uid_eq gid_eq helpers when comparing kuids and kgids in the vfs\n  ...\n"
    },
    {
      "commit": "14a590c3f987977d7b09ec926481ee0238c08eee",
      "tree": "b06a1f674d090abde07bbaca03f53fbe3f346609",
      "parents": [
        "8751e03958f2adbfba6a0f186f4c5797c950c22a"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Mon Mar 12 15:44:39 2012 -0700"
      },
      "committer": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Tue May 15 14:59:30 2012 -0700"
      },
      "message": "userns: Convert cgroup permission checks to use uid_eq\n\nAcked-by: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\n"
    },
    {
      "commit": "c4c27fbdda4e8ba87806c415b6d15266b07bce4b",
      "tree": "e532518e0942a2562642744103eb64554c8abbda",
      "parents": [
        "86f82d561864e902c70282b6f17cf590c0f34691"
      ],
      "author": {
        "name": "Mike Galbraith",
        "email": "mgalbraith@suse.de",
        "time": "Sat Apr 21 09:13:46 2012 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Apr 23 11:03:51 2012 -0700"
      },
      "message": "cgroups: disallow attaching kthreadd or PF_THREAD_BOUND threads\n\nAllowing kthreadd to be moved to a non-root group makes no sense, it being\na global resource, and needlessly leads unsuspecting users toward trouble.\n\n1. An RT workqueue worker thread spawned in a task group with no rt_runtime\nallocated is not schedulable.  Simple user error, but harmful to the box.\n\n2. A worker thread which acquires PF_THREAD_BOUND can never leave a cpuset,\nrendering the cpuset immortal.\n\nSave the user some unexpected trouble, just say no.\n\nSigned-off-by: Mike Galbraith \u003cmgalbraith@suse.de\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "86f82d561864e902c70282b6f17cf590c0f34691",
      "tree": "1f4021c8de07899152b00ddce36f09192ee78395",
      "parents": [
        "cbe128e348e5994516304f94865ff90c40c1c5ae"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Apr 10 10:16:36 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Apr 11 09:16:48 2012 -0700"
      },
      "message": "cgroup: remove cgroup_subsys-\u003epopulate()\n\nWith memcg converted, cgroup_subsys-\u003epopulate() doesn\u0027t have any user\nleft.  Remove it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "48ddbe194623ae089cc0576e60363f2d2e85662a",
      "tree": "bf9f9fc29e28b6440c64727f5e0a57a9ccd8ec5d",
      "parents": [
        "28b4c27b8e6bb6d7ff2875281a8484f8898a87ef"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:56 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:56 2012 -0700"
      },
      "message": "cgroup: make css-\u003erefcnt clearing on cgroup removal optional\n\nCurrently, cgroup removal tries to drain all css references.  If there\nare active css references, the removal logic waits and retries\n-\u003epre_detroy() until either all refs drop to zero or removal is\ncancelled.\n\nThis semantics is unusual and adds non-trivial complexity to cgroup\ncore and IMHO is fundamentally misguided in that it couples internal\nimplementation details (references to internal data structure) with\nexternally visible operation (rmdir).  To userland, this is a behavior\npeculiarity which is unnecessary and difficult to expect (css refs is\notherwise invisible from userland), and, to policy implementations,\nthis is an unnecessary restriction (e.g. blkcg wants to hold css refs\nfor caching purposes but can\u0027t as that becomes visible as rmdir hang).\n\nUnfortunately, memcg currently depends on -\u003epre_destroy() retrials and\ncgroup removal vetoing and can\u0027t be immmediately switched to the new\nbehavior.  This patch introduces the new behavior of not waiting for\ncss refs to drain and maintains the old behavior for subsystems which\nhave __DEPRECATED_clear_css_refs set.\n\nOnce, memcg is updated, we can drop the code paths for the old\nbehavior as proposed in the following patch.  Note that the following\npatch is incorrect in that dput work item is in cgroup and may lose\nsome of dputs when multiples css\u0027s are released back-to-back, and\n__css_put() triggers check_for_release() when refcnt reaches 0 instead\nof 1; however, it shows what part can be removed.\n\n  http://thread.gmane.org/gmane.linux.kernel.containers/22559/focus\u003d75251\n\nNote that, in not-too-distant future, cgroup core will start emitting\nwarning messages for subsys which require the old behavior, so please\nget moving.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\n"
    },
    {
      "commit": "28b4c27b8e6bb6d7ff2875281a8484f8898a87ef",
      "tree": "8da3eefc6b98c46a4dbd0fd6e6d6dec6220382df",
      "parents": [
        "79578621b4847afdef48d19a28d00e3b188c37e1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:56 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:56 2012 -0700"
      },
      "message": "cgroup: use negative bias on css-\u003erefcnt to block css_tryget()\n\nWhen a cgroup is about to be removed, cgroup_clear_css_refs() is\ncalled to check and ensure that there are no active css references.\n\nThis is currently achieved by dropping the refcnt to zero iff it has\nonly the base ref.  If all css refs could be dropped to zero, ref\nclearing is successful and CSS_REMOVED is set on all css.  If not, the\nbase ref is restored.  While css ref is zero w/o CSS_REMOVED set, any\ncss_tryget() attempt on it busy loops so that they are atomic\nw.r.t. the whole css ref clearing.\n\nThis does work but dropping and re-instating the base ref is somewhat\nhairy and makes it difficult to add more logic to the put path as\nthere are two of them - the regular css_put() and the reversible base\nref clearing.\n\nThis patch updates css ref clearing such that blocking new\ncss_tryget() and putting the base ref are separate operations.\nCSS_DEACT_BIAS, defined as INT_MIN, is added to css-\u003erefcnt and\ncss_tryget() busy loops while refcnt is negative.  After all css refs\nare deactivated, if they were all one, ref clearing succeeded and\nCSS_REMOVED is set and the base ref is put using the regular\ncss_put(); otherwise, CSS_DEACT_BIAS is subtracted from the refcnts\nand the original postive values are restored.\n\ncss_refcnt() accessor which always returns the unbiased positive\nreference counts is added and used to simplify refcnt usages.  While\nat it, relocate and reformat comments in cgroup_has_css_refs().\n\nThis separates css-\u003erefcnt deactivation and putting the base ref,\nwhich enables the next patch to make ref clearing optional.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\n"
    },
    {
      "commit": "79578621b4847afdef48d19a28d00e3b188c37e1",
      "tree": "d66c0ba245841eefa75a2f79e5cd8e2be09385eb",
      "parents": [
        "05ef1d7c4a5b6d09cadd2b8e9b3c395363d1a89c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:56 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:56 2012 -0700"
      },
      "message": "cgroup: implement cgroup_rm_cftypes()\n\nImplement cgroup_rm_cftypes() which removes an array of cftypes from a\nsubsystem.  It can be called whether the target subsys is attached or\nnot.  cgroup core will remove the specified file from all existing\ncgroups.\n\nThis will be used to improve sub-subsys modularity and will be helpful\nfor unified hierarchy.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\n"
    },
    {
      "commit": "05ef1d7c4a5b6d09cadd2b8e9b3c395363d1a89c",
      "tree": "c63adfca7c1d6a6858cd0cecf6f4eb83775c35d8",
      "parents": [
        "f6ea93723d0049ae5fbbb5292cb10c51d7a80801"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:56 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:56 2012 -0700"
      },
      "message": "cgroup: introduce struct cfent\n\nThis patch adds cfent (cgroup file entry) which is the association\nbetween a cgroup and a file.  This is in-cgroup representation of\nfiles under a cgroup directory.  This simplifies walking walking\ncgroup files and thus cgroup_clear_directory(), which is now\nimplemented in two parts - cgroup_rm_file() and a loop around it.\n\ncgroup_rm_file() will be used to implement cftype removal and cfent is\nscheduled to serve cgroup specific per-file data (e.g. for sysfs-like\n\"sever\" semantics).\n\nv2: - cfe was freed from cgroup_rm_file() which led to use-after-free\n      if the file had openers at the time of removal.  Moved to\n      cgroup_diput().\n\n    - cgroup_clear_directory() triggered WARN_ON_ONCE() if d_subdirs\n      wasn\u0027t empty after removing all files.  This triggered\n      spuriously if some files were open during directory clearing.\n      Removed.\n\nv3: - In cgroup_diput(), WARN_ONCE(!list_empty(\u0026cfe-\u003enode)) could be\n      spuriously triggered for root cgroups because they don\u0027t go\n      through cgroup_clear_directory() on unmount.  Don\u0027t trigger WARN\n      for root cgroups.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\n"
    },
    {
      "commit": "f6ea93723d0049ae5fbbb5292cb10c51d7a80801",
      "tree": "a4e126269dadbd627b13d896c4494aa2ef0046c1",
      "parents": [
        "db0416b64977cb0f382175608286cc80c7573e38"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "message": "cgroup: relocate __d_cgrp() and __d_cft()\n\nMove the two macros upwards as they\u0027ll be used earlier in the file.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\n"
    },
    {
      "commit": "db0416b64977cb0f382175608286cc80c7573e38",
      "tree": "a244be0b7e7467ed89c390997aec6b176de71140",
      "parents": [
        "6bc103498f5fe512928496fc7802d639cc2d1d20"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "message": "cgroup: remove cgroup_add_file[s]()\n\nNo controller is using cgroup_add_files[s]().  Unexport them, and\nconvert cgroup_add_files() to handle NULL entry terminated array\ninstead of taking count explicitly and continue creation on failure\nfor internal use.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\n"
    },
    {
      "commit": "4baf6e33251b37f111e21289f8ee71fe4cce236e",
      "tree": "7decc386a60679fd2696041810cf331c0daf1f41",
      "parents": [
        "676f7c8f84d15e94065841529016da5ab92e901b"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "message": "cgroup: convert all non-memcg controllers to the new cftype interface\n\nConvert debug, freezer, cpuset, cpu_cgroup, cpuacct, net_prio, blkio,\nnet_cls and device controllers to use the new cftype based interface.\nTermination entry is added to cftype arrays and populate callbacks are\nreplaced with cgroup_subsys-\u003ebase_cftypes initializations.\n\nThis is functionally identical transformation.  There shouldn\u0027t be any\nvisible behavior change.\n\nmemcg is rather special and will be converted separately.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Paul Menage \u003cpaul@paulmenage.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\n"
    },
    {
      "commit": "6e6ff25bd548a0c5bf5163e4f63e2793dcefbdcb",
      "tree": "f2c3adbac3286559e88771c714333733e0422760",
      "parents": [
        "8e3f6541d45e1a002801e56a19530a90f775deba"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "message": "cgroup: merge cft_release_agent cftype array into the base files array\n\nNow that cftype can express whether a file should only be on root,\ncft_release_agent can be merged into the base files cftypes array.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\n"
    },
    {
      "commit": "8e3f6541d45e1a002801e56a19530a90f775deba",
      "tree": "5342d7afce759252f5204c7e33283879cca0490d",
      "parents": [
        "b0ca5a84fc3ad8f75bb2b7ac3dc6a77151cd3906"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "message": "cgroup: implement cgroup_add_cftypes() and friends\n\nCurrently, cgroup directories are populated by subsys-\u003epopulate()\ncallback explicitly creating files on each cgroup creation.  This\nlevel of flexibility isn\u0027t needed or desirable.  It provides largely\nunused flexibility which call for abuses while severely limiting what\nthe core layer can do through the lack of structure and conventions.\n\nPer each cgroup file type, the only distinction that cgroup users is\nmaking is whether a cgroup is root or not, which can easily be\nexpressed with flags.\n\nThis patch introduces cgroup_add_cftypes().  These deal with cftypes\ninstead of individual files - controllers indicate that certain types\nof files exist for certain subsystem.  Newly added CFTYPE_*_ON_ROOT\nflags indicate whether a cftype should be excluded or created only on\nthe root cgroup.\n\ncgroup_add_cftypes() can be called any time whether the target\nsubsystem is currently attached or not.  cgroup core will create files\non the existing cgroups as necessary.\n\nAlso, cgroup_subsys-\u003ebase_cftypes is added to ease registration of the\nbase files for the subsystem.  If non-NULL on subsys init, the cftypes\npointed to by -\u003ebase_cftypes are automatically registered on subsys\ninit / load.\n\nFurther patches will convert the existing users and remove the file\nbased interface.  Note that this interface allows dynamic addition of\nfiles to an active controller.  This will be used for sub-controller\nmodularity and unified hierarchy in the longer term.\n\nThis patch implements the new mechanism but doesn\u0027t apply it to any\nuser.\n\nv2: replaced DECLARE_CGROUP_CFTYPES[_COND]() with\n    cgroup_subsys-\u003ebase_cftypes, which works better for cgroup_subsys\n    which is loaded as module.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\n"
    },
    {
      "commit": "b0ca5a84fc3ad8f75bb2b7ac3dc6a77151cd3906",
      "tree": "87dcdec8c3104ed00b34518b4dc1837e8c03d837",
      "parents": [
        "ff4c8d503e2583b485da46d0ec3dcc29639ab889"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:54 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:54 2012 -0700"
      },
      "message": "cgroup: build list of all cgroups under a given cgroupfs_root\n\nBuild a list of all cgroups anchored at cgroupfs_root-\u003eallcg_list and\ngoing through cgroup-\u003eallcg_node.  The list is protected by\ncgroup_mutex and will be used to improve cgroup file handling.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\n"
    }
  ],
  "next": "ff4c8d503e2583b485da46d0ec3dcc29639ab889"
}
