)]}'
{
  "commit": "a9dce2a3b4f0686dd66cb44d4826a59508bce969",
  "tree": "3a5ed54316884a86102e99a4442a13d2f0c81d57",
  "parents": [
    "ab4bd22d3cce6977dc039664cc2d052e3147d662"
  ],
  "author": {
    "name": "Tejun Heo",
    "email": "tj@kernel.org",
    "time": "Thu Jun 09 20:43:54 2011 +0200"
  },
  "committer": {
    "name": "Jens Axboe",
    "email": "jaxboe@fusionio.com",
    "time": "Thu Jun 09 20:43:54 2011 +0200"
  },
  "message": "block: don\u0027t use non-syncing event blocking in disk_check_events()\n\nThis patch is part of fix for triggering of WARN_ON_ONCE() in\ndisk_clear_events() reported in bug#34662.\n\n  https://bugzilla.kernel.org/show_bug.cgi?id\u003d34662\n\ndisk_clear_events() blocks events, schedules and flushes the event\nwork.  It expects the work to have started execution on schedule and\nfinished on return from flush.  WARN_ON_ONCE() triggers if the event\nwork hasn\u0027t executed as expected.  This problem happens because\n__disk_block_events() fails to guarantee that the event work item is\nnot in flight on return from the function in race-free manner.  The\nproblem is two-fold and this patch addresses one of them.\n\nWhen __disk_block_events() is called with @sync \u003d\u003d %false, it bumps\nevent block count, calls cancel_delayed_work() and return.  This makes\nit impossible to guarantee that event polling is not in flight on\nreturn from syncing __disk_block_events() - if the first blocker was\nnon-syncing, polling could still be in progress and later syncing ones\nwould assume that the first blocker already canceled it.\n\nMaking __disk_block_events() cancel_sync regardless of block count\nisn\u0027t feasible either as it may race with forced event checking in\ndisk_clear_events().\n\nAs disk_check_events() is the only user of non-syncing\n__disk_block_events(), updating it to directly cancel and schedule\nevent work is the easiest way to solve the issue.\n\nNote that there\u0027s another bug in __disk_block_events() and this patch\ndoesn\u0027t fix the issue completely.  Later patch will fix the other bug.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nTested-by: Sitsofe Wheeler \u003csitsofe@yahoo.com\u003e\nReported-by: Sitsofe Wheeler \u003csitsofe@yahoo.com\u003e\nReported-by: Borislav Petkov \u003cbp@alien8.de\u003e\nReported-by: Meelis Roos \u003cmroos@linux.ee\u003e\nReported-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "95822ae25cfe3213863d4a1e4d8718eea290afe8",
      "old_mode": 33188,
      "old_path": "block/genhd.c",
      "new_id": "3f0933077642ef05ac76c611a721a04a57445ef8",
      "new_mode": 33188,
      "new_path": "block/genhd.c"
    }
  ]
}
