)]}'
{
  "commit": "98efe8af1c9ffac47e842b7a75ded903e2f028da",
  "tree": "9305e6e6013f166bb305a612b24121efd5769617",
  "parents": [
    "5d829300bee000980a09ac2ccb761cb25867b67c"
  ],
  "author": {
    "name": "Brian Foster",
    "email": "bfoster@redhat.com",
    "time": "Thu Nov 10 08:23:22 2016 +1100"
  },
  "committer": {
    "name": "Dave Chinner",
    "email": "david@fromorbit.com",
    "time": "Thu Nov 10 08:23:22 2016 +1100"
  },
  "message": "xfs: fix unbalanced inode reclaim flush locking\n\nFilesystem shutdown testing on an older distro kernel has uncovered an\nimbalanced locking pattern for the inode flush lock in\nxfs_reclaim_inode(). Specifically, there is a double unlock sequence\nbetween the call to xfs_iflush_abort() and xfs_reclaim_inode() at the\n\"reclaim:\" label.\n\nThis actually does not cause obvious problems on current kernels due to\nthe current flush lock implementation. Older kernels use a counting\nbased flush lock mechanism, however, which effectively breaks the lock\nindefinitely when an already unlocked flush lock is repeatedly unlocked.\nThough this only currently occurs on filesystem shutdown, it has\nreproduced the effect of elevating an fs shutdown to a system-wide crash\nor hang.\n\nAs it turns out, the flush lock is not actually required for the reclaim\nlogic in xfs_reclaim_inode() because by that time we have already cycled\nthe flush lock once while holding ILOCK_EXCL. Therefore, remove the\nadditional flush lock/unlock cycle around the \u0027reclaim:\u0027 label and\nupdate branches into this label to release the flush lock where\nappropriate. Add an assert to xfs_ifunlock() to help prevent future\noccurences of the same problem.\n\nReported-by: Zorro Lang \u003czlang@redhat.com\u003e\nSigned-off-by: Brian Foster \u003cbfoster@redhat.com\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\n\n\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "1b4861f5d3d8ed524b5bd7ef601e2c3777b26684",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_icache.c",
      "new_id": "9c3e5c6ddf20d1bf53b9c8bfd7cb028b62265547",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_icache.c"
    },
    {
      "type": "modify",
      "old_id": "f14c1de2549db758f4bed9641fbfa99769570c71",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_inode.h",
      "new_id": "71e8a81c91a371d659dbad0b57099916ad0b2168",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_inode.h"
    }
  ]
}
