)]}'
{
  "commit": "05eeae208d08a05a6980cf2ff61f02843c0955fd",
  "tree": "be6c6c4e16cfac07edf437a1f74ef027ada8ccc7",
  "parents": [
    "c1f5a1944657ba6abe375e3bb2a3238a46849f70"
  ],
  "author": {
    "name": "Andrew Morton",
    "email": "akpm@osdl.org",
    "time": "Sat Mar 25 03:07:48 2006 -0800"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@g5.osdl.org",
    "time": "Sat Mar 25 08:22:57 2006 -0800"
  },
  "message": "[PATCH] find_task_by_pid() needs tasklist_lock\n\nA couple of places are forgetting to take it.\n\nThe kswapd case is probably unimportant.  keventd_create_kthread() was racy.\n\nThe whole thing is a bit flakey: you start a kernel thread, get its pid from\nkernel_thread() then look up its task_struct.\n\na) It assumes that pid recycling takes a \"long\" time.\n\nb) We get a task_struct but no reference was taken on it.  The owner of the\n   kswapd and kthread task_struct*\u0027s must assume that the new thread won\u0027t\n   exit unexpectedly.  Because if it does, they\u0027re left holding dead memory\n   and any attempt to control or stop that task will crash.\n\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6a5373868a985ea98707d4aefed624f011d6c65f",
      "old_mode": 33188,
      "old_path": "kernel/kthread.c",
      "new_id": "c5f3c6613b6d77dd21d6a0bfcedfbe44d624f802",
      "new_mode": 33188,
      "new_path": "kernel/kthread.c"
    },
    {
      "type": "modify",
      "old_id": "fd572bbdc9f5a67064b0c37e8790671657721875",
      "old_mode": 33188,
      "old_path": "mm/vmscan.c",
      "new_id": "78865c849f8fe712296fc18d2d7894d550f1fc85",
      "new_mode": 33188,
      "new_path": "mm/vmscan.c"
    }
  ]
}
