)]}'
{
  "commit": "641c56fbfeae85d5ec87fee90a752f7b7224f236",
  "tree": "c626d0f48ef54031f3af502e75308c9087e4592f",
  "parents": [
    "0164af51cedf46e1d58fd53854373f544150c597"
  ],
  "author": {
    "name": "David Chinner",
    "email": "dgc@sgi.com",
    "time": "Mon Jun 18 16:50:17 2007 +1000"
  },
  "committer": {
    "name": "Tim Shimmin",
    "email": "tes@chook.melbourne.sgi.com",
    "time": "Sat Jul 14 15:33:38 2007 +1000"
  },
  "message": "[XFS] Prevent deadlock when flushing inodes on unmount\n\nWhen we are unmounting the filesystem, we flush all the inodes to disk.\nUnfortunately, if we have an inode cluster that has just been freed and\nmarked stale sitting in an incore log buffer (i.e. hasn\u0027t been flushed to\ndisk), it will be holding all the flush locks on the inodes in that\ncluster.\n\nxfs_iflush_all() which is called during unmount walks all the inodes\ntrying to reclaim them, and it doing so calls xfs_finish_reclaim() on each\ninode. If the inode is dirty, if grabs the flush lock and flushes it.\nUnfortunately, find dirty inodes that already have their flush lock held\nand so we sleep.\n\nAt this point in the unmount process, we are running single-threaded.\nThere is nothing more that can push on the log to force the transaction\nholding the inode flush locks to disk and hence we deadlock.\n\nThe fix is to issue a log force before flushing the inodes on unmount so\nthat all the flush locks will be released before we start flushing the\ninodes.\n\nSGI-PV: 964538\nSGI-Modid: xfs-linux-melb:xfs-kern:28862a\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": "f6fe47d8c4dc14afcc7417e47fa39cea4a138c74",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_mount.c",
      "new_id": "39cf6f3267c398e656c382626c12e4cb6f5e3521",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_mount.c"
    }
  ]
}
