)]}'
{
  "log": [
    {
      "commit": "f8206b925fb0eba3a11839419be118b09105d7b1",
      "tree": "5d41b356a043da09c816ed80bd79d1ea8b2b47e5",
      "parents": [
        "1b59be2a6cdcb5a12e18d8315c07c94a624de48f",
        "f03c65993b98eeb909a4012ce7833c5857d74755"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 16 11:31:50 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 16 11:31:50 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (23 commits)\n  sanitize vfsmount refcounting changes\n  fix old umount_tree() breakage\n  autofs4: Merge the remaining dentry ops tables\n  Unexport do_add_mount() and add in follow_automount(), not -\u003ed_automount()\n  Allow d_manage() to be used in RCU-walk mode\n  Remove a further kludge from __do_follow_link()\n  autofs4: Bump version\n  autofs4: Add v4 pseudo direct mount support\n  autofs4: Fix wait validation\n  autofs4: Clean up autofs4_free_ino()\n  autofs4: Clean up dentry operations\n  autofs4: Clean up inode operations\n  autofs4: Remove unused code\n  autofs4: Add d_manage() dentry operation\n  autofs4: Add d_automount() dentry operation\n  Remove the automount through follow_link() kludge code from pathwalk\n  CIFS: Use d_automount() rather than abusing follow_link()\n  NFS: Use d_automount() rather than abusing follow_link()\n  AFS: Use d_automount() rather than abusing follow_link()\n  Add an AT_NO_AUTOMOUNT flag to suppress terminal automount\n  ...\n"
    },
    {
      "commit": "9875cf806403fae66b2410a3c2cc820d97731e04",
      "tree": "6f9546b400716766af95e0f78e3d600e765b2b51",
      "parents": [
        "1a8edf40e7c3eee955e0dd0316a7c9d85e36f597"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Jan 14 18:45:21 2011 +0000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jan 15 20:05:03 2011 -0500"
      },
      "message": "Add a dentry op to handle automounting rather than abusing follow_link()\n\nAdd a dentry op (d_automount) to handle automounting directories rather than\nabusing the follow_link() inode operation.  The operation is keyed off a new\ndentry flag (DCACHE_NEED_AUTOMOUNT).\n\nThis also makes it easier to add an AT_ flag to suppress terminal segment\nautomount during pathwalk and removes the need for the kludge code in the\npathwalk algorithm to handle directories with follow_link() semantics.\n\nThe -\u003ed_automount() dentry operation:\n\n\tstruct vfsmount *(*d_automount)(struct path *mountpoint);\n\ntakes a pointer to the directory to be mounted upon, which is expected to\nprovide sufficient data to determine what should be mounted.  If successful, it\nshould return the vfsmount struct it creates (which it should also have added\nto the namespace using do_add_mount() or similar).  If there\u0027s a collision with\nanother automount attempt, NULL should be returned.  If the directory specified\nby the parameter should be used directly rather than being mounted upon,\n-EISDIR should be returned.  In any other case, an error code should be\nreturned.\n\nThe -\u003ed_automount() operation is called with no locks held and may sleep.  At\nthis point the pathwalk algorithm will be in ref-walk mode.\n\nWithin fs/namei.c itself, a new pathwalk subroutine (follow_automount()) is\nadded to handle mountpoints.  It will return -EREMOTE if the automount flag was\nset, but no d_automount() op was supplied, -ELOOP if we\u0027ve encountered too many\nsymlinks or mountpoints, -EISDIR if the walk point should be used without\nmounting and 0 if successful.  The path will be updated to point to the mounted\nfilesystem if a successful automount took place.\n\n__follow_mount() is replaced by follow_managed() which is more generic\n(especially with the patch that adds -\u003ed_manage()).  This handles transits from\ndirectories during pathwalk, including automounting and skipping over\nmountpoints (and holding processes with the next patch).\n\n__follow_mount_rcu() will jump out of RCU-walk mode if it encounters an\nautomount point with nothing mounted on it.\n\nfollow_dotdot*() does not handle automounts as you don\u0027t want to trigger them\nwhilst following \"..\".\n\nI\u0027ve also extracted the mount/don\u0027t-mount logic from autofs4 and included it\nhere.  It makes the mount go ahead anyway if someone calls open() or creat(),\ntries to traverse the directory, tries to chdir/chroot/etc. into the directory,\nor sticks a \u0027/\u0027 on the end of the pathname.  If they do a stat(), however,\nthey\u0027ll only trigger the automount if they didn\u0027t also say O_NOFOLLOW.\n\nI\u0027ve also added an inode flag (S_AUTOMOUNT) so that filesystems can mark their\ninodes as automount points.  This flag is automatically propagated to the\ndentry as DCACHE_NEED_AUTOMOUNT by __d_instantiate().  This saves NFS and could\nsave AFS a private flag bit apiece, but is not strictly necessary.  It would be\npreferable to do the propagation in d_set_d_op(), but that doesn\u0027t normally\nhave access to the inode.\n\n[AV: fixed breakage in case if __follow_mount_rcu() fails and nameidata_drop_rcu()\nsucceeds in RCU case of do_lookup(); we need to fall through to non-RCU case after\nthat, rather than just returning with ungrabbed *path]\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nWas-Acked-by: Ian Kent \u003craven@themaw.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6f7f7caab259026234277b659485d22c1dcb1ab4",
      "tree": "db5515958f3cc27462b3c8324b1fb05677193d52",
      "parents": [
        "d018b6f4f1539f3679fbdc2d02d58d09e76be84a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 13:26:18 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 13:26:18 2011 -0800"
      },
      "message": "Turn d_set_d_op() BUG_ON() into WARN_ON_ONCE()\n\nIt\u0027s indicative of a real problem, and it actually triggers with\nautofs4, but the BUG_ON() is excessive.  The autofs4 case is being fixed\n(to only set d_op in the -\u003elookup method) but not merged yet.  In the\nmeantime this gets the code limping along.\n\nReported-by: Alex Elder \u003caelder@sgi.com\u003e\nCc: Ian Kent \u003craven@themaw.net\u003e\nCc: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "208898c17a97610ce1c01b1cc58e51802a1d52c3",
      "tree": "5f89b34b38d8911c197a00003ee5c5a6a19f18cc",
      "parents": [
        "1c977540fda4bf65ab467d110f5d840fc27e7608"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Thu Nov 18 15:02:49 2010 -0800"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jan 12 20:06:57 2011 -0500"
      },
      "message": "fs: fix kernel-doc for dcache::prepend_path\n\nFix function kernel-doc warning for prepend_path():\n\nWarning(fs/dcache.c:1924): missing initial short description on line:\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Alexander Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1c977540fda4bf65ab467d110f5d840fc27e7608",
      "tree": "25e4ebf271915709f12ff8274c57f3d2a561b08d",
      "parents": [
        "66cb76666d69502fe982990b2cff5b6d607fd3b1"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Thu Nov 18 15:02:45 2010 -0800"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jan 12 20:06:55 2011 -0500"
      },
      "message": "fs: fix kernel-doc for dcache::d_validate\n\nFix function parameter kernel-doc for d_validate():\n\nWarning(fs/dcache.c:1495): No description found for parameter \u0027parent\u0027\nWarning(fs/dcache.c:1495): Excess function parameter \u0027dparent\u0027 description in \u0027d_validate\u0027\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Alexander Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c8aebb0c9f8c7471643d5f8ba68328de8013005f",
      "tree": "fae492892b9eecaf9c42632dd1203102cc69365a",
      "parents": [
        "4162cf64973df51fc885825bc9ca4d055891c49f"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Dec 18 10:22:30 2010 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jan 12 20:02:34 2011 -0500"
      },
      "message": "per-superblock default -\u003ed_op\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9d55c369bb5e695e629bc35cba2ef607755b3bee",
      "tree": "d97cd498a67f1f7987d4403ef90e399516a3b8c9",
      "parents": [
        "e1bb57826381199cc79fbf44e9dfeee58fc7b339"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:09 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:32 2011 +1100"
      },
      "message": "fs: implement faster dentry memcmp\n\nThe standard memcmp function on a Westmere system shows up hot in\nprofiles in the `git diff` workload (both parallel and single threaded),\nand it is likely due to the costs associated with trapping into\nmicrocode, and little opportunity to improve memory access (dentry\nname is not likely to take up more than a cacheline).\n\nSo replace it with an open-coded byte comparison. This increases code\nsize by 8 bytes in the critical __d_lookup_rcu function, but the\nspeedup is huge, averaging 10 runs of each:\n\ngit diff st   user   sys   elapsed  CPU\nbefore        1.15   2.57  3.82      97.1\nafter         1.14   2.35  3.61      96.8\n\ngit diff mt   user   sys   elapsed  CPU\nbefore        1.27   3.85  1.46     349\nafter         1.26   3.54  1.43     333\n\nElapsed time for single threaded git diff at 95.0% confidence:\n        -0.21  +/- 0.01\n        -5.45% +/- 0.24%\n\nIt\u0027s -0.66% +/- 0.06% elapsed time on my Opteron, so rep cmp costs on the\nfam10h seem to be relatively smaller, but there is still a win.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "e1bb57826381199cc79fbf44e9dfeee58fc7b339",
      "tree": "b2f5edeebc568c3fff4afd799801e9e605b99efc",
      "parents": [
        "4b936885ab04dc6e0bb0ef35e0e23c1a7364d9e5"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:08 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:32 2011 +1100"
      },
      "message": "fs: prefetch inode data in dcache lookup\n\nThis makes single threaded git diff -1.25% +/- 0.05% elapsed time on my\n2s12c24t Westmere system, and -0.86% +/- 0.05% on my 2s8c Barcelona, by\nprefetching the important first cacheline of the inode in while we do the\nactual name compare and other operations on the dentry.\n\nThere was no measurable slowdown in the single file stat case, or the creat\ncase (where negative dentries would be common).\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "4b936885ab04dc6e0bb0ef35e0e23c1a7364d9e5",
      "tree": "a0173d27c1ce39f173be404d269c2f15144072ab",
      "parents": [
        "873feea09ebc980cbd3631b767356ce1eee65ec1"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:07 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:32 2011 +1100"
      },
      "message": "fs: improve scalability of pseudo filesystems\n\nRegardless of how much we possibly try to scale dcache, there is likely\nalways going to be some fundamental contention when adding or removing children\nunder the same parent. Pseudo filesystems do not seem need to have connected\ndentries because by definition they are disconnected.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "873feea09ebc980cbd3631b767356ce1eee65ec1",
      "tree": "59a8fce9b138086abee7cf845f62ff70a390cf81",
      "parents": [
        "ceb5bdc2d246f6d81cf61ed70f325308a11821d2"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:06 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:31 2011 +1100"
      },
      "message": "fs: dcache per-inode inode alias locking\n\ndcache_inode_lock can be replaced with per-inode locking. Use existing\ninode-\u003ei_lock for this. This is slightly non-trivial because we sometimes\nneed to find the inode from the dentry, which requires d_inode to be\nstabilised (either with refcount or d_lock).\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "ceb5bdc2d246f6d81cf61ed70f325308a11821d2",
      "tree": "65fc9e0227994d4ffc80530dd15bb5a9672a295e",
      "parents": [
        "626d607435617cc0f033522083e2bb195b81813c"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:05 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:31 2011 +1100"
      },
      "message": "fs: dcache per-bucket dcache hash locking\n\nWe can turn the dcache hash locking from a global dcache_hash_lock into\nper-bucket locking.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "44a7d7a878c9cbb74f236ea755b25b6b2e26a9a9",
      "tree": "d4630a38c0d683a7e1b8823d7971753719b8a54d",
      "parents": [
        "fb045adb99d9b7c562dc7fef834857f78249daa1"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:56 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:28 2011 +1100"
      },
      "message": "fs: cache optimise dentry and inode for rcu-walk\n\nPut dentry and inode fields into top of data structure.  This allows RCU path\ntraversal to perform an RCU dentry lookup in a path walk by touching only the\nfirst 56 bytes of the dentry.\n\nWe also fit in 8 bytes of inline name in the first 64 bytes, so for short\nnames, only 64 bytes needs to be touched to perform the lookup. We should\nget rid of the hash-\u003eprev pointer from the first 64 bytes, and fit 16 bytes\nof name in there, which will take care of 81% rather than 32% of the kernel\ntree.\n\ninode is also rearranged so that RCU lookup will only touch a single cacheline\nin the inode, plus one in the i_ops structure.\n\nThis is important for directory component lookups in RCU path walking. In the\nkernel source, directory names average is around 6 chars, so this works.\n\nWhen we reach the last element of the lookup, we need to lock it and take its\nrefcount which requires another cacheline access.\n\nAlign dentry and inode operations structs, so members will be at predictable\noffsets and we can group common operations into head of structure.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "fb045adb99d9b7c562dc7fef834857f78249daa1",
      "tree": "1fd6a4024fffeec568abe100d730589bfdb81c38",
      "parents": [
        "5f57cbcc02cf18f6b22ef4066bb10afeb8f930ff"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:55 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:28 2011 +1100"
      },
      "message": "fs: dcache reduce branches in lookup path\n\nReduce some branches and memory accesses in dcache lookup by adding dentry\nflags to indicate common d_ops are set, rather than having to check them.\nThis saves a pointer memory access (dentry-\u003ed_op) in common path lookup\nsituations, and saves another pointer load and branch in cases where we\nhave d_op but not the particular operation.\n\nPatched with:\n\ngit grep -E \u0027[.\u003e]([[:space:]])*d_op([[:space:]])*\u003d\u0027 | xargs sed -e \u0027s/\\([^\\t ]*\\)-\u003ed_op \u003d \\(.*\\);/d_set_d_op(\\1, \\2);/\u0027 -e \u0027s/\\([^\\t ]*\\)\\.d_op \u003d \\(.*\\);/d_set_d_op(\\\u0026\\1, \\2);/\u0027 -i\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "5f57cbcc02cf18f6b22ef4066bb10afeb8f930ff",
      "tree": "f02e7ee57e6060f0af1bcda281baf2972d2da72f",
      "parents": [
        "c28cc36469554dc55540f059fbdc7fa22a2c31fc"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:54 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:28 2011 +1100"
      },
      "message": "fs: dcache remove d_mounted\n\nRather than keep a d_mounted count in the dentry, set a dentry flag instead.\nThe flag can be cleared by checking the hash table to see if there are any\nmounts left, which is not time critical because it is performed at detach time.\n\nThe mounted state of a dentry is only used to speculatively take a look in the\nmount hash table if it is set -- before following the mount, vfsmount lock is\ntaken and mount re-checked without races.\n\nThis saves 4 bytes on 32-bit, nothing on 64-bit but it does provide a hole I\nmight use later (and some configs have larger than 32-bit spinlocks which might\nmake use of the hole).\n\nAutofs4 conversion and changelog by Ian Kent \u003craven@themaw.net\u003e:\nIn autofs4, when expring direct (or offset) mounts we need to ensure that we\nblock user path walks into the autofs mount, which is covered by another mount.\nTo do this we clear the mounted status so that follows stop before walking into\nthe mount and are essentially blocked until the expire is completed. The\nautomount daemon still finds the correct dentry for the umount due to the\nfollow mount logic in fs/autofs4/root.c:autofs4_follow_link(), which is set as\nan inode operation for direct and offset mounts only and is called following\nthe lookup that stopped at the covered mount.\n\nAt the end of the expire the covering mount probably has gone away so the\nmounted status need not be restored. But we need to check this and only restore\nthe mounted status if the expire failed.\n\nXXX: autofs may not work right if we have other mounts go over the top of it?\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "31e6b01f4183ff419a6d1f86177cbf4662347cec",
      "tree": "e215ec9af88352c55e024f784f3d9f8eb13fab85",
      "parents": [
        "3c22cd5709e8143444a6d08682a87f4c57902df3"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:52 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:27 2011 +1100"
      },
      "message": "fs: rcu-walk for path lookup\n\nPerform common cases of path lookups without any stores or locking in the\nancestor dentry elements. This is called rcu-walk, as opposed to the current\nalgorithm which is a refcount based walk, or ref-walk.\n\nThis results in far fewer atomic operations on every path element,\nsignificantly improving path lookup performance. It also avoids cacheline\nbouncing on common dentries, significantly improving scalability.\n\nThe overall design is like this:\n* LOOKUP_RCU is set in nd-\u003eflags, which distinguishes rcu-walk from ref-walk.\n* Take the RCU lock for the entire path walk, starting with the acquiring\n  of the starting path (eg. root/cwd/fd-path). So now dentry refcounts are\n  not required for dentry persistence.\n* synchronize_rcu is called when unregistering a filesystem, so we can\n  access d_ops and i_ops during rcu-walk.\n* Similarly take the vfsmount lock for the entire path walk. So now mnt\n  refcounts are not required for persistence. Also we are free to perform mount\n  lookups, and to assume dentry mount points and mount roots are stable up and\n  down the path.\n* Have a per-dentry seqlock to protect the dentry name, parent, and inode,\n  so we can load this tuple atomically, and also check whether any of its\n  members have changed.\n* Dentry lookups (based on parent, candidate string tuple) recheck the parent\n  sequence after the child is found in case anything changed in the parent\n  during the path walk.\n* inode is also RCU protected so we can load d_inode and use the inode for\n  limited things.\n* i_mode, i_uid, i_gid can be tested for exec permissions during path walk.\n* i_op can be loaded.\n\nWhen we reach the destination dentry, we lock it, recheck lookup sequence,\nand increment its refcount and mountpoint refcount. RCU and vfsmount locks\nare dropped. This is termed \"dropping rcu-walk\". If the dentry refcount does\nnot match, we can not drop rcu-walk gracefully at the current point in the\nlokup, so instead return -ECHILD (for want of a better errno). This signals the\npath walking code to re-do the entire lookup with a ref-walk.\n\nAside from the final dentry, there are other situations that may be encounted\nwhere we cannot continue rcu-walk. In that case, we drop rcu-walk (ie. take\na reference on the last good dentry) and continue with a ref-walk. Again, if\nwe can drop rcu-walk gracefully, we return -ECHILD and do the whole lookup\nusing ref-walk. But it is very important that we can continue with ref-walk\nfor most cases, particularly to avoid the overhead of double lookups, and to\ngain the scalability advantages on common path elements (like cwd and root).\n\nThe cases where rcu-walk cannot continue are:\n* NULL dentry (ie. any uncached path element)\n* parent with d_inode-\u003ei_op-\u003epermission or ACLs\n* dentries with d_revalidate\n* Following links\n\nIn future patches, permission checks and d_revalidate become rcu-walk aware. It\nmay be possible eventually to make following links rcu-walk aware.\n\nUncached path elements will always require dropping to ref-walk mode, at the\nvery least because i_mutex needs to be grabbed, and objects allocated.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "77812a1ef139d84270d27faacc0630c887411013",
      "tree": "a051134c0d1c74425a5f60adc0ca252c5db15b35",
      "parents": [
        "ec33679d78f9d653a44ddba10b5fb824c06330a1"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:48 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:25 2011 +1100"
      },
      "message": "fs: consolidate dentry kill sequence\n\nThe tricky locking for disposing of a dentry is duplicated 3 times in the\ndcache (dput, pruning a dentry from the LRU, and pruning its ancestors).\nConsolidate them all into a single function dentry_kill.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "ec33679d78f9d653a44ddba10b5fb824c06330a1",
      "tree": "5d1530286d1348064020c466427576294def7191",
      "parents": [
        "be182bff72fae6a3eb25624b39170c40b72f0909"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:47 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:25 2011 +1100"
      },
      "message": "fs: use RCU in shrink_dentry_list to reduce lock nesting\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "be182bff72fae6a3eb25624b39170c40b72f0909",
      "tree": "b77ee014d7850c6e57dae7231a38c0c26cd96b38",
      "parents": [
        "89e6054836a7b1e7500cd70a14b5579e752c9250"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:46 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:25 2011 +1100"
      },
      "message": "fs: reduce dcache_inode_lock width in lru scanning\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "89e6054836a7b1e7500cd70a14b5579e752c9250",
      "tree": "b74d2ecd1ac2a571d289e5525a0dc067ec1f35eb",
      "parents": [
        "a734eb458ab2bd11479a27dd54f48e1b26a55845"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:45 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:25 2011 +1100"
      },
      "message": "fs: dcache reduce prune_one_dentry locking\n\nprune_one_dentry can avoid quite a bit of locking in the common case where\nancestors have an elevated refcount. Alternatively, we could have gone the\nother way and made fewer trylocks in the case where d_count goes to zero, but\nis probably less common.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "a734eb458ab2bd11479a27dd54f48e1b26a55845",
      "tree": "425f6173d63a58ec719147764300bb324e1d53e3",
      "parents": [
        "dc0474be3e27463d4d4a2793f82366eed906f223"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:44 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:24 2011 +1100"
      },
      "message": "fs: dcache reduce d_parent locking\n\nUse RCU to simplify locking in dget_parent.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "dc0474be3e27463d4d4a2793f82366eed906f223",
      "tree": "41f75e638442cb343bacdcfbabb17ffc3bd5b4ce",
      "parents": [
        "357f8e658bba8a085c4a5d4331e30894be8096b8"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:43 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:24 2011 +1100"
      },
      "message": "fs: dcache rationalise dget variants\n\ndget_locked was a shortcut to avoid the lazy lru manipulation when we already\nheld dcache_lock (lru manipulation was relatively cheap at that point).\nHowever, how that the lru lock is an innermost one, we never hold it at any\ncaller, so the lock cost can now be avoided. We already have well working lazy\ndcache LRU, so it should be fine to defer LRU manipulations to scan time.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "357f8e658bba8a085c4a5d4331e30894be8096b8",
      "tree": "2182f5cd42a1c142bd2780bdaa7cc7953d9ec924",
      "parents": [
        "89ad485f01fd83c47f17a128db3bd7b89c0f244f"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:42 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:24 2011 +1100"
      },
      "message": "fs: dcache reduce dcache_inode_lock\n\ndcache_inode_lock can be avoided in d_delete() and d_materialise_unique()\nin cases where it is not required.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "89ad485f01fd83c47f17a128db3bd7b89c0f244f",
      "tree": "1f9772e3f0dc8ac9392341e677217caf2d9ba36c",
      "parents": [
        "61f3dee4af09528997a970280da240577bf60721"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:41 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:24 2011 +1100"
      },
      "message": "fs: dcache reduce locking in d_alloc\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "61f3dee4af09528997a970280da240577bf60721",
      "tree": "8c916d7c1965303a37f1051aa5d42d8e2b7b115a",
      "parents": [
        "58db63d086790eec2ed433f9d8c4962239809cf8"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:40 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:23 2011 +1100"
      },
      "message": "fs: dcache reduce dput locking\n\nIt is possible to run dput without taking data structure locks up-front. In\nmany cases where we don\u0027t kill the dentry anyway, these locks are not required.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "58db63d086790eec2ed433f9d8c4962239809cf8",
      "tree": "e8fa4238167f92bb0dbded4d2df1498d8c4e9404",
      "parents": [
        "b5c84bf6f6fa3a7dfdcb556023a62953574b60ee"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:39 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:23 2011 +1100"
      },
      "message": "fs: dcache avoid starvation in dcache multi-step operations\n\nLong lived dcache \"multi-step\" operations which retry on rename seq can\nbe starved with a lot of rename activity. If they fail after the 1st pass,\ntake the rename_lock for writing to avoid further starvation.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "b5c84bf6f6fa3a7dfdcb556023a62953574b60ee",
      "tree": "7a2c299a180713e21d5cb653cb933121adf53c31",
      "parents": [
        "949854d02455080d20cd3e1db28a3a18daf7599d"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:38 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:23 2011 +1100"
      },
      "message": "fs: dcache remove dcache_lock\n\ndcache_lock no longer protects anything. remove it.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "949854d02455080d20cd3e1db28a3a18daf7599d",
      "tree": "9b13a6f86c1d0b91e462a471e53b0e717036b18e",
      "parents": [
        "9abca36087288fe28de4749c71ca003d4b9e3ed0"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:37 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:22 2011 +1100"
      },
      "message": "fs: Use rename lock and RCU for multi-step operations\n\nThe remaining usages for dcache_lock is to allow atomic, multi-step read-side\noperations over the directory tree by excluding modifications to the tree.\nAlso, to walk in the leaf-\u003eroot direction in the tree where we don\u0027t have\na natural d_lock ordering.\n\nThis could be accomplished by taking every d_lock, but this would mean a\nhuge number of locks and actually gets very tricky.\n\nSolve this instead by using the rename seqlock for multi-step read-side\noperations, retry in case of a rename so we don\u0027t walk up the wrong parent.\nConcurrent dentry insertions are not serialised against.  Concurrent deletes\nare tricky when walking up the directory: our parent might have been deleted\nwhen dropping locks so also need to check and retry for that.\n\nWe can also use the rename lock in cases where livelock is a worry (and it\nis introduced in subsequent patch).\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "9abca36087288fe28de4749c71ca003d4b9e3ed0",
      "tree": "1d1b08bdcffb8f8a7be217ee1c017f5154f64f6a",
      "parents": [
        "b23fb0a60379a95e10c671f646b259ea2558421e"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:36 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:22 2011 +1100"
      },
      "message": "fs: increase d_name lock coverage\n\nCover d_name with d_lock in more cases, where there may be concurrent\nmodification to it.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "b23fb0a60379a95e10c671f646b259ea2558421e",
      "tree": "7c3644b91241d32fda502a7be0b78e4c225f8091",
      "parents": [
        "2fd6b7f50797f2e993eea59e0a0b8c6399c811dc"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:35 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:22 2011 +1100"
      },
      "message": "fs: scale inode alias list\n\nAdd a new lock, dcache_inode_lock, to protect the inode\u0027s i_dentry list\nfrom concurrent modification. d_alias is also protected by d_lock.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "2fd6b7f50797f2e993eea59e0a0b8c6399c811dc",
      "tree": "ce33b94b34844c09103836cf4cfa4364b742f217",
      "parents": [
        "da5029563a0a026c64821b09e8e7b4fd81d3fe1b"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:34 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:21 2011 +1100"
      },
      "message": "fs: dcache scale subdirs\n\nProtect d_subdirs and d_child with d_lock, except in filesystems that aren\u0027t\nusing dcache_lock for these anyway (eg. using i_mutex).\n\nNote: if we change the locking rule in future so that -\u003ed_child protection is\nprovided only with -\u003ed_parent-\u003ed_lock, it may allow us to reduce some locking.\nBut it would be an exception to an otherwise regular locking scheme, so we\u0027d\nhave to see some good results. Probably not worthwhile.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "da5029563a0a026c64821b09e8e7b4fd81d3fe1b",
      "tree": "5d5618e0cb382390073377b1be7d0aa76879ac54",
      "parents": [
        "b7ab39f631f505edc2bbdb86620d5493f995c9da"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:33 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:21 2011 +1100"
      },
      "message": "fs: dcache scale d_unhashed\n\nProtect d_unhashed(dentry) condition with d_lock. This means keeping\nDCACHE_UNHASHED bit in synch with hash manipulations.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "b7ab39f631f505edc2bbdb86620d5493f995c9da",
      "tree": "62be97ebc7fc69ceb601f23312d335ebb8038ee7",
      "parents": [
        "2304450783dfde7b0b94ae234edd0dbffa865073"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:32 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:21 2011 +1100"
      },
      "message": "fs: dcache scale dentry refcount\n\nMake d_count non-atomic and protect it with d_lock. This allows us to ensure a\n0 refcount dentry remains 0 without dcache_lock. It is also fairly natural when\nwe start protecting many other dentry members with d_lock.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "2304450783dfde7b0b94ae234edd0dbffa865073",
      "tree": "b3435e65c24d69ccad9ef9492624f5b6081d86b8",
      "parents": [
        "789680d1ee9311cdf095241dc02bd9784d799cd1"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:31 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:20 2011 +1100"
      },
      "message": "fs: dcache scale lru\n\nAdd a new lock, dcache_lru_lock, to protect the dcache LRU list from concurrent\nmodification. d_lru is also protected by d_lock, which allows LRU lists to be\naccessed without the lru lock, using RCU in future patches.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "789680d1ee9311cdf095241dc02bd9784d799cd1",
      "tree": "e6a984b0aa4791918f1b665f45210c2ab762969c",
      "parents": [
        "ec2447c278ee973d35f38e53ca16ba7f965ae33d"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:30 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:20 2011 +1100"
      },
      "message": "fs: dcache scale hash\n\nAdd a new lock, dcache_hash_lock, to protect the dcache hash table from\nconcurrent modification. d_hash is also protected by d_lock.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "ec2447c278ee973d35f38e53ca16ba7f965ae33d",
      "tree": "5d17a0523c301b8c71c0f198ffe7782c5e9c0ea9",
      "parents": [
        "b1e6a015a580ad145689ad1d6b4aa0e03e6c868b"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:29 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:20 2011 +1100"
      },
      "message": "hostfs: simplify locking\n\nRemove dcache_lock locking from hostfs filesystem, and move it into dcache\nhelpers. All that is required is a coherent path name. Protection from\nconcurrent modification of the namespace after path name generation is not\nprovided in current code, because dcache_lock is dropped before the path is\nused.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "b1e6a015a580ad145689ad1d6b4aa0e03e6c868b",
      "tree": "57a10ef164e4d2f798d9b832dbeaf973aca2ab83",
      "parents": [
        "621e155a3591962420eacdd39f6f0aa29ceb221e"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:28 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:20 2011 +1100"
      },
      "message": "fs: change d_hash for rcu-walk\n\nChange d_hash so it may be called from lock-free RCU lookups. See similar\npatch for d_compare for details.\n\nFor in-tree filesystems, this is just a mechanical change.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "621e155a3591962420eacdd39f6f0aa29ceb221e",
      "tree": "387a9fb396f1bf24514b712c294182e36ba51076",
      "parents": [
        "fb2d5b86aff355a27ebfc132d3c99f4a940cc3fe"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:27 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:19 2011 +1100"
      },
      "message": "fs: change d_compare for rcu-walk\n\nChange d_compare so it may be called from lock-free RCU lookups. This\ndoes put significant restrictions on what may be done from the callback,\nhowever there don\u0027t seem to have been any problems with in-tree fses.\nIf some strange use case pops up that _really_ cannot cope with the\nrcu-walk rules, we can just add new rcu-unaware callbacks, which would\ncause name lookup to drop out of rcu-walk mode.\n\nFor in-tree filesystems, this is just a mechanical change.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "fb2d5b86aff355a27ebfc132d3c99f4a940cc3fe",
      "tree": "7fed12adf54473131e8b86c0c302c443b1d6a846",
      "parents": [
        "2bc334dcc7c77be3700dd443d92a78603f76976b"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:26 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:19 2011 +1100"
      },
      "message": "fs: name case update method\n\nsmpfs and ncpfs want to update a live dentry name in-place. Rather than\nhave them open code the locking, provide a documented dcache API.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "fe15ce446beb3a33583af81ffe6c9d01a75314ed",
      "tree": "bc8af66b6dd2d0f21a2a3f48a19975ae2cdbae4e",
      "parents": [
        "5eef7fa905c814826f518aca2d414ca77508ce30"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:23 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:18 2011 +1100"
      },
      "message": "fs: change d_delete semantics\n\nChange d_delete from a dentry deletion notification to a dentry caching\nadvise, more like -\u003edrop_inode. Require it to be constant and idempotent,\nand not take d_lock. This is how all existing filesystems use the callback\nanyway.\n\nThis makes fine grained dentry locking of dput and dentry lru scanning\nmuch simpler.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "3e880fb5e4bb6a012035e3edd0586ee2817c2e24",
      "tree": "665101c2c559c26e2dff2c7eca2c747fb736b524",
      "parents": [
        "86c8749ede0c59e590de9267066932a26f1ce796"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:19 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:17 2011 +1100"
      },
      "message": "fs: use fast counters for vfs caches\n\npercpu_counter library generates quite nasty code, so unless you need\nto dynamically allocate counters or take fast approximate value, a\nsimple per cpu set of counters is much better.\n\nThe percpu_counter can never be made to work as well, because it has an\nindirection from pointer to percpu memory, and it can\u0027t use direct\nthis_cpu_inc interfaces because it doesn\u0027t use static PER_CPU data, so\ncode will always be worse.\n\nIn the fastpath, it is the difference between this:\n\n        incl %gs:nr_dentry      # nr_dentry\n\nand this:\n\n        movl    percpu_counter_batch(%rip), %edx        # percpu_counter_batch,\n        movl    $1, %esi        #,\n        movq    $nr_dentry, %rdi        #,\n        call    __percpu_counter_add    # (plus I clobber registers)\n\n__percpu_counter_add:\n        pushq   %rbp    #\n        movq    %rsp, %rbp      #,\n        subq    $32, %rsp       #,\n        movq    %rbx, -24(%rbp) #,\n        movq    %r12, -16(%rbp) #,\n        movq    %r13, -8(%rbp)  #,\n        movq    %rdi, %rbx      # fbc, fbc\n#APP\n# 216 \"/home/npiggin/usr/src/linux-2.6/arch/x86/include/asm/thread_info.h\" 1\n        movq %gs:kernel_stack,%rax      #, pfo_ret__\n# 0 \"\" 2\n#NO_APP\n        incl    -8124(%rax)     # \u003cvariable\u003e.preempt_count\n        movq    32(%rdi), %r12  # \u003cvariable\u003e.counters, tcp_ptr__\n#APP\n# 78 \"lib/percpu_counter.c\" 1\n        add %gs:this_cpu_off, %r12      # this_cpu_off, tcp_ptr__\n# 0 \"\" 2\n#NO_APP\n        movslq  (%r12),%r13     #* tcp_ptr__, tmp73\n        movslq  %edx,%rax       # batch, batch\n        addq    %rsi, %r13      # amount, count\n        cmpq    %rax, %r13      # batch, count\n        jge     .L27    #,\n        negl    %edx    # tmp76\n        movslq  %edx,%rdx       # tmp76, tmp77\n        cmpq    %rdx, %r13      # tmp77, count\n        jg      .L28    #,\n.L27:\n        movq    %rbx, %rdi      # fbc,\n        call    _raw_spin_lock  #\n        addq    %r13, 8(%rbx)   # count, \u003cvariable\u003e.count\n        movq    %rbx, %rdi      # fbc,\n        movl    $0, (%r12)      #,* tcp_ptr__\n        call    _raw_spin_unlock        #\n.L29:\n#APP\n# 216 \"/home/npiggin/usr/src/linux-2.6/arch/x86/include/asm/thread_info.h\" 1\n        movq %gs:kernel_stack,%rax      #, pfo_ret__\n# 0 \"\" 2\n#NO_APP\n        decl    -8124(%rax)     # \u003cvariable\u003e.preempt_count\n        movq    -8136(%rax), %rax       #, D.14625\n        testb   $8, %al #, D.14625\n        jne     .L32    #,\n.L31:\n        movq    -24(%rbp), %rbx #,\n        movq    -16(%rbp), %r12 #,\n        movq    -8(%rbp), %r13  #,\n        leave\n        ret\n        .p2align 4,,10\n        .p2align 3\n.L28:\n        movl    %r13d, (%r12)   # count,*\n        jmp     .L29    #\n.L32:\n        call    preempt_schedule        #\n        .p2align 4,,6\n        jmp     .L31    #\n        .size   __percpu_counter_add, .-__percpu_counter_add\n        .p2align 4,,15\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "86c8749ede0c59e590de9267066932a26f1ce796",
      "tree": "316517d7c03d9caf0577acc517532ed2bc1801cc",
      "parents": [
        "ccd35fb9f4da856b105ea0f1e0cab3702e8ae6ba"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:18 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:17 2011 +1100"
      },
      "message": "vfs: revert per-cpu nr_unused counters for dentry and inodes\n\nThe nr_unused counters count the number of objects on an LRU, and as such they\nare synchronized with LRU object insertion and removal and scanning, and\nprotected under the LRU lock.\n\nMaking it per-cpu does not actually get any concurrency improvements because of\nthis lock, and summing the counter is much slower, and\nincrementing/decrementing it costs more code size and is slower too.\n\nThese counters should stay per-LRU, which currently means global.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "786a5e15b613a9cee4fc9139fc3113a5ab0fde79",
      "tree": "0c0100945f74ad1d68b9b546e1929cfcb67e9095",
      "parents": [
        "d3a23e1678a5827c38ed8a465ad91d65e59fa911"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:16 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:16 2011 +1100"
      },
      "message": "fs: d_validate fixes\n\nd_validate has been broken for a long time.\n\nkmem_ptr_validate does not guarantee that a pointer can be dereferenced\nif it can go away at any time. Even rcu_read_lock doesn\u0027t help, because\nthe pointer might be queued in RCU callbacks but not executed yet.\n\nSo the parent cannot be checked, nor the name hashed. The dentry pointer\ncan not be touched until it can be verified under lock. Hashing simply\ncannot be used.\n\nInstead, verify the parent/child relationship by traversing parent\u0027s\nd_child list. It\u0027s slow, but only ncpfs and the destaged smbfs care\nabout it, at this point.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "d3a23e1678a5827c38ed8a465ad91d65e59fa911",
      "tree": "44363edff14c1796a634825f07decc2324d7e6e0",
      "parents": [
        "3c0eee3fe6a3a1c745379547c7e7c904aa64f6d5"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Wed Jan 05 20:01:21 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Wed Jan 05 20:01:21 2011 +1100"
      },
      "message": "Revert \"fs: use RCU read side protection in d_validate\"\n\nThis reverts commit 3825bdb7ed920845961f32f364454bee5f469abb.\n\nYou cannot dget() a dentry without having a reference, or holding\na lock that guarantees it remains valid.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "3825bdb7ed920845961f32f364454bee5f469abb",
      "tree": "935f4d42ff568efd595700889a1839a604aa8cec",
      "parents": [
        "a4633357ac610cd2f8740e28a31fc148a7960421"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sun Oct 10 05:36:27 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:13 2010 -0400"
      },
      "message": "fs: use RCU read side protection in d_validate\n\nd_validate does a purely read lookup in the dentry hash, so use RCU read side\nlocking instead of dcache_lock.  Split out from a larget patch by\nNick Piggin \u003cnpiggin@suse.de\u003e.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a4633357ac610cd2f8740e28a31fc148a7960421",
      "tree": "5c28962f355c545f888ab7b8e95e8bce5c2de599",
      "parents": [
        "3049cfe24ef3872ba74f90630356722cf988b80d"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sun Oct 10 05:36:26 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:13 2010 -0400"
      },
      "message": "fs: clean up dentry lru modification\n\nAlways do a list_del_init on the LRU to make sure the list_empty invariant for\nnot beeing on the LRU always holds true, and fold dentry_lru_del_init into\ndentry_lru_del.  Replace the dentry_lru_add_tail primitive with a\ndentry_lru_move_tail operations that simpler when the dentry already is one\nthe list, which is always is.  Move the list_empty into dentry_lru_add to\nfit the scheme of the other lru helpers, and simplify locking once we\nmove to a separate LRU lock.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "3049cfe24ef3872ba74f90630356722cf988b80d",
      "tree": "18c7574640a8f95106facd56cb03a74b73d60f42",
      "parents": [
        "265ac90230257e9c035e4b0c63a0c11c5336e93c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sun Oct 10 05:36:25 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:13 2010 -0400"
      },
      "message": "fs: split __shrink_dcache_sb\n\nCurrently __shrink_dcache_sb has an extremly awkward calling convention\nbecause it tries to please very different callers.  Split out the\nmain loop into a shrink_dentry_list helper, which gets called directly\nfrom shrink_dcache_sb for the cases where all dentries need to be pruned,\nor from __shrink_dcache_sb for pruning only a certain number of dentries.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "265ac90230257e9c035e4b0c63a0c11c5336e93c",
      "tree": "7bb17007af9812137eb2060fd9ef979e049f7acd",
      "parents": [
        "312d3ca856d369bb04d0443846b85b4cdde6fa8a"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Sun Oct 10 05:36:24 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:12 2010 -0400"
      },
      "message": "fs: improve DCACHE_REFERENCED usage\n\ndentry referenced bit is only set when installing the dentry back\nonto the LRU. However with lazy LRU, the dentry can already be on\nthe LRU list at dput time, thus missing out on setting the referenced\nbit. Fix this.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "312d3ca856d369bb04d0443846b85b4cdde6fa8a",
      "tree": "cf95d01cffaf02bf53c2bb0f7c2c924279ec6eeb",
      "parents": [
        "9c82ab9c9e16cb9edf17bd0d31f3d6904afce04f"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sun Oct 10 05:36:23 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:12 2010 -0400"
      },
      "message": "fs: use percpu counter for nr_dentry and nr_dentry_unused\n\nThe nr_dentry stat is a globally touched cacheline and atomic operation\ntwice over the lifetime of a dentry. It is used for the benfit of userspace\nonly. Turn it into a per-cpu counter and always decrement it in d_free instead\nof doing various batching operations to reduce lock hold times in the callers.\n\nBased on an earlier patch from Nick Piggin \u003cnpiggin@suse.de\u003e.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9c82ab9c9e16cb9edf17bd0d31f3d6904afce04f",
      "tree": "82701029a920b1550f1234a8630ff0243ac3651c",
      "parents": [
        "be148247cfbe2422f5709e77d9c3e10b8a6394da"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sun Oct 10 05:36:22 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:12 2010 -0400"
      },
      "message": "fs: simplify __d_free\n\nRemove d_callback and always call __d_free with a RCU head.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "be148247cfbe2422f5709e77d9c3e10b8a6394da",
      "tree": "f04605bb5ea21cefd455b6fd81c51d8bb02c1521",
      "parents": [
        "85fe4025c616a7c0ed07bc2fc8c5371b07f3888c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sun Oct 10 05:36:21 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:12 2010 -0400"
      },
      "message": "fs: take dcache_lock inside __d_path\n\nAll callers take dcache_lock just around the call to __d_path, so\ntake the lock into it in preparation of getting rid of dcache_lock.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "99b7db7b8ffd6bb755eb0a175596421a0b581cb2",
      "tree": "cbaf57d252f0852f967d3fd5a5f87472964a01fe",
      "parents": [
        "6416ccb7899960868f5016751fb81bf25213d24f"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Wed Aug 18 04:37:39 2010 +1000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Aug 18 08:35:48 2010 -0400"
      },
      "message": "fs: brlock vfsmount_lock\n\nfs: brlock vfsmount_lock\n\nUse a brlock for the vfsmount lock. It must be taken for write whenever\nmodifying the mount hash or associated fields, and may be taken for read when\nperforming mount hash lookups.\n\nA new lock is added for the mnt-id allocator, so it doesn\u0027t need to take\nthe heavy vfsmount write-lock.\n\nThe number of atomics should remain the same for fastpath rlock cases, though\ncode would be slightly slower due to per-cpu access. Scalability is not not be\nmuch improved in common cases yet, due to other locks (ie. dcache_lock) getting\nin the way. However path lookups crossing mountpoints should be one case where\nscalability is improved (currently requiring the global lock).\n\nThe slowpath is slower due to use of brlock. On a 64 core, 64 socket, 32 node\nAltix system (high latency to remote nodes), a simple umount microbenchmark\n(mount --bind mnt mnt2 ; umount mnt2 loop 1000 times), before this patch it\ntook 6.8s, afterwards took 7.1s, about 5% slower.\n\nCc: Al Viro \u003cviro@ZenIV.linux.org.uk\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b04f784e5d19ed58892833dae845738972cea260",
      "tree": "6060e063b5a51461fd60630d57318778fe987148",
      "parents": [
        "2a4419b5b2a77f3f4537c14f7ad7df95770655dd"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Wed Aug 18 04:37:34 2010 +1000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Aug 18 08:35:47 2010 -0400"
      },
      "message": "fs: remove extra lookup in __lookup_hash\n\nfs: remove extra lookup in __lookup_hash\n\nOptimize lookup for create operations, where no dentry should often be\ncommon-case. In cases where it is not, such as unlink, the added overhead\nis much smaller than the removed.\n\nAlso, move comments about __d_lookup racyness to the __d_lookup call site.\nd_lookup is intuitive; __d_lookup is what needs commenting. So in that same\nvein, add kerneldoc comments to __d_lookup and clean up some of the comments:\n\n- We are interested in how the RCU lookup works here, particularly with\n  renames. Make that explicit, and point to the document where it is explained\n  in more detail.\n- RCU is pretty standard now, and macros make implementations pretty mindless.\n  If we want to know about RCU barrier details, we look in RCU code.\n- Delete some boring legacy comments because we don\u0027t care much about how the\n  code used to work, more about the interesting parts of how it works now. So\n  comments about lazy LRU may be interesting, but would better be done in the\n  LRU or refcount management code.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "cd956a1c039a55a0ea58175b9a6e83c45799f3de",
      "tree": "d531e2764b9946e3f4ee94f881d2f67321653191",
      "parents": [
        "1f5cfe2f732c6f4d198950ec3c951105af24dd01"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Sat Aug 14 13:05:31 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 14 16:21:00 2010 -0700"
      },
      "message": "fs/dcache: fix function param name in kernel-doc\n\nFix parameter name in kernel-doc notation (causes a warning).\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8df9d1a4142311c084ffeeacb67cd34d190eff74",
      "tree": "512e018114ea506659fac73d838bfca0fb97a5a4",
      "parents": [
        "ffd1f4ed5bddccf2277e3d8525bcedf1983319f8"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Aug 10 11:41:41 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Aug 11 00:29:47 2010 -0400"
      },
      "message": "vfs: show unreachable paths in getcwd and proc\n\nPrepend \"(unreachable)\" to path strings if the path is not reachable\nfrom the current root.\n\nTwo places updated are\n - the return string from getcwd()\n - and symlinks under /proc/$PID.\n\nOther uses of d_path() are left unchanged (we know that some old\nsoftware crashes if /proc/mounts is changed).\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ffd1f4ed5bddccf2277e3d8525bcedf1983319f8",
      "tree": "2a1b08b204820ba0e9ecb7397ee7a08daff01594",
      "parents": [
        "f2eb6575d5beba1e98d400463007d77555d1fc35"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Aug 10 11:41:40 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Aug 11 00:28:21 2010 -0400"
      },
      "message": "vfs: only add \" (deleted)\" where necessary\n\n__d_path() has 4 callers:\n\n  d_path()\n  sys_getcwd()\n  seq_path_root()\n  tomoyo_realpath_from_path2()\n\nOf these the only one which needs the \" (deleted)\" ending is d_path().\n\nsys_getcwd() checks for existence before calling __d_path().\n\nseq_path_root() is used to show the mountpoint path in\n/proc/PID/mountinfo, which is always a positive.\n\nAnd tomoyo doesn\u0027t want the deleted ending.\n\nCreate a helper \"path_with_deleted()\" as subsequent patches will need\nthis in multiple places.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f2eb6575d5beba1e98d400463007d77555d1fc35",
      "tree": "d7459d7d06014b432ef8594f4d2e6de4966fe372",
      "parents": [
        "98dc568bc2ebefe4c0cb315a7fb7eff8bbb43176"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Aug 10 11:41:39 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Aug 11 00:28:21 2010 -0400"
      },
      "message": "vfs: add prepend_path() helper\n\nSplit off prepend_path() from __d_path().  This new helper takes an\nend-of-buffer pointer and buffer-length pointer just like the other\nprepend_* functions.  Move the \" (deleted)\" postfix out to __d_path().\n\nThis patch doesn\u0027t change any functionality but paves the way for the\nfollowing patches.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "98dc568bc2ebefe4c0cb315a7fb7eff8bbb43176",
      "tree": "54cc4353683020df6669bc8b1aa5b55ebe3ab1f3",
      "parents": [
        "7ae6bdbd9b9d42da53ea809875c0a6cda3de694c"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Aug 10 11:41:38 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Aug 11 00:28:21 2010 -0400"
      },
      "message": "vfs: __d_path: dont prepend the name of the root dentry\n\nIn the old times pseudo-filesystems set the name of theroot dentry to\nsome prefix like \"pipe:\" and the name of the child dentry to \"[123]\"\nand relied on a hack in __d_path() to replace the preceding slash with\nthe root\u0027s name to get \"pipe:[123]\".\n\nThen the d_dname() dentry operation was introduced which solved the\nsame problem without having to pre-fill the name in each dentry.\n\nCurrently the following pseudo filesystems exist in the kernel:\n\nperfmon\nmtd\nanon_inode\nbdev\npipe\nsocket\n\nOf these only perfmon, anon_inode, pipe and socket create\nsub-dentries, all of which have now been switched to using d_dname().\n\nbdev and mtd only create inodes.\n\nThis means that now the hack to overwrite the slash can be removed, so\nfor unreachable paths (e.g. within a detached mount) the path string\nwon\u0027t be polluted with garbage.  For these cases a subsequent patch\nwill add a prefix, indicating that the path is unreachable.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f7ad3c6be90809b53b7f0ae9d4eaa45ce2564a79",
      "tree": "dc9b09188bab35320200f318b5e7b52f24dc43ad",
      "parents": [
        "542ce7a9bc6b3838832ae0f4f8de30c667af8ff3"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Aug 10 11:41:36 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Aug 11 00:28:20 2010 -0400"
      },
      "message": "vfs: add helpers to get root and pwd\n\nAdd three helpers that retrieve a refcounted copy of the root and cwd\nfrom the supplied fs_struct.\n\n get_fs_root()\n get_fs_pwd()\n get_fs_root_and_pwd()\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "dca332528bc69e05f67161e1ed59929633d5e63d",
      "tree": "0ec5576d52bead57c73983d2412cfe71814b5f8d",
      "parents": [
        "7a4dec53897ecd3367efb1e12fe8a4edc47dc0e9"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jul 25 02:31:46 2010 +0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 09 16:49:02 2010 -0400"
      },
      "message": "no need for list_for_each_entry_safe()/resetting with superblock list\n\njust delay __put_super() a bit\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c103135c14e03fc9a9e5f0adc01df9ad272cf2a1",
      "tree": "0c75bd6a56385697cd0e79fb695a833c5225e45e",
      "parents": [
        "d0352d3ed722b134dacc21836c1763e7e3523662"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jun 06 22:31:14 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 09 16:48:13 2010 -0400"
      },
      "message": "new helper: __dentry_path()\n\nbuilds path relative to fs root, called under dcache_lock,\ndoesn\u0027t append any nonsense to unlinked ones.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7f8275d0d660c146de6ee3017e1e2e594c49e820",
      "tree": "884db927118b44102750b5168ee36ef4b8b5cb4e",
      "parents": [
        "d0c6f6258478e1dba532bf7c28e2cd6e1047d3a4"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Jul 19 14:56:17 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Mon Jul 19 14:56:17 2010 +1000"
      },
      "message": "mm: add context argument to shrinker callback\n\nThe current shrinker implementation requires the registered callback\nto have global state to work from. This makes it difficult to shrink\ncaches that are not global (e.g. per-filesystem caches). Pass the shrinker\nstructure to the callback so that users can embed the shrinker structure\nin the context the shrinker needs to operate on and get back to it in the\ncallback via container_of().\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "57439f878afafefad8836ebf5c49da2a0a746105",
      "tree": "ec11dd35704aa37d77a5fd8404fda57f297a3834",
      "parents": [
        "5904b3b81d25166e5e39b9727645bb47937618e3"
      ],
      "author": {
        "name": "npiggin@suse.de",
        "email": "npiggin@suse.de",
        "time": "Thu Jun 24 13:02:14 2010 +1000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 29 10:38:22 2010 -0700"
      },
      "message": "fs: fix superblock iteration race\n\nlist_for_each_entry_safe is not suitable to protect against concurrent\nmodification of the list. 6754af6 introduced a race in sb walking.\n\nlist_for_each_entry can use the trick of pinning the current entry in\nthe list before we drop and retake the lock because it subsequently\nfollows cur-\u003enext. However list_for_each_entry_safe saves n\u003dcur-\u003enext\nfor following before entering the loop body, so when the lock is\ndropped, n may be deleted.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: John Stultz \u003cjohnstul@us.ibm.com\u003e\nCc: Frank Mayhar \u003cfmayhar@google.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "79893c17b45dec0d3c25bc22d28d9f319b14f573",
      "tree": "560c5f13193cbb1e2d2bf5dc1fd6f25d49c01165",
      "parents": [
        "df40c01a9249873e4ad0625ae5d9fb831962b75c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 22 20:27:55 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri May 21 18:31:16 2010 -0400"
      },
      "message": "fix prune_dcache()/umount() race\n\n... and get rid of the last __put_super_and_need_restart() caller\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "551de6f34dfeefbeeadb32909c387d393114ecc8",
      "tree": "822af803e7e75ed476b0a176639c162e0395910d",
      "parents": [
        "1712ac8fda7d8bc4dc921f5777b7423aacad7263"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 22 19:36:35 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri May 21 18:31:14 2010 -0400"
      },
      "message": "Leave superblocks on s_list until the end\n\nWe used to remove from s_list and s_instances at the same\ntime.  So let\u0027s *not* do the former and skip superblocks\nthat have empty s_instances in the loops over s_list.\n\nThe next step, of course, will be to get rid of rescan logics\nin those loops.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "13e3c5e5b9c67e59074d24e29f3ff794bb4dfef0",
      "tree": "18222526565a7fdf44aba30d2861c1f6b75516e3",
      "parents": [
        "d515e86e639890b33a09390d062b0831664f04a2"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri May 21 16:11:04 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri May 21 18:31:12 2010 -0400"
      },
      "message": "clean DCACHE_CANT_MOUNT in d_delete()\n\nWe set the \"it\u0027s dead, don\u0027t mount on it\" flag _and_ do not remove it if\nwe turn the damn thing negative and leave it around.  And if it goes\npositive afterwards, well...\n\nFortunately, there\u0027s only one place where that needs to be caught:\nonly d_delete() can turn the sucker negative without immediately freeing\nit; all other places that can lead to -\u003ed_iput() call are followed by\nunconditionally freeing struct dentry in question.  So the fix is obvious:\n\nAddresses https://bugzilla.kernel.org/show_bug.cgi?id\u003d16014\nReported-by: Adam Tkac \u003cvonsch@gmail.com\u003e\nTested-by: Adam Tkac \u003cvonsch@gmail.com\u003e\nCc: \u003cstable@kernel.org\u003e         [2.6.34.x]\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4919c5e45a91b5db5a41695fe0357fbdff0d5767",
      "tree": "1aec0bdee83753205be2a6bbe0486db08984f938",
      "parents": [
        "bec1052e5be6a70f03f6adc650f3a6e4c2f44ddf"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 03 14:13:08 2010 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 03 14:13:08 2010 -0500"
      },
      "message": "fix race in d_splice_alias()\n\nrehashing the negative placeholder opens a race with d_lookup();\nwe unhash it almost immediately (by d_move()), but the race\nwindow is there.  Since d_move() doesn\u0027t rely on target being\nhashed, we don\u0027t need that d_rehash() at all.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "2096f759abcb42200a81d776f597362fd9265024",
      "tree": "f0784653a50713f9f91f39e24c40abacbfbb6427",
      "parents": [
        "495d6c9c6595ec7b37910dfd42634839431d21fd"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jan 30 13:16:21 2010 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 03 14:07:55 2010 -0500"
      },
      "message": "New helper: path_is_under(path1, path2)\n\nAnalog of is_subdir for vfsmount,dentry pairs, moved from audit_tree.c\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ec4f860597af41c6b71f4de86d8e86f710bfab54",
      "tree": "0e16659ad0c0a89567cca34069e1a6da7131d7f2",
      "parents": [
        "587d4a17d837ac0f17edb26f1b6c80c0abda6343"
      ],
      "author": {
        "name": "H Hartley Sweeten",
        "email": "hartleys@visionengravers.com",
        "time": "Tue Jan 05 13:45:18 2010 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 03 13:00:19 2010 -0500"
      },
      "message": "fs/dcache.c: CodingStyle cleanup\n\nCleanup EXPORT* macros according to Documantation/CodingStyle.\n\nMove EXPORT* macros to the line immediately after the closing\nfunction brace.\n\nSigned-off-by: H Hartley Sweeten \u003chsweeten@visionengravers.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ef26ca97e83052790940cbc444b01b0d17a813c1",
      "tree": "93700cae2f8133e74be9621f00bd4588017d85eb",
      "parents": [
        "39159de2a091a35ea86b188ebdc5e642f5cfc832"
      ],
      "author": {
        "name": "H Hartley Sweeten",
        "email": "hartleys@visionengravers.com",
        "time": "Tue Sep 29 20:09:42 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 16 12:16:48 2009 -0500"
      },
      "message": "libfs: move EXPORT_SYMBOL for d_alloc_name\n\nThe EXPORT_SYMBOL for d_alloc_name is in fs/libfs.c but the function\nis in fs/dcache.c.  Move the EXPORT_SYMBOL to the line immediately\nafter the closing function brace line in fs/dcache.c as mentioned\nin Documentation/CodingStyle.\n\nSigned-off-by: H Hartley Sweeten \u003chsweeten@visionengravers.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "613afbf83298efaead05ebcac23d2285609d7160",
      "tree": "15fa2025d74cee5f6805ab974c532c6b6a603333",
      "parents": [
        "6f80bd985fe242c2e6a8b6209ed20b0495d3d63b"
      ],
      "author": {
        "name": "Frederic Weisbecker",
        "email": "fweisbec@gmail.com",
        "time": "Thu Jul 16 15:44:29 2009 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sat Jul 18 15:51:44 2009 +0200"
      },
      "message": "sched: Pull up the might_sleep() check into cond_resched()\n\nmight_sleep() is called late-ish in cond_resched(), after the\nneed_resched()/preempt enabled/system running tests are\nchecked.\n\nIt\u0027s better to check the sleeps while atomic earlier and not\ndepend on some environment datas that reduce the chances to\ndetect a problem.\n\nAlso define cond_resched_*() helpers as macros, so that the\nFILE/LINE reported in the sleeping while atomic warning\ndisplays the real origin and not sched.h\n\nChanges in v2:\n\n - Call __might_sleep() directly instead of might_sleep() which\n   may call cond_resched()\n\n - Turn cond_resched() into a macro so that the file:line\n   couple reported refers to the caller of cond_resched() and\n   not __cond_resched() itself.\n\nChanges in v3:\n\n - Also propagate this __might_sleep() pull up to\n   cond_resched_lock() and cond_resched_softirq()\n\nSigned-off-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nLKML-Reference: \u003c1247725694-6082-6-git-send-email-fweisbec@gmail.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "f3da392e9ff14b9f388e74319e6d195848991c07",
      "tree": "d9e7660e5c0b4524aeaafcc5b89a9d68a7ca3817",
      "parents": [
        "8c85e125124a473d6f3e9bb187b0b84207f81d91"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Mon May 04 03:32:03 2009 +0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:06 2009 -0400"
      },
      "message": "dcache: extrace and use d_unlinked()\n\nd_unlinked() will be used in middle-term to ban checkpointing when opened\nbut unlinked file is detected, and in long term, to detect such situation\nand special case on it.\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c490d79bb70c549e096099576b1df40a8810b0d8",
      "tree": "4ebdb76143b6ebaa287274548a1d2c844a94f63e",
      "parents": [
        "a731d12d6ddd1e703770cacb5dfecb155b03ee06"
      ],
      "author": {
        "name": "npiggin@suse.de",
        "email": "npiggin@suse.de",
        "time": "Sun Apr 26 20:25:53 2009 +1000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat May 09 10:49:40 2009 -0400"
      },
      "message": "fs: dcache fix LRU ordering\n\nFix ordering of LRU when moving referenced dentries to the head of the list\n(they should go to the head of the list in the same order as they were found\nfrom the tail, rather than reverse order).\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "24b6f16ecf37f918a1934d590e9e71c100d6388f",
      "tree": "14ea0e7f399c1608d0401e87655cc9332a3b9f33",
      "parents": [
        "1644ccc8a99ae73859c39372f96afdbf03c9f80d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Apr 18 03:25:41 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Apr 20 23:01:15 2009 -0400"
      },
      "message": "No need for crossing to mountpoint in audit_tag_tree()\n\nis_under() will DTRT anyway.  And yes, is_subdir() behaviour\nis intentional.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "e5824c97a993ac5bd22cec34e6cb6f85d39b73ba",
      "tree": "91e9675c3ad752fabed0ada406288ea2d47bc424",
      "parents": [
        "d9e66c7296f3a39f6ac847f11ada8ddf10a4f8b1"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 29 16:36:59 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 31 23:00:28 2009 -0400"
      },
      "message": "Trim includes of fdtable.h\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "5ad4e53bd5406ee214ddc5a41f03f779b8b2d526",
      "tree": "b3dab5140284b3edf02bf2b13f74bfddb25aa62a",
      "parents": [
        "ce3b0f8d5c2203301fc87f3aaaed73e5819e2a48"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 29 19:50:06 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 31 23:00:27 2009 -0400"
      },
      "message": "Get rid of indirect include of fs_struct.h\n\nDon\u0027t pull it in sched.h; very few files actually need it and those\ncan include directly.  sched.h itself only needs forward declaration\nof struct fs_struct;\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b6520c81934848cef126d93951f7ce242e0f656d",
      "tree": "dda2be723ee831eb1d33ead7f22335f7817f9c61",
      "parents": [
        "2b1c6bd77d4e6a727ffac8630cd154b2144b751a"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Jan 05 19:10:37 2009 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 27 14:43:57 2009 -0400"
      },
      "message": "cleanup d_add_ci\n\nMake sure that comments describe what\u0027s going on and not how, and always\nuse __d_instantiate instead of two separate branches, one with\nd_instantiate and one with __d_instantiate.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "adc487204a9373d2b5a535412466326036147a72",
      "tree": "bae340437d94f25020f2dcdf448eb1110d4621a8",
      "parents": [
        "dca17146f4b72b8966016c406d94ad3e48289b79"
      ],
      "author": {
        "name": "Benny Halevy",
        "email": "bhalevy@panasas.com",
        "time": "Fri Feb 27 14:02:59 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Feb 27 16:26:20 2009 -0800"
      },
      "message": "EXPORT_SYMBOL(d_obtain_alias) rather than EXPORT_SYMBOL_GPL\n\nCommit 4ea3ada2955e4519befa98ff55dd62d6dfbd1705 declares d_obtain_alias()\nas EXPORT_SYMBOL_GPL where it\u0027s supposed to replace d_alloc_anon which was\npreviously declared as EXPORT_SYMBOL and thus available to any loadable\nmodule.\n\nThis patch reverts that.\n\nSigned-off-by: Benny Halevy \u003cbhalevy@panasas.com\u003e\nAcked-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: \"J. Bruce Fields\" \u003cbfields@fieldses.org\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3cdad42884bbd95d5aa01297e8236ea1bad70053",
      "tree": "169b8958b56d5c39a4f437d041baf0412bb53b96",
      "parents": [
        "003d7ab479168132a2b2c6700fe682b08f08ab0c"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:14:22 2009 +0100"
      },
      "committer": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:15:26 2009 +0100"
      },
      "message": "[CVE-2009-0029] System call wrappers part 20\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\n"
    },
    {
      "commit": "9a8d5bb4ad829e66ab5428ccdce2cbc8ab0ac96c",
      "tree": "dd328a002fdc141a9b45d1262c2956209644c95a",
      "parents": [
        "df4927bf6ccf6278a97a44bd107080c71b269cb5"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Jan 07 18:09:14 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 08 08:31:15 2009 -0800"
      },
      "message": "generic swap(): dcache: use swap() instead of private do_switch()\n\nUse the new generic implementation.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b6b3fdead251d432f32f2cfce2a893ab8a658110",
      "tree": "358885c529fd14d0cc404a454088329533db379e",
      "parents": [
        "fd659fd6275d3426d7967da1f0e3638bbbd2fedb"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "dada1@cosmosbay.com",
        "time": "Wed Dec 10 09:35:45 2008 -0800"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 31 18:07:42 2008 -0500"
      },
      "message": "filp_cachep can be static in fs/file_table.c\n\nInstead of creating the \"filp\" kmem_cache in vfs_caches_init(),\nwe can do it a litle be later in files_init(), so that filp_cachep\nis static to fs/file_table.c\n\nAcked-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n\nSigned-off-by: Eric Dumazet \u003cdada1@cosmosbay.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "52afeefb9dac9287429642189996426a2bfd6a25",
      "tree": "cbc7baf2a2f4e8dc16861ad4b13de0183f4afa7e",
      "parents": [
        "be42c4c433c2c0d3f1583c08908fead00d36d222"
      ],
      "author": {
        "name": "Arjan van de Ven",
        "email": "arjan@infradead.org",
        "time": "Mon Dec 01 14:35:00 2008 -0800"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 31 18:07:41 2008 -0500"
      },
      "message": "expand some comments (d_path / seq_path)\n\nExplain that you really need to use the return value of d_path rather than\nthe buffer you passed into it.\n\nAlso fix the comment for seq_path(), the function arguments changed\nrecently but the comment hadn\u0027t been updated in sync.\n\nSigned-off-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "be42c4c433c2c0d3f1583c08908fead00d36d222",
      "tree": "4553430fa44429b1127a4ef8649380b3bce4f9eb",
      "parents": [
        "dc711ca35f9d95a1eec02118e0c298b5e3068315"
      ],
      "author": {
        "name": "Zhaolei",
        "email": "zhaolei@cn.fujitsu.com",
        "time": "Mon Dec 01 14:34:58 2008 -0800"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 31 18:07:40 2008 -0500"
      },
      "message": "correct wrong function name of d_put in kernel document and source comment\n\nno function named d_put(), it should be dput().\n\nImpact: fix document and comment, no functionality changed\n\nSigned-off-by: Zhao Lei \u003czhaolei@cn.fuijtsu.com\u003e\nSigned-off-by: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "dc711ca35f9d95a1eec02118e0c298b5e3068315",
      "tree": "0224900b89471b719a9abcd3e43b334e3d993df9",
      "parents": [
        "7df5fa06de89a4ac311957e0cb9c1d87552b4325"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Nov 03 15:03:50 2008 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 31 18:07:40 2008 -0500"
      },
      "message": "fix switch_names() breakage in short-to-short case\n\nWe want -\u003ename.len to match the resulting name on *both*\nsource and target\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c2452f32786159ed85f0e4b21fec09258f822fc8",
      "tree": "50d93df47f4547a5699c87a608e85596e4c6165f",
      "parents": [
        "e2b689d82c0394e5239a3557a217f19e2f47f1be"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Mon Dec 01 09:33:43 2008 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 31 18:07:38 2008 -0500"
      },
      "message": "shrink struct dentry\n\nstruct dentry is one of the most critical structures in the kernel. So it\u0027s\nsad to see it going neglected.\n\nWith CONFIG_PROFILING turned on (which is probably the common case at least\nfor distros and kernel developers), sizeof(struct dcache) \u003d\u003d 208 here\n(64-bit). This gives 19 objects per slab.\n\nI packed d_mounted into a hole, and took another 4 bytes off the inline\nname length to take the padding out from the end of the structure. This\nshinks it to 200 bytes. I could have gone the other way and increased the\nlength to 40, but I\u0027m aiming for a magic number, read on...\n\nI then got rid of the d_cookie pointer. This shrinks it to 192 bytes. Rant:\nwhy was this ever a good idea? The cookie system should increase its hash\nsize or use a tree or something if lookups are a problem. Also the \"fast\ndcookie lookups\" in oprofile should be moved into the dcookie code -- how\ncan oprofile possibly care about the dcookie_mutex? It gets dropped after\nget_dcookie() returns so it can\u0027t be providing any sort of protection.\n\nAt 192 bytes, 21 objects fit into a 4K page, saving about 3MB on my system\nwith ~140 000 entries allocated. 192 is also a multiple of 64, so we get\nnice cacheline alignment on 64 and 32 byte line systems -- any given dentry\nwill now require 3 cachelines to touch all fields wheras previously it\nwould require 4.\n\nI know the inline name size was chosen quite carefully, however with the\nreduction in cacheline footprint, it should actually be just about as fast\nto do a name lookup for a 36 character name as it was before the patch (and\nfaster for other sizes). The memory footprint savings for names which are\n\u003c\u003d 32 or \u003e 36 bytes long should more than make up for the memory cost for\n33-36 byte names.\n\nPerformance is a feature...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "fd217f4d70172c526478f2bc76859e909fdfa674",
      "tree": "df707d185b3009ada981c17211a6e02097e8fc7b",
      "parents": [
        "08b9fe6b12d32324f311c46b88102b6b9067d434"
      ],
      "author": {
        "name": "Arjan van de Ven",
        "email": "arjan@infradead.org",
        "time": "Tue Oct 21 06:47:33 2008 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Oct 23 05:17:12 2008 -0400"
      },
      "message": "[PATCH] fs: add a sanity check in d_free\n\nHi Al,\n\nremember that debug session we did at KS? You suggested this patch back\nthen....\n\nFrom 7751eaf30474b8cbfaea64795805a17eab05ac53 Mon Sep 17 00:00:00 2001\nFrom: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nDate: Tue, 16 Sep 2008 16:51:17 -0700\nSubject: [PATCH] fs: add a sanity check in d_free\n\nwe\u0027re seeing some corruption in the dentry-\u003ed_alias list that\nappears like a free of an entry still on the list; this patch\nadds a WARN_ON() to catch this scenario, as suggested by Al Viro\n\nSigned-off-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\n"
    },
    {
      "commit": "5cec56deb6d41b5b570306b17cd0b1590ebd0897",
      "tree": "b5485bd962bdf354d566e8a5e4257e726b542f8b",
      "parents": [
        "0e55a7cca4b66f625d67b292f80b6a976e77c51b"
      ],
      "author": {
        "name": "Qinghuang Feng",
        "email": "qhfeng.kernel@gmail.com",
        "time": "Mon Oct 13 18:32:42 2008 +0800"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Oct 23 05:13:24 2008 -0400"
      },
      "message": "[PATCH] fs/dcache.c: update comment of d_validate()\n\nParameters @hash and @len have been removed since 2.4.3,\nnow just to delete them.\n\nSigned-off-by: Qinghuang Feng \u003cqhfeng.kernel@gmail.com\u003e\n"
    },
    {
      "commit": "8f3dfaa5bab767a043c5af5b879fb86c03329f8a",
      "tree": "b5213e73f1cca4ca6c6c820a1927a0fb03b9cb57",
      "parents": [
        "360da90029196c9449bc61e5a07ce8404e4cba57"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Thu Oct 16 07:50:29 2008 +0900"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Oct 23 05:13:18 2008 -0400"
      },
      "message": "[PATCH vfs-2.6 4/6] vfs: remove unnecessary fsnotify_d_instantiate()\n\nThis calls d_move(), so fsnotify_d_instantiate() is unnecessary like\nrename path.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "360da90029196c9449bc61e5a07ce8404e4cba57",
      "tree": "7bca57f11b2022633f5c49ec9a1bca9d2d4d1b1a",
      "parents": [
        "e2761a1167633ed943fea29002f990194923d060"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Thu Oct 16 07:50:28 2008 +0900"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Oct 23 05:13:17 2008 -0400"
      },
      "message": "[PATCH vfs-2.6 3/6] vfs: add __d_instantiate() helper\n\nThis adds __d_instantiate() for users which is already taking\ndcache_lock, and replace with it.\n\nThe part of d_add_ci() isn\u0027t equivalent. But it should be needed\nfsnotify_d_instantiate() actually, because the path is to add the\ninode to negative dentry.  fsnotify_d_instantiate() should be called\nafter change from negative to positive.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "e2761a1167633ed943fea29002f990194923d060",
      "tree": "e91816e85c7721fcff72e5f84336b1dde9d1ac17",
      "parents": [
        "871c0067d53ba2dc35897c7da1da675bf4c70511"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Thu Oct 16 07:50:28 2008 +0900"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Oct 23 05:13:16 2008 -0400"
      },
      "message": "[PATCH vfs-2.6 2/6] vfs: add d_ancestor()\n\nThis adds d_ancestor() instead of d_isparent(), then use it.\n\nIf new_dentry \u003d\u003d old_dentry, is_subdir() returns 1, looks strange.\n\"new_dentry \u003d\u003d old_dentry\" is not subdir obviously. But I\u0027m not\nchecking callers for now, so this keeps current behavior.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "871c0067d53ba2dc35897c7da1da675bf4c70511",
      "tree": "a76e6888d180a747df04155998bf8e595715da99",
      "parents": [
        "9fbb76ce0fe96c07c44ba2aec3dc99f4b8d2b9c6"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Thu Oct 16 07:50:27 2008 +0900"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Oct 23 05:13:16 2008 -0400"
      },
      "message": "[PATCH vfs-2.6 1/6] vfs: replace parent \u003d\u003d dentry-\u003ed_parent by IS_ROOT()\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "9308a6128d9074e348d9f9b5822546fe12a794a9",
      "tree": "3b67f8b6381162b9ff0800eee8722081ef9ed039",
      "parents": [
        "440037287c5ebb07033ab927ca16bb68c291d309"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Aug 11 15:49:12 2008 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Oct 23 05:13:02 2008 -0400"
      },
      "message": "[PATCH] kill d_alloc_anon\n\nRemove d_alloc_anon now that no users are left.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "440037287c5ebb07033ab927ca16bb68c291d309",
      "tree": "c4be3843ea87a777c2647f471895917005d8068f",
      "parents": [
        "4ea3ada2955e4519befa98ff55dd62d6dfbd1705"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Aug 11 15:49:04 2008 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Oct 23 05:13:01 2008 -0400"
      },
      "message": "[PATCH] switch all filesystems over to d_obtain_alias\n\nSwitch all users of d_alloc_anon to d_obtain_alias.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4ea3ada2955e4519befa98ff55dd62d6dfbd1705",
      "tree": "b473278d0df8d869d183fbc0e4a1a07585de240a",
      "parents": [
        "3a8cff4f026c0b98bee6291eb28d4df42feb76dc"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Aug 11 15:48:57 2008 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Oct 23 05:13:00 2008 -0400"
      },
      "message": "[PATCH] new helper: d_obtain_alias\n\nThe calling conventions of d_alloc_anon are rather unfortunate for all\nusers, and it\u0027s name is not very descriptive either.\n\nAdd d_obtain_alias as a new exported helper that drops the inode\nreference in the failure case, too and allows to pass-through NULL\npointers and inodes to allow for tail-calls in the export operations.\n\nIncidentally this helper already existed as a private function in\nlibfs.c as exportfs_d_alloc so kill that one and switch the callers\nto d_obtain_alias.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d0185c0882d76b8126d4a099c7ac82b3b216d103",
      "tree": "b43845a2f9872807466f206ea5fdca3c16c776fb",
      "parents": [
        "94715da3633d8abd63376b47c7120df59a69055e"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Sep 29 07:42:57 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Sep 29 07:42:57 2008 -0700"
      },
      "message": "Fix NULL pointer dereference in proc_sys_compare\n\nThe VFS interface for the \u0027d_compare()\u0027 is a bit special (read: \u0027odd\u0027),\nbecause it really just essentially replaces a memcmp().  The filesystem\nis supposed to just compare the two names with whatever case-independent\nor other function.\n\nAnd when I say \u0027is supposed to\u0027, I obviously mean that \u0027procfs does odd\nthings, and actually looks at the dentry that we don\u0027t even pass down,\nrather than just the name\u0027.  Which results in problems, because we\nactually call d_compare before we have even verified that the dentry is\nstill hashed at all.\n\nAnd that causes a problm since the inode that procfs looks at may have\nbeen free\u0027d and the d_inode pointer is NULL.  procfs just assumes that\nall dentries are positive, since procfs itself never generates a\nnegative one.  But memory pressure will still result in the dentry\ngetting torn down, and as it is removed by RCU, it still remains visible\non some lists - and to d_compare.\n\nIf the filesystem just did a name comparison, we wouldn\u0027t care.  And we\ncould just fix procfs to know about negative dentries too.  But rather\nthan have the low-level filesystems know about internal VFS details,\njust move the check for a unhashed dentry up a bit, so that we will only\ncall d_compare on dentries that are still active.\n\nThe actual oops this caused didn\u0027t look like a NULL pointer dereference\nbecause procfs did a \u0027container_of(inode, struct proc_inode, vfs_inode)\u0027\nto get at its internal proc_inode information from the inode pointer,\nand accessed a field below the inode. So the oops would look something\nlike\n\n\tBUG: unable to handle kernel paging request at fffffffffffffff0\n\tIP: [\u003cffffffff802bc6c6\u003e] proc_sys_compare+0x36/0x50\n\nand was seen on both x86-64 (Alexey Dobriyan and Hugh Dickins) and\nppc64 (Hugh Dickins).\n\nReported-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nAcked-by: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Al Viro \u003cviro@ZenIV.linux.org.uk\u003e\nReviewed-by: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nSigned-of-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e45b590b976465c258f3e2a6cc84573fc19e16d3",
      "tree": "54b795a1acd985b9bcc5adbe057706209a2612d3",
      "parents": [
        "2d8a10cd1760e7ecc07a21e409485947c68a3291"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Thu Aug 07 23:49:07 2008 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 25 01:18:05 2008 -0400"
      },
      "message": "[PATCH] change d_add_ci argument ordering\n\nAs pointed out during review d_add_ci argument order should match d_add,\nso switch the dentry and inode arguments.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9403540c0653122ca34884a180439ddbfcbcb524",
      "tree": "40b5fb192900c61a1c91be6ae8ea7432b61f18aa",
      "parents": [
        "6a178100abf01282eb697ab62b6086b2886dfc00"
      ],
      "author": {
        "name": "Barry Naujok",
        "email": "bnaujok@sgi.com",
        "time": "Wed May 21 16:50:46 2008 +1000"
      },
      "committer": {
        "name": "Niv Sardi",
        "email": "xaiki@debian.org",
        "time": "Mon Jul 28 16:58:39 2008 +1000"
      },
      "message": "dcache: Add case-insensitive support d_ci_add() routine\n\nThis add a dcache entry to the dcache for lookup, but changing the name\nthat is associated with the entry rather than the one passed in to the\nlookup routine.\n\nFirst, it sees if the case-exact match already exists in the dcache and\nuses it if one exists. Otherwise, it allocates a new node with the new\nname and splices it into the dcache.\n\nOriginal code from ntfs_lookup in fs/ntfs/namei.c by Anton Altaparmakov.\n\nSigned-off-by: Barry Naujok \u003cbnaujok@sgi.com\u003e\nSigned-off-by: Anton Altaparmakov \u003caia21@cantab.net\u003e\nAcked-by: Christoph Hellwig \u003chch@infradead.org\u003e\n"
    },
    {
      "commit": "f3c6ba986ab4527b6dfacf9f3b9e40f72466a8b2",
      "tree": "f240cc15f23afba6f987e6e61c41a04c30537040",
      "parents": [
        "a76eef9573c93f8f324ebacfd090a3e319a64d59"
      ],
      "author": {
        "name": "Kentaro Makita",
        "email": "k-makita@np.css.fujitsu.com",
        "time": "Fri Jul 25 19:44:40 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jul 26 12:00:02 2008 -0700"
      },
      "message": "vfs: add cond_resched_lock while scanning dentry LRU lists\n\nAdd cond_resched_lock(\u0026dcache_lock) while scanning LRU lists on\nsuperblocks in __shrink_dcache_sb()\n\nSigned-off-by: Kentaro Makita \u003ck-makita@np.css.fujitsu.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "da3bbdd4632c0171406b2677e31494afa5bde2f8",
      "tree": "6a1947b2a32041ef0d14044e659ba7d546d55483",
      "parents": [
        "3c82d0ce2c4f642b2f24ef98707a030543b06b90"
      ],
      "author": {
        "name": "Kentaro Makita",
        "email": "k-makita@np.css.fujitsu.com",
        "time": "Wed Jul 23 21:27:13 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:15 2008 -0700"
      },
      "message": "fix soft lock up at NFS mount via per-SB LRU-list of unused dentries\n\n[Summary]\n\n Split LRU-list of unused dentries to one per superblock to avoid soft\n lock up during NFS mounts and remounting of any filesystem.\n\n Previously I posted here:\n http://lkml.org/lkml/2008/3/5/590\n\n[Descriptions]\n\n- background\n\n  dentry_unused is a list of dentries which are not referenced.\n  dentry_unused grows up when references on directories or files are\n  released.  This list can be very long if there is huge free memory.\n\n- the problem\n\n  When shrink_dcache_sb() is called, it scans all dentry_unused linearly\n  under spin_lock(), and if dentry-\u003ed_sb is differnt from given\n  superblock, scan next dentry.  This scan costs very much if there are\n  many entries, and very ineffective if there are many superblocks.\n\n  IOW, When we need to shrink unused dentries on one dentry, but scans\n  unused dentries on all superblocks in the system.  For example, we scan\n  500 dentries to unmount a filesystem, but scans 1,000,000 or more unused\n  dentries on other superblocks.\n\n  In our case , At mounting NFS*, shrink_dcache_sb() is called to shrink\n  unused dentries on NFS, but scans 100,000,000 unused dentries on\n  superblocks in the system such as local ext3 filesystems.  I hear NFS\n  mounting took 1 min on some system in use.\n\n* : NFS uses virtual filesystem in rpc layer, so NFS is affected by\n  this problem.\n\n  100,000,000 is possible number on large systems.\n\n  Per-superblock LRU of unused dentried can reduce the cost in\n  reasonable manner.\n\n- How to fix\n\n  I found this problem is solved by David Chinner\u0027s \"Per-superblock\n  unused dentry LRU lists V3\"(1), so I rebase it and add some fix to\n  reclaim with fairness, which is in Andrew Morton\u0027s comments(2).\n\n  1) http://lkml.org/lkml/2006/5/25/318\n  2) http://lkml.org/lkml/2006/5/25/320\n\n  Split LRU-list of unused dentries to each superblocks.  Then, NFS\n  mounting will check dentries under a superblock instead of all.  But\n  this spliting will break LRU of dentry-unused.  So, I\u0027ve attempted to\n  make reclaim unused dentrins with fairness by calculate number of\n  dentries to scan on this sb based on following way\n\n  number of dentries to scan on this sb \u003d\n  count * (number of dentries on this sb / number of dentries in the machine)\n\n- ToDo\n - I have to measuring performance number and do stress tests.\n\n - When unmount occurs during prune_dcache(), scanning on same\n  superblock, It is unable to reach next superblock because it is gone\n  away.  We restart scannig superblock from first one, it causes\n  unfairness of reclaim unused dentries on first superblock.  But I think\n  this happens very rarely.\n\n- Test Results\n\n  Result on 6GB boxes with excessive unused dentries.\n\nWithout patch:\n\n$ cat /proc/sys/fs/dentry-state\n10181835        10180203        45      0       0       0\n# mount -t nfs 10.124.60.70:/work/kernel-src nfs\nreal    0m1.830s\nuser    0m0.001s\nsys     0m1.653s\n\n With this patch:\n$ cat /proc/sys/fs/dentry-state\n10236610        10234751        45      0       0       0\n# mount -t nfs 10.124.60.70:/work/kernel-src nfs\nreal    0m0.106s\nuser    0m0.002s\nsys     0m0.032s\n\n[akpm@linux-foundation.org: fix comments]\nSigned-off-by: Kentaro Makita \u003ck-makita@np.css.fujitsu.com\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nCc: David Chinner \u003cdgc@sgi.com\u003e\nCc: \"J. Bruce Fields\" \u003cbfields@fieldses.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cdd16d0265c9234228fd37fbbad844d7e894b278",
      "tree": "ba9ec59f49465c1a31143be0927106ef16de12df",
      "parents": [
        "31f3e0b3a18c6d48196c40a82a3b8c01f4ff6b23"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Jun 23 18:11:53 2008 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 23 13:07:00 2008 -0400"
      },
      "message": "[patch 2/3] vfs: dcache cleanups\n\nComment from Al Viro: add prepend_name() wrapper.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "31f3e0b3a18c6d48196c40a82a3b8c01f4ff6b23",
      "tree": "3ff97fb1fbe50a3e37e4a18d68b4720d509e99c5",
      "parents": [
        "be285c712bbbe5db43e503782fbef2bfeaa345f9"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Jun 23 18:11:52 2008 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 23 13:06:36 2008 -0400"
      },
      "message": "[patch 1/3] vfs: dcache sparse fixes\n\nFix the following sparse warnings:\n\nfs/dcache.c:2183:19: warning: symbol \u0027filp_cachep\u0027 was not declared. Should it be static?\nfs/dcache.c:115:3: warning: context imbalance in \u0027dentry_iput\u0027 - unexpected unlock\nfs/dcache.c:188:2: warning: context imbalance in \u0027dput\u0027 - different lock contexts for basic block\nfs/dcache.c:400:2: warning: context imbalance in \u0027prune_one_dentry\u0027 - different lock contexts for basic block\nfs/dcache.c:431:22: warning: context imbalance in \u0027prune_dcache\u0027 - different lock contexts for basic block\nfs/dcache.c:563:2: warning: context imbalance in \u0027shrink_dcache_sb\u0027 - different lock contexts for basic block\nfs/dcache.c:1385:6: warning: context imbalance in \u0027d_delete\u0027 - wrong count at exit\nfs/dcache.c:1636:2: warning: context imbalance in \u0027__d_unalias\u0027 - unexpected unlock\nfs/dcache.c:1735:2: warning: context imbalance in \u0027d_materialise_unique\u0027 - different lock contexts for basic block\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nReviewed-by: Matthew Wilcox \u003cwilly@linux.intel.com\u003e\nAcked-by: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    }
  ],
  "next": "be285c712bbbe5db43e503782fbef2bfeaa345f9"
}
