)]}'
{
  "commit": "aea24a8bbc81c8b404e4e293fb37aefaf388d35d",
  "tree": "fc12abcaacf7c5af4c0557d68da3fad9e5879906",
  "parents": [
    "74779e22261172ea728b989310f6ecc991b57d62"
  ],
  "author": {
    "name": "Derek Basehore",
    "email": "dbasehore@chromium.org",
    "time": "Tue Dec 18 12:27:18 2012 -0800"
  },
  "committer": {
    "name": "Jens Axboe",
    "email": "axboe@kernel.dk",
    "time": "Wed Dec 19 20:36:05 2012 +0100"
  },
  "message": "block: remove deadlock in disk_clear_events\n\nIn disk_clear_events, do not put work on system_nrt_freezable_wq.\nInstead, put it on system_nrt_wq.\n\nThere is a race between probing a usb and suspending the device.  Since\nprobing a usb calls disk_clear_events, which puts work on a frozen\nworkqueue, probing cannot finish after the workqueue is frozen.  However,\nsuspending cannot finish until the usb probe is finished, so we get a\ndeadlock, causing the system to reboot.\n\nThe way to reproduce this bug is to wake up from suspend with a usb\nstorage device plugged in, or plugging in a usb storage device right\nbefore suspend.  The window of time is on the order of time it takes to\nprobe the usb device.  As long as the workqueues are frozen before the\ncall to add_disk within sd_probe_async finishes, there will be a deadlock\n(which calls blkdev_get, sd_open, check_disk_change, then\ndisk_clear_events).  This is not difficult to reproduce after figuring out\nthe timings.\n\n[akpm@linux-foundation.org: fix up comment]\nSigned-off-by: Derek Basehore \u003cdbasehore@chromium.org\u003e\nReviewed-by: Mandeep Singh Baines \u003cmsb@chromium.org\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9a289d7c84bbedc6ca2e17cf74c201acc43fe7cd",
      "old_mode": 33188,
      "old_path": "block/genhd.c",
      "new_id": "33a3b38aa4b23b15e13fe4afcd3869e4ce8a07be",
      "new_mode": 33188,
      "new_path": "block/genhd.c"
    }
  ]
}
