)]}'
{
  "commit": "cdd140bdd6c7bc6395f08877a73c39941501af93",
  "tree": "48664b2790fb2b5152bd67bf70fb3405e1ef6e8b",
  "parents": [
    "e1eb1ebcca871673c76caf63335c4237680040f1"
  ],
  "author": {
    "name": "Oleg Nesterov",
    "email": "oleg@redhat.com",
    "time": "Wed Jun 17 16:27:43 2009 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Thu Jun 18 13:03:53 2009 -0700"
  },
  "message": "kthreads: simplify the startup synchronization\n\nWe use two completions two create the kernel thread, this is a bit ugly.\nkthread() wakes up create_kthread() via -\u003estarted, then create_kthread()\nwakes up the caller kthread_create() via -\u003edone.  But kthread() does not\nneed to wait for kthread(), it can just return.  Instead kthread() itself\ncan wake up the caller of kthread_create().\n\nKill kthread_create_info-\u003estarted, -\u003edone is enough.  This improves the\nscalability a bit and sijmplifies the code.\n\nThe only problem if kernel_thread() fails, in that case create_kthread()\nmust do complete(\u0026create-\u003edone).\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Vitaliy Gusev \u003cvgusev@openvz.org\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7fa441333529588586cd5a538e7b1fbdd118fbfd",
      "old_mode": 33188,
      "old_path": "kernel/kthread.c",
      "new_id": "bc5d1f0b25a461f8551a2ca7e82d7d6a61feb16b",
      "new_mode": 33188,
      "new_path": "kernel/kthread.c"
    }
  ]
}
