)]}'
{
  "commit": "7afd88d9166a752b52517648bcbe923e05d393fc",
  "tree": "2fb945189e3cb1be7ad007088f8ec86e9f67ece6",
  "parents": [
    "60b779cfc1fa52034a996ee12a23b62d32e86000"
  ],
  "author": {
    "name": "Steven Whitehouse",
    "email": "swhiteho@redhat.com",
    "time": "Fri Feb 22 16:07:18 2008 +0000"
  },
  "committer": {
    "name": "Steven Whitehouse",
    "email": "swhiteho@redhat.com",
    "time": "Mon Mar 31 10:41:12 2008 +0100"
  },
  "message": "[GFS2] Fix a page lock / glock deadlock\n\nWe\u0027ve previously been using a \"try lock\" in readpage on the basis that\nit would prevent deadlocks due to the inverted lock ordering (our normal\nlock ordering is glock first and then page lock). Unfortunately tests\nhave shown that this isn\u0027t enough. If the glock has a demote request\nqueued such that run_queue() in the glock code tries to do a demote when\nits called under readpage then it will try and write out all the dirty\npages which requires locking them. This then deadlocks with the page\nlocked by readpage.\n\nThe solution is to always require two calls into readpage. The first\nunlocks the page, gets the glock and returns AOP_TRUNCATED_PAGE, the\nsecond does the actual readpage and unlocks the glock \u0026 page as\nrequired.\n\nSigned-off-by: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ace5770760ce26f2e637006e63c2ebb2a1179947",
      "old_mode": 33188,
      "old_path": "fs/gfs2/glock.h",
      "new_id": "cdad3e6f815026dfc55d542d1fc84c4b8f778984",
      "new_mode": 33188,
      "new_path": "fs/gfs2/glock.h"
    },
    {
      "type": "modify",
      "old_id": "5f50dd53bf6369b92b0c82f12230cfc5c829b9dc",
      "old_mode": 33188,
      "old_path": "fs/gfs2/inode.c",
      "new_id": "810ff023fb147bc4da497464aff09eb81e68717e",
      "new_mode": 33188,
      "new_path": "fs/gfs2/inode.c"
    },
    {
      "type": "modify",
      "old_id": "7523999afc53b4c1e7b2bf6fa4f398f57ed09b2d",
      "old_mode": 33188,
      "old_path": "fs/gfs2/ops_address.c",
      "new_id": "fbb4a6aa15833f4aa040bec75e0d67bd8d294697",
      "new_mode": 33188,
      "new_path": "fs/gfs2/ops_address.c"
    },
    {
      "type": "modify",
      "old_id": "793e334d098e19518957371c116f8d9c6f75178d",
      "old_mode": 33188,
      "old_path": "fs/gfs2/ops_dentry.c",
      "new_id": "4a5e676b44209babba9d3142046f23afedce78e1",
      "new_mode": 33188,
      "new_path": "fs/gfs2/ops_dentry.c"
    },
    {
      "type": "modify",
      "old_id": "301c945966785d2f44e0462b807a4463c3326b06",
      "old_mode": 33188,
      "old_path": "fs/gfs2/ops_inode.c",
      "new_id": "af7097a514c1066efcc3414bd64ef132b9dbe422",
      "new_mode": 33188,
      "new_path": "fs/gfs2/ops_inode.c"
    }
  ]
}
