)]}'
{
  "commit": "55e3e1f419f0c387a2b971cc181b8dea1b099d1d",
  "tree": "79470f040f2886669d9fb0ecce2882e875fb976f",
  "parents": [
    "31eafff4382b0f20edce1afea8e2d288c6c7187c"
  ],
  "author": {
    "name": "Tejun Heo",
    "email": "tj@kernel.org",
    "time": "Tue Dec 18 10:35:02 2012 -0800"
  },
  "committer": {
    "name": "Greg Kroah-Hartman",
    "email": "gregkh@linuxfoundation.org",
    "time": "Thu Aug 29 09:50:12 2013 -0700"
  },
  "message": "workqueue: consider work function when searching for busy work items\n\ncommit a2c1c57be8d9fd5b716113c8991d3d702eeacf77 upstream.\n\nTo avoid executing the same work item concurrenlty, workqueue hashes\ncurrently busy workers according to their current work items and looks\nup the the table when it wants to execute a new work item.  If there\nalready is a worker which is executing the new work item, the new item\nis queued to the found worker so that it gets executed only after the\ncurrent execution finishes.\n\nUnfortunately, a work item may be freed while being executed and thus\nrecycled for different purposes.  If it gets recycled for a different\nwork item and queued while the previous execution is still in\nprogress, workqueue may make the new work item wait for the old one\nalthough the two aren\u0027t really related in any way.\n\nIn extreme cases, this false dependency may lead to deadlock although\nit\u0027s extremely unlikely given that there aren\u0027t too many self-freeing\nwork item users and they usually don\u0027t wait for other work items.\n\nTo alleviate the problem, record the current work function in each\nbusy worker and match it together with the work item address in\nfind_worker_executing_work().  While this isn\u0027t complete, it ensures\nthat unrelated work items don\u0027t interact with each other and in the\nvery unlikely case where a twisted wq user triggers it, it\u0027s always\nonto itself making the culprit easy to spot.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Andrey Isakov \u003candy51@gmx.ru\u003e\nBugzilla: https://bugzilla.kernel.org/show_bug.cgi?id\u003d51701\n[lizf: Backported to 3.4:\n - Adjust context\n - Incorporate earlier logging cleanup in process_one_work() from\n   044c782ce3a9 (\u0027workqueue: fix checkpatch issues\u0027)]\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9a0b579c40cfe8cc73f3f19ce4eaa2e52ec8cadd",
      "old_mode": 33188,
      "old_path": "kernel/workqueue.c",
      "new_id": "575d092fa746ef04ab7d4107abd336c2441a3947",
      "new_mode": 33188,
      "new_path": "kernel/workqueue.c"
    }
  ]
}
