)]}'
{
  "commit": "2e91fa7f6d451e3ea9fec999065d2fd199691f9d",
  "tree": "9869ef4bca569d824ba3266e5b2373302356bea3",
  "parents": [
    "f0d9a5f175753a371bc7fdff0d584a8d9cd72bb0"
  ],
  "author": {
    "name": "Tejun Heo",
    "email": "tj@kernel.org",
    "time": "Thu Oct 15 16:41:53 2015 -0400"
  },
  "committer": {
    "name": "Tejun Heo",
    "email": "tj@kernel.org",
    "time": "Thu Oct 15 16:41:53 2015 -0400"
  },
  "message": "cgroup: keep zombies associated with their original cgroups\n\ncgroup_exit() is called when a task exits and disassociates the\nexiting task from its cgroups and half-attach it to the root cgroup.\nThis is unnecessary and undesirable.\n\nNo controller actually needs an exiting task to be disassociated with\nnon-root cgroups.  Both cpu and perf_event controllers update the\nassociation to the root cgroup from their exit callbacks just to keep\nconsistent with the cgroup core behavior.\n\nAlso, this disassociation makes it difficult to track resources held\nby zombies or determine where the zombies came from.  Currently, pids\ncontroller is completely broken as it uncharges on exit and zombies\nalways escape the resource restriction.  With cgroup association being\nreset on exit, fixing it is pretty painful.\n\nThere\u0027s no reason to reset cgroup membership on exit.  The zombie can\nbe removed from its css_set so that it doesn\u0027t show up on\n\"cgroup.procs\" and thus can\u0027t be migrated or interfere with cgroup\nremoval.  It can still pin and point to the css_set so that its cgroup\nmembership is maintained.  This patch makes cgroup core keep zombies\nassociated with their cgroups at the time of exit.\n\n* Previous patches decoupled populated_cnt tracking from css_set\n  lifetime, so a dying task can be simply unlinked from its css_set\n  while pinning and pointing to the css_set.  This keeps css_set\n  association from task side alive while hiding it from \"cgroup.procs\"\n  and populated_cnt tracking.  The css_set reference is dropped when\n  the task_struct is freed.\n\n* -\u003eexit() callback no longer needs the css arguments as the\n  associated css never changes once PF_EXITING is set.  Removed.\n\n* cpu and perf_events controllers no longer need -\u003eexit() callbacks.\n  There\u0027s no reason to explicitly switch away on exit.  The final\n  schedule out is enough.  The callbacks are removed.\n\n* On traditional hierarchies, nothing changes.  \"/proc/PID/cgroup\"\n  still reports \"/\" for all zombies.  On the default hierarchy,\n  \"/proc/PID/cgroup\" keeps reporting the cgroup that the task belonged\n  to at the time of exit.  If the cgroup gets removed before the task\n  is reaped, \" (deleted)\" is appended.\n\nv2: Build brekage due to missing dummy cgroup_free() when\n    !CONFIG_CGROUP fixed.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Arnaldo Carvalho de Melo \u003cacme@kernel.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "176b940f8327936c97efa50e96188b26d773041e",
      "old_mode": 33188,
      "old_path": "Documentation/cgroups/unified-hierarchy.txt",
      "new_id": "6932453d37a2ba0c0ed96c3848e996ecde56273c",
      "new_mode": 33188,
      "new_path": "Documentation/cgroups/unified-hierarchy.txt"
    },
    {
      "type": "modify",
      "old_id": "62413c3e2f4bc2abb1fd51e6a6d3571fac1d72fc",
      "old_mode": 33188,
      "old_path": "include/linux/cgroup-defs.h",
      "new_id": "6a1ab64ee5f91d53495739ecd0a4f9ec50b43565",
      "new_mode": 33188,
      "new_path": "include/linux/cgroup-defs.h"
    },
    {
      "type": "modify",
      "old_id": "46020735bcbb80ddd6797871b061f2981c73e56b",
      "old_mode": 33188,
      "old_path": "include/linux/cgroup.h",
      "new_id": "22e3754f89c511374af4ca8ac5a518786dcd6d88",
      "new_mode": 33188,
      "new_path": "include/linux/cgroup.h"
    },
    {
      "type": "modify",
      "old_id": "ba7b3284c2e4cb1b33fe5d891e8dbacb5b6bc1c4",
      "old_mode": 33188,
      "old_path": "kernel/cgroup.c",
      "new_id": "918658497625389c21691357c83ec284622e783d",
      "new_mode": 33188,
      "new_path": "kernel/cgroup.c"
    },
    {
      "type": "modify",
      "old_id": "806cd7693ac88b0307173ab7bdaf1a8bc44ab173",
      "old_mode": 33188,
      "old_path": "kernel/cgroup_pids.c",
      "new_id": "45f0856a61fe784d025a671d4f0b6705fa54c327",
      "new_mode": 33188,
      "new_path": "kernel/cgroup_pids.c"
    },
    {
      "type": "modify",
      "old_id": "f548f69c4299dd1ee44bfdc1f84d79d655d0d6d7",
      "old_mode": 33188,
      "old_path": "kernel/events/core.c",
      "new_id": "e9874949c78734d2c662845aedb69d79ccd5b839",
      "new_mode": 33188,
      "new_path": "kernel/events/core.c"
    },
    {
      "type": "modify",
      "old_id": "7d5f0f118a6348f81f08f10dd7dbb499f89dd243",
      "old_mode": 33188,
      "old_path": "kernel/fork.c",
      "new_id": "118743bb596498edb919f09b92cbca956f479595",
      "new_mode": 33188,
      "new_path": "kernel/fork.c"
    },
    {
      "type": "modify",
      "old_id": "3595403921bd5be10c3e5e591bf04916e654423d",
      "old_mode": 33188,
      "old_path": "kernel/sched/core.c",
      "new_id": "2cad9ba9103682a14fc596f8ee813b52a70b928c",
      "new_mode": 33188,
      "new_path": "kernel/sched/core.c"
    }
  ]
}
