)]}'
{
  "commit": "585e6d8856526a846b90b485abf37ec40e5da1cf",
  "tree": "8ecae5c3e10a1753fc178877ab11deadcf9625f3",
  "parents": [
    "dac61f521b1e4d2c6c48023f2f2743c6096b48ca"
  ],
  "author": {
    "name": "David Chinner",
    "email": "dgc@sgi.com",
    "time": "Sat Feb 10 18:32:29 2007 +1100"
  },
  "committer": {
    "name": "Tim Shimmin",
    "email": "tes@sgi.com",
    "time": "Sat Feb 10 18:32:29 2007 +1100"
  },
  "message": "[XFS] Fix a synchronous buftarg flush deadlock when freezing.\n\nAt the last stage of a freeze, we flush the buftarg synchronously over and\nover again until it succeeds twice without skipping any buffers.\n\nThe delwri list flush skips pinned buffers, but tries to flush all others.\nIt removes the buffers from the delwri list, then tries to lock them one\nat a time as it traverses the list to issue the I/O. It holds them locked\nuntil we issue all of the I/O and then unlocks them once we\u0027ve waited for\nit to complete.\n\nThe problem is that during a freeze, the filesystem may still be doing\nstuff - like flushing delalloc data buffers - in the background and hence\nwe can be trying to lock buffers that were on the delwri list at the same\ntime. Hence we can get ABBA deadlocks between threads doing allocation and\nthe buftarg flush (freeze) thread.\n\nFix it by skipping locked (and pinned) buffers as we traverse the delwri\nbuffer list.\n\nSGI-PV: 957195\nSGI-Modid: xfs-linux-melb:xfs-kern:27535a\n\nSigned-off-by: David Chinner \u003cdgc@sgi.com\u003e\nSigned-off-by: Tim Shimmin \u003ctes@sgi.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "4fb01ffdfd1a06163263186b967a2e04f7f90743",
      "old_mode": 33188,
      "old_path": "fs/xfs/linux-2.6/xfs_buf.c",
      "new_id": "946b00bf38414491d01930e433fc09b7c2b0dd99",
      "new_mode": 33188,
      "new_path": "fs/xfs/linux-2.6/xfs_buf.c"
    }
  ]
}
