)]}'
{
  "commit": "6ca497a83e592d64e050c4d04b6dedb8c915f39a",
  "tree": "0b9cd611d6d907881841eca73d12a7f3b85f1716",
  "parents": [
    "9405dccfd3201d2b76e120949bec81ba8cfbd2d0"
  ],
  "author": {
    "name": "wengang wang",
    "email": "wen.gang.wang@oracle.com",
    "time": "Fri Mar 06 21:29:10 2009 +0800"
  },
  "committer": {
    "name": "Mark Fasheh",
    "email": "mfasheh@suse.com",
    "time": "Fri Apr 03 11:39:25 2009 -0700"
  },
  "message": "ocfs2: fix rare stale inode errors when exporting via nfs\n\nFor nfs exporting, ocfs2_get_dentry() returns the dentry for fh.\nocfs2_get_dentry() may read from disk when the inode is not in memory,\nwithout any cross cluster lock. this leads to the file system loading a\nstale inode.\n\nThis patch fixes above problem.\n\nSolution is that in case of inode is not in memory, we get the cluster\nlock(PR) of alloc inode where the inode in question is allocated from (this\ncauses node on which deletion is done sync the alloc inode) before reading\nout the inode itsself. then we check the bitmap in the group (the inode in\nquestion allcated from) to see if the bit is clear. if it\u0027s clear then it\u0027s\nstale. if the bit is set, we then check generation as the existing code\ndoes.\n\nWe have to read out the inode in question from disk first to know its alloc\nslot and allot bit. And if its not stale we read it out using ocfs2_iget().\nThe second read should then be from cache.\n\nAnd also we have to add a per superblock nfs_sync_lock to cover the lock for\nalloc inode and that for inode in question. this is because ocfs2_get_dentry()\nand ocfs2_delete_inode() lock on them in reverse order. nfs_sync_lock is locked\nin EX mode in ocfs2_get_dentry() and in PR mode in ocfs2_delete_inode(). so\nthat mutliple ocfs2_delete_inode() can run concurrently in normal case.\n\n[mfasheh@suse.com: build warning fixes and comment cleanups]\nSigned-off-by: Wengang Wang \u003cwen.gang.wang@oracle.com\u003e\nAcked-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7219a86d34ccc3102b360e10c298ed50fda903a7",
      "old_mode": 33188,
      "old_path": "fs/ocfs2/dlmglue.c",
      "new_id": "e15fc7d50827019fe974b9bb61b8f5dd7312665a",
      "new_mode": 33188,
      "new_path": "fs/ocfs2/dlmglue.c"
    },
    {
      "type": "modify",
      "old_id": "3f8d9986b8e0e82d9f8b938ef9d648669b14fff0",
      "old_mode": 33188,
      "old_path": "fs/ocfs2/dlmglue.h",
      "new_id": "e1fd5721cd7f15da6e844579e1964d691af597fe",
      "new_mode": 33188,
      "new_path": "fs/ocfs2/dlmglue.h"
    },
    {
      "type": "modify",
      "old_id": "2f27b332d8b316949b131eb8172c1e1bdf4d1362",
      "old_mode": 33188,
      "old_path": "fs/ocfs2/export.c",
      "new_id": "de3da8eb558ced894690263794c4c1f28652f351",
      "new_mode": 33188,
      "new_path": "fs/ocfs2/export.c"
    },
    {
      "type": "modify",
      "old_id": "4a88bce35079c72165ebfa015bd948a3f2207a2a",
      "old_mode": 33188,
      "old_path": "fs/ocfs2/inode.c",
      "new_id": "10e1fa87396aedf9ea0a1cfbd501c25361a872e7",
      "new_mode": 33188,
      "new_path": "fs/ocfs2/inode.c"
    },
    {
      "type": "modify",
      "old_id": "e1978acbf65e8c9832aa0eab6af09656f5ead0db",
      "old_mode": 33188,
      "old_path": "fs/ocfs2/inode.h",
      "new_id": "ea71525aad41fdc4070cd52890d6385359dec7f5",
      "new_mode": 33188,
      "new_path": "fs/ocfs2/inode.h"
    },
    {
      "type": "modify",
      "old_id": "b65d19c9756d74c8ea32db9b05e31a9b7538af6c",
      "old_mode": 33188,
      "old_path": "fs/ocfs2/ocfs2.h",
      "new_id": "558bd2709e01d0ca17054ccee93ac90f4cb83f7d",
      "new_mode": 33188,
      "new_path": "fs/ocfs2/ocfs2.h"
    },
    {
      "type": "modify",
      "old_id": "eb6f50c9cecae194cab61bb88ee5a185a90a1e93",
      "old_mode": 33188,
      "old_path": "fs/ocfs2/ocfs2_lockid.h",
      "new_id": "a53ce87481bf20b1c724d2c699fab3c52674b991",
      "new_mode": 33188,
      "new_path": "fs/ocfs2/ocfs2_lockid.h"
    },
    {
      "type": "modify",
      "old_id": "4c1399cc03f38fad9bba7f2cd29bc2a84764f6a8",
      "old_mode": 33188,
      "old_path": "fs/ocfs2/suballoc.c",
      "new_id": "b4ca5911caafc3824f6cc8c1a61e69f5a316c4eb",
      "new_mode": 33188,
      "new_path": "fs/ocfs2/suballoc.c"
    },
    {
      "type": "modify",
      "old_id": "ea85a4c8b4b113517e99b3e485b103805bfb2532",
      "old_mode": 33188,
      "old_path": "fs/ocfs2/suballoc.h",
      "new_id": "8c9a78a43164c1f900e4961d64a3dd68de174372",
      "new_mode": 33188,
      "new_path": "fs/ocfs2/suballoc.h"
    }
  ]
}
