)]}'
{
  "commit": "e73f8959af0439d114847eab5a8a5ce48f1217c4",
  "tree": "47f056093590a5e5552e3a75f163e1f798063bda",
  "parents": [
    "62366c88b29c5a32e1531142092f98eaf49b1103"
  ],
  "author": {
    "name": "Oleg Nesterov",
    "email": "oleg@redhat.com",
    "time": "Fri May 11 10:59:07 2012 +1000"
  },
  "committer": {
    "name": "Al Viro",
    "email": "viro@zeniv.linux.org.uk",
    "time": "Wed May 23 22:09:21 2012 -0400"
  },
  "message": "task_work_add: generic process-context callbacks\n\nProvide a simple mechanism that allows running code in the (nonatomic)\ncontext of the arbitrary task.\n\nThe caller does task_work_add(task, task_work) and this task executes\ntask_work-\u003efunc() either from do_notify_resume() or from do_exit().  The\ncallback can rely on PF_EXITING to detect the latter case.\n\n\"struct task_work\" can be embedded in another struct, still it has \"void\n*data\" to handle the most common/simple case.\n\nThis allows us to kill the -\u003ereplacement_session_keyring hack, and\npotentially this can have more users.\n\nPerformance-wise, this adds 2 \"unlikely(!hlist_empty())\" checks into\ntracehook_notify_resume() and do_exit().  But at the same time we can\nremove the \"replacement_session_keyring !\u003d NULL\" checks from\narch/*/signal.c and exit_creds().\n\nNote: task_work_add/task_work_run abuses -\u003epi_lock.  This is only because\nthis lock is already used by lookup_pi_state() to synchronize with\ndo_exit() setting PF_EXITING.  Fortunately the scope of this lock in\ntask_work.c is really tiny, and the code is unlikely anyway.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: David Howells \u003cdhowells@redhat.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Richard Kuo \u003crkuo@codeaurora.org\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Alexander Gordeev \u003cagordeev@redhat.com\u003e\nCc: Chris Zankel \u003cchris@zankel.net\u003e\nCc: David Smith \u003cdsmith@redhat.com\u003e\nCc: \"Frank Ch. Eigler\" \u003cfche@redhat.com\u003e\nCc: Geert Uytterhoeven \u003cgeert@linux-m68k.org\u003e\nCc: Larry Woodman \u003clwoodman@redhat.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5ea8baea938743777ec69efcce61b357e904ba36",
      "old_mode": 33188,
      "old_path": "include/linux/sched.h",
      "new_id": "7930131abc1ad53a8c3a2ebfb24bec2cbe662d48",
      "new_mode": 33188,
      "new_path": "include/linux/sched.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "294d5d5e90b1fe410da2330f0bd0dfce132a021d",
      "new_mode": 33188,
      "new_path": "include/linux/task_work.h"
    },
    {
      "type": "modify",
      "old_id": "b9ca903bb553ff22a0d3502820c4a4776e3b3342",
      "old_mode": 33188,
      "old_path": "include/linux/tracehook.h",
      "new_id": "b2dd0917ca0d6d9a1ecaed8a78324f5ddbaaa32a",
      "new_mode": 33188,
      "new_path": "include/linux/tracehook.h"
    },
    {
      "type": "modify",
      "old_id": "6c07f30fa9b7e678e23b2038474a5b508b7fa661",
      "old_mode": 33188,
      "old_path": "kernel/Makefile",
      "new_id": "bf1034008acae4a7a8881366c34ca652bb571186",
      "new_mode": 33188,
      "new_path": "kernel/Makefile"
    },
    {
      "type": "modify",
      "old_id": "910a0716e17ab4124ddd07f22d502e19ed9f30de",
      "old_mode": 33188,
      "old_path": "kernel/exit.c",
      "new_id": "3d93325e0b1af77ebb2d3fa48a4eff2f24a622fc",
      "new_mode": 33188,
      "new_path": "kernel/exit.c"
    },
    {
      "type": "modify",
      "old_id": "05c813dc9ecc50efbf9012e765dfc64b8ddf9b6b",
      "old_mode": 33188,
      "old_path": "kernel/fork.c",
      "new_id": "a46db217a589add818e4b136fbffe80ca8841b13",
      "new_mode": 33188,
      "new_path": "kernel/fork.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "82d1c794066d450d6c08c6de4452a9cbd344ef63",
      "new_mode": 33188,
      "new_path": "kernel/task_work.c"
    }
  ]
}
