)]}'
{
  "log": [
    {
      "commit": "32ba9c3fcab960f0b0d332c86ebcd2c4870d9bb8",
      "tree": "cd3638359e7a635dc15856559ac01b14196c4ff7",
      "parents": [
        "0b35d326f813a654f0cd40f513bd95e3935921c1"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 08 10:34:03 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 08 10:34:03 2012 -0700"
      },
      "message": "Revert \"vfs: stop d_splice_alias creating directory aliases\"\n\nThis reverts commit 7732a557b1342c6e6966efb5f07effcf99f56167 (and commit\n3f50fff4dace23d3cfeb195d5cd4ee813cee68b7, which was a follow-up\ncleanup).\n\nWe\u0027re chasing an elusive bug that Dave Jones can apparently reproduce\nusing his system call fuzzer tool, and that looks like some kind of\nlocking ordering problem on the directory i_mutex chain.  Our i_mutex\nlocking is rather complex, and depends on the topological ordering of\nthe directories, which is why we have been very wary of splicing\ndirectory entries around.\n\nOf course, we really don\u0027t want to ever see aliased unconnected\ndirectories anyway, so none of this should ever happen, but this revert\naims to basically get us back to a known older state.\n\nBruce points to some of the previous discussion at\n\n       http://marc.info/?i\u003d\u003c20110310105821.GE22723@ZenIV.linux.org.uk\u003e\n\nand in particular a long post from Neil:\n\n       http://marc.info/?i\u003d\u003c20110311150749.2fa2be66@notabene.brown\u003e\n\nIt should be noted that it\u0027s possible that Dave\u0027s problems come from\nother changes altohgether, including possibly just the fact that Dave\nconstantly is teachning his fuzzer new tricks.  So what appears to be a\nnew bug could in fact be an old one that just gets newly triggered, but\nreverting these patches as \"still under heavy discussion\" is the right\nthing regardless.\n\nRequested-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nAcked-by: J. Bruce Fields \u003cbfields@fieldses.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3f50fff4dace23d3cfeb195d5cd4ee813cee68b7",
      "tree": "4c95b5a398ae4df5dbd99a8dd9dd1d060dfc38ef",
      "parents": [
        "7732a557b1342c6e6966efb5f07effcf99f56167"
      ],
      "author": {
        "name": "J. Bruce Fields",
        "email": "bfields@redhat.com",
        "time": "Wed May 09 17:18:06 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed May 30 21:04:54 2012 -0400"
      },
      "message": "vfs: remove unused __d_splice_alias argument\n\nNobody sets want_disconn any more.\n\nReported-by: Peng Tao \u003cbergwolf@gmail.com\u003e\nSigned-off-by: J. Bruce Fields \u003cbfields@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7732a557b1342c6e6966efb5f07effcf99f56167",
      "tree": "d947f3aa85c11e426f48509ec52f351a74815cb9",
      "parents": [
        "244ca2b4d0b5e500681e52ad9e6d7f3f2b9362a1"
      ],
      "author": {
        "name": "J. Bruce Fields",
        "email": "bfields@redhat.com",
        "time": "Wed May 09 17:18:05 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed May 30 21:04:54 2012 -0400"
      },
      "message": "vfs: stop d_splice_alias creating directory aliases\n\nA directory should never have more than one dentry pointing to it.\n\nBut d_splice_alias() will add one if it finds a directory with an\nalready-existing non-DISCONNECTED dentry.\n\nI can\u0027t find an obvious reproducer, but I also can\u0027t see what prevents\nd_splice_alias() from encountering such a case.\n\nIt therefore seems safest to allow d_splice_alias to use any dentry it\nfinds.\n\n(Prior to the removal of dentry_unhash() from vfs_rmdir(), around v3.0,\nthis could cause an nfsd deadlock like this:\n\n\t- Somebody attempts to remove a non-empty directory.\n\t- The dentry_unhash() in vfs_rmdir() unhashes the dentry\n\t  pointing to the non-empty directory.\n\t- -\u003ermdir() then fails with -ENOTEMPTY\n\t- Before the vfs_rmdir() caller reaches dput(), an nfsd process\n\t  in rename looks up the directory by filehandle; at the end of\n\t  that lookup, this dentry is found by d_alloc_anon(), and a\n\t  reference is taken on it, preventing dput() from removing it.\n\t- A regular lookup of the directory calls d_splice_alias(),\n\t  finds only an unhashed (not a DISCONNECTED) dentry, and\n\t  insteads adds a new one, so the directory now has two\n\t  dentries.\n\t- The nfsd process in rename, which was previously looking up\n\t  the source directory of the rename, now looks up the target\n\t  directory (which is the same), and gets the dentry newly\n\t  created by the previous lookup.\n\t- The rename, seeing two different dentries, assumes this is a\n\t  cross-directory rename and attempts to take the i_mutex on the\n\t  directory twice.\n\nThat reproducer no longer exists, but I don\u0027t think there was anything\nfundamentally incorrect about the vfs_rmdir() behavior there, so I think\nthe real fault was here in d_splice_alias().)\n\nSigned-off-by: J. Bruce Fields \u003cbfields@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "962830df366b66e71849040770ae6ba55a8b4aec",
      "tree": "0af9487fd8d5a73fa7adbde0bed368ada4298e39",
      "parents": [
        "eea62f831b8030b0eeea8314eed73b6132d1de26"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Tue May 08 13:32:02 2012 +0930"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue May 29 23:28:41 2012 -0400"
      },
      "message": "brlocks/lglocks: API cleanups\n\nlglocks and brlocks are currently generated with some complicated macros\nin lglock.h.  But there\u0027s no reason to not just use common utility\nfunctions and put all the data into a common data structure.\n\nIn preparation, this patch changes the API to look more like normal\nfunction calls with pointers, not magic macros.\n\nThe patch is rather large because I move over all users in one go to keep\nit bisectable.  This impacts the VFS somewhat in terms of lines changed.\nBut no actual behaviour change.\n\n[akpm@linux-foundation.org: checkpatch fixes]\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "31fe62b9586643953f0c0c37a6357dafc69034e2",
      "tree": "69f9990423969df4ecbaea9d1e8de748284bea5e",
      "parents": [
        "d0a24a3516fb36023bef28d2355fa34e7f32029f"
      ],
      "author": {
        "name": "Tim Bird",
        "email": "tim.bird@am.sony.com",
        "time": "Wed May 23 13:33:35 2012 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu May 24 00:28:21 2012 -0400"
      },
      "message": "mm: add a low limit to alloc_large_system_hash\n\nUDP stack needs a minimum hash size value for proper operation and also\nuses alloc_large_system_hash() for proper NUMA distribution of its hash\ntables and automatic sizing depending on available system memory.\n\nOn some low memory situations, udp_table_init() must ignore the\nalloc_large_system_hash() result and reallocs a bigger memory area.\n\nAs we cannot easily free old hash table, we leak it and kmemleak can\nissue a warning.\n\nThis patch adds a low limit parameter to alloc_large_system_hash() to\nsolve this problem.\n\nWe then specify UDP_HTABLE_SIZE_MIN for UDP/UDPLite hash table\nallocation.\n\nReported-by: Mark Asselstine \u003cmark.asselstine@windriver.com\u003e\nReported-by: Tim Bird \u003ctim.bird@am.sony.com\u003e\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "2e321806b681b1920b6dfa7d81bbe3d312fe1d19",
      "tree": "ba9d8b2e4ac401ef1ce0ac86662af2e032584485",
      "parents": [
        "c23ddf7857bdb2e8001b0a058603497c765a580d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon May 21 18:48:10 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon May 21 18:48:10 2012 -0700"
      },
      "message": "Revert \"vfs: remove unnecessary d_unhashed() check from __d_lookup_rcu\"\n\nThis reverts commit 8c01a529b861ba97c7d78368e6a5d4d42e946f75.\n\nIt turns out the d_unhashed() check isn\u0027t unnecessary after all: while\nit\u0027s true that unhashing will increment the sequence numbers, that does\nnot necessarily invalidate the RCU lookup, because it might have seen\nthe dentry pointer (before it got unhashed), but by the time it loaded\nthe sequence number, it could have seen the *new* sequence number (after\nit got unhashed).\n\nEnd result: we might look up an unhashed dentry that is about to be\nfreed, with the sequence number never indicating anything bad about it.\nSo checking that the dentry is still hashed (*after* reading the sequence\nnumber) is indeed the proper fix, and was never unnecessary.\n\nReported-by: Dave Jones \u003cdavej@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6326c71fd2fb3bef5fa33951479298b683da35fe",
      "tree": "6bccc510bc127380439d2ac922fea5ec3ec6927d",
      "parents": [
        "a70b52ec1aaeaf60f4739edb1b422827cb6f3893"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon May 21 16:14:04 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon May 21 16:14:04 2012 -0700"
      },
      "message": "vfs: be even more careful about dentry RCU name lookups\n\nMiklos Szeredi points out that we need to also worry about memory\nodering when doing the dentry name comparison asynchronously with RCU.\n\nIn particular, doing a rename can do a memcpy() of one dentry name over\nanother, and we want to make sure that any unlocked reader will always\nsee the proper terminating NUL character, so that it won\u0027t ever run off\nthe allocation.\n\nRather than having to be extra careful with the name copy or at lookup\ntime for each character, this resolves the issue by making sure that all\nnames that are inlined in the dentry always have a NUL character at the\nend of the name allocation.  If we do that at dentry allocation time, we\nknow that no future name copy will ever change that final NUL to\nanything else, so there are no memory ordering issues.\n\nSo even if a concurrent rename ends up overwriting the NUL character\nthat terminates the original name, we always know that there is one\nfinal NUL at the end, and there is no worry about the lockless RCU\nlookup traversing the name too far.\n\nThe out-of-line allocations are never copied over, so we can just make\nsure that we write the name (with terminating NULL) and do a write\nbarrier before we expose the name to anything else by setting it in the\ndentry.\n\nReported-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Nick Piggin \u003cnpiggin@gmail.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "26fe575028703948880fce4355a210c76bb0536e",
      "tree": "0a7d04289e1eb1f1739659ebc9498d40f2add5da",
      "parents": [
        "ee983e89670704b2a05e897b161f2674a42d1508"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 10 13:14:12 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 10 19:54:35 2012 -0700"
      },
      "message": "vfs: make it possible to access the dentry hash/len as one 64-bit entry\n\nThis allows comparing hash and len in one operation on 64-bit\narchitectures.  Right now only __d_lookup_rcu() takes advantage of this,\nsince that is the case we care most about.\n\nThe use of anonymous struct/unions hides the alternate 64-bit approach\nfrom most users, the exception being a few cases where we initialize a\n\u0027struct qstr\u0027 with a static initializer.  This makes the problematic\ncases use a new QSTR_INIT() helper function for that (but initializing\njust the name pointer with a \"{ .name \u003d xyzzy }\" initializer remains\nvalid, as does just copying another qstr structure).\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ee983e89670704b2a05e897b161f2674a42d1508",
      "tree": "51b96ffafd9e2496f8a7cf550245850d5a7a5929",
      "parents": [
        "94753db5ed9ad97582ef453127d9626a7a2be602"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 10 12:37:10 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 10 19:54:35 2012 -0700"
      },
      "message": "vfs: move dentry name length comparison from dentry_cmp() into callers\n\nAll callers do want to check the dentry length, but some of them can\ncheck the length and the hash together, so doing it in dentry_cmp() can\nbe counter-productive.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "94753db5ed9ad97582ef453127d9626a7a2be602",
      "tree": "ebf9b6cce17c3f4348a598988cb398a9807b3db7",
      "parents": [
        "8c01a529b861ba97c7d78368e6a5d4d42e946f75"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 10 12:19:19 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 10 19:54:09 2012 -0700"
      },
      "message": "vfs: do the careful dentry name access for all dentry_cmp cases\n\nCommit 12f8ad4b0533 (\"vfs: clean up __d_lookup_rcu() and dentry_cmp()\ninterfaces\") did the careful ACCESS_ONCE() of the dentry name only for\nthe word-at-a-time case, even though the issue is generic.\n\nAdmittedly I don\u0027t really see gcc ever reloading the value in the middle\nof the loop, so the ACCESS_ONCE() protects us from a fairly theoretical\nissue. But better safe than sorry.\n\nAlso, this consolidates the common parts of the word-at-a-time and\nbytewise logic, which includes checking the length.  We\u0027ll be changing\nthat later.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8c01a529b861ba97c7d78368e6a5d4d42e946f75",
      "tree": "933b5a95604674d0534b0290d8c3633425989f62",
      "parents": [
        "12f8ad4b0533d9212cb1d5e58ed73d2170114785"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 10 11:06:18 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 10 19:52:35 2012 -0700"
      },
      "message": "vfs: remove unnecessary d_unhashed() check from __d_lookup_rcu\n\nThe check for d_unhashed() is not strictly incorrect, but at the same\ntime it is also not sensible.  The actual dentry removal from the dentry\nhash chains is totally asynchronous to the __d_lookup_rcu() logic, and\nwe depend on __d_drop() updating the sequence number to invalidate any\nlookup of an unhashed dentry.\n\nSo checking d_unhashed() is not incorrect, but it\u0027s not useful either:\nthe code has to work correctly even without it. So just remove it.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "12f8ad4b0533d9212cb1d5e58ed73d2170114785",
      "tree": "6bab87d6d25b2ea246904aeabc3692e03c89b923",
      "parents": [
        "4f988f152ee087831ea5c1c77cda4454cacc052c"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 04 14:59:14 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 04 18:21:14 2012 -0700"
      },
      "message": "vfs: clean up __d_lookup_rcu() and dentry_cmp() interfaces\n\nThe calling conventions for __d_lookup_rcu() and dentry_cmp() are\nannoying in different ways, and there is actually one single underlying\nreason for both of the annoyances.\n\nThe fundamental reason is that we do the returned dentry sequence number\ncheck inside __d_lookup_rcu() instead of doing it in the caller.  This\nresults in two annoyances:\n\n - __d_lookup_rcu() now not only needs to return the dentry and the\n   sequence number that goes along with the lookup, it also needs to\n   return the inode pointer that was validated by that sequence number\n   check.\n\n - and because we did the sequence number check early (to validate the\n   name pointer and length) we also couldn\u0027t just pass the dentry itself\n   to dentry_cmp(), we had to pass the counted string that contained the\n   name.\n\nSo that sequence number decision caused two separate ugly calling\nconventions.\n\nBoth of these problems would be solved if we just did the sequence\nnumber check in the caller instead.  There\u0027s only one caller, and that\ncaller already has to do the sequence number check for the parent\nanyway, so just do that.\n\nThat allows us to stop returning the dentry-\u003ed_inode in that in-out\nargument (pointer-to-pointer-to-inode), so we can make the inode\nargument just a regular input inode pointer.  The caller can just load\nthe inode from dentry-\u003ed_inode, and then do the sequence number check\nafter that to make sure that it\u0027s synchronized with the name we looked\nup.\n\nAnd it allows us to just pass in the dentry to dentry_cmp(), which is\nwhat all the callers really wanted.  Sure, dentry_cmp() has to be a bit\ncareful about the dentry (which is not stable during RCU lookup), but\nthat\u0027s actually very simple.\n\nAnd now that dentry_cmp() can clearly see that the first string argument\nis a dentry, we can use the direct word access for that, instead of the\ncareful unaligned zero-padding.  The dentry name is always properly\naligned, since it is a single path component that is either embedded\ninto the dentry itself, or was allocated with kmalloc() (see __d_alloc).\n\nFinally, this also uninlines the nasty slow-case for dentry comparisons:\nthat one *does* need to do a sequence number check, since it will call\nin to the low-level filesystems, and we want to give those a stable\ninode pointer and path component length/start arguments.  Doing an extra\nsequence check for that slow case is not a problem, though.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e419b4cc585680940bc42f8ca8a071d6023fb1bb",
      "tree": "8fce0f12b7b2a0fdca7a937af137910011efa783",
      "parents": [
        "ac001e76546523ec2ef05b2f7001d8fdc588d069"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 03 10:16:43 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 03 14:01:40 2012 -0700"
      },
      "message": "vfs: make word-at-a-time accesses handle a non-existing page\n\nIt turns out that there are more cases than CONFIG_DEBUG_PAGEALLOC that\ncan have holes in the kernel address space: it seems to happen easily\nwith Xen, and it looks like the AMD gart64 code will also punch holes\ndynamically.\n\nActually hitting that case is still very unlikely, so just do the\naccess, and take an exception and fix it up for the very unlikely case\nof it being a page-crosser with no next page.\n\nAnd hey, this abstraction might even help other architectures that have\nother issues with unaligned word accesses than the possible missing next\npage.  IOW, this could do the byte order magic too.\n\nPeter Anvin fixed a thinko in the shifting for the exception case.\n\nReported-and-tested-by: Jana Saout \u003cjana@saout.de\u003e\nCc:  Peter Anvin \u003chpa@zytor.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b18dafc86bb879d2f38a1743985d7ceb283c2f4d",
      "tree": "447070f77406615aebadaef03018d634c0da922c",
      "parents": [
        "6658a6991cef75719a21441aa0b7f8d6821534ee"
      ],
      "author": {
        "name": "Michel Lespinasse",
        "email": "walken@google.com",
        "time": "Mon Mar 26 17:32:44 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 28 09:54:34 2012 -0700"
      },
      "message": "vfs: fix d_ancestor() case in d_materialize_unique\n\nIn d_materialise_unique() there are 3 subcases to the \u0027aliased dentry\u0027\ncase; in two subcases the inode i_lock is properly released but this\ndoes not occur in the -ELOOP subcase.\n\nThis seems to have been introduced by commit 1836750115f2 (\"fix loop\nchecks in d_materialise_unique()\").\n\nSigned-off-by: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: stable@vger.kernel.org # v3.0+\n[ Added a comment, and moved the unlock to where we generate the -ELOOP,\n  which seems to be more natural.\n\n  You probably can\u0027t actually trigger this without a buggy network file\n  server - d_materialize_unique() is for finding aliases on non-local\n  filesystems, and the d_ancestor() case is for a hardlinked directory\n  loop.\n\n  But we should be robust in the case of such buggy servers anyway. ]\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "11bcb32848ddb5ab28f09f142b625e2ba4d55c4c",
      "tree": "9a2c085e1fce41012bb0f2a340f6ceaaf616b7a0",
      "parents": [
        "ed2d265d1266736bd294332d7f649003943ae36e",
        "8bc3bcc93a2b4e47d5d410146f6546bca6171663"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 24 10:24:31 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 24 10:24:31 2012 -0700"
      },
      "message": "Merge tag \u0027module-for-3.4\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux\n\nPull cleanup of fs/ and lib/ users of module.h from Paul Gortmaker:\n \"Fix up files in fs/ and lib/ dirs to only use module.h if they really\n  need it.\n\n  These are trivial in scope vs the work done previously.  We now have\n  things where any few remaining cleanups can be farmed out to arch or\n  subsystem maintainers, and I have done so when possible.  What is\n  remaining here represents the bits that don\u0027t clearly lie within a\n  single arch/subsystem boundary, like the fs dir and the lib dir.\n\n  Some duplicate includes arising from overlapping fixes from\n  independent subsystem maintainer submissions are also quashed.\"\n\nFix up trivial conflicts due to clashes with other include file cleanups\n(including some due to the previous bug.h cleanup pull).\n\n* tag \u0027module-for-3.4\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux:\n  lib: reduce the use of module.h wherever possible\n  fs: reduce the use of module.h wherever possible\n  includecheck: delete any duplicate instances of module.h\n"
    },
    {
      "commit": "1f1e6e523e43e312c0e0d38c09828d53e9f709fc",
      "tree": "8bf08328cb84dff0bc7a120a1606547e1938cbbd",
      "parents": [
        "f132c5be05e407a99cf582347a2ae0120acd3ad7"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "rdunlap@xenotime.net",
        "time": "Sun Mar 18 21:23:05 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 22 15:49:18 2012 -0700"
      },
      "message": "fs: fix kernel-doc warnings in dcache.c\n\nFix kernel-doc warnings in fs/dcache.c:\n\n  Warning(fs/dcache.c:1743): No description found for parameter \u0027seqp\u0027\n  Warning(fs/dcache.c:1743): Excess function parameter \u0027seq\u0027 description in \u0027__d_lookup_rcu\u0027\n\nSigned-off-by: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e2a0883e4071237d09b604a342c28b96b44a04b3",
      "tree": "aa56f4d376b5eb1c32358c19c2669c2a94e0e1fd",
      "parents": [
        "3a990a52f9f25f45469e272017a31e7a3fda60ed",
        "07c0c5d8b8c122b2f2df9ee574ac3083daefc981"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 13:36:41 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 13:36:41 2012 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs\n\nPull vfs pile 1 from Al Viro:\n \"This is _not_ all; in particular, Miklos\u0027 and Jan\u0027s stuff is not there\n  yet.\"\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (64 commits)\n  ext4: initialization of ext4_li_mtx needs to be done earlier\n  debugfs-related mode_t whack-a-mole\n  hfsplus: add an ioctl to bless files\n  hfsplus: change finder_info to u32\n  hfsplus: initialise userflags\n  qnx4: new helper - try_extent()\n  qnx4: get rid of qnx4_bread/qnx4_getblk\n  take removal of PF_FORKNOEXEC to flush_old_exec()\n  trim includes in inode.c\n  um: uml_dup_mmap() relies on -\u003emmap_sem being held, but activate_mm() doesn\u0027t hold it\n  um: embed -\u003estub_pages[] into mmu_context\n  gadgetfs: list_for_each_safe() misuse\n  ocfs2: fix leaks on failure exits in module_init\n  ecryptfs: make register_filesystem() the last potential failure exit\n  ntfs: forgets to unregister sysctls on register_filesystem() failure\n  logfs: missing cleanup on register_filesystem() failure\n  jfs: mising cleanup on register_filesystem() failure\n  make configfs_pin_fs() return root dentry on success\n  configfs: configfs_create_dir() has parent dentry in dentry-\u003ed_parent\n  configfs: sanitize configfs_create()\n  ...\n"
    },
    {
      "commit": "32991ab305ace7017c62f8eecbe5eb36dc32e13b",
      "tree": "7a802091fa9f152f38577a4eeaa24937c4b4b2c9",
      "parents": [
        "318ceed088497d1ca839b1172518ac4cc7096b82"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Feb 12 22:15:47 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 20 21:29:37 2012 -0400"
      },
      "message": "vfs: d_alloc_root() gone\n\nall callers converted to d_make_root() by now\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b0e37d7ac6ba937c3776ff5111ff6a7fa832fb4f",
      "tree": "fdb86783c464825a77223e49cc24f632e319d2df",
      "parents": [
        "6d7d1a0dc735ea8412769edae7154885021107a9",
        "bfcfaa77bdf0f775263e906015982a608df01c76"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 19 16:37:28 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 19 16:37:28 2012 -0700"
      },
      "message": "Merge branch \u0027dcache-word-accesses\u0027\n\n* branch \u0027dcache-word-accesses\u0027:\n  vfs: use \u0027unsigned long\u0027 accesses for dcache name comparison and hashing\n\nThis does the name hashing and lookup using word-sized accesses when\nthat is efficient, namely on x86 (although any little-endian machine\nwith good unaligned accesses would do).\n\nIt does very much depend on little-endian logic, but it\u0027s a very hot\ncouple of functions under some real loads, and this patch improves the\nperformance of __d_lookup_rcu() and link_path_walk() by up to about 30%.\nGiving a 10% improvement on some very pathname-heavy benchmarks.\n\nBecause we do make unaligned accesses past the filename, the\noptimization is disabled when CONFIG_DEBUG_PAGEALLOC is active, and we\neffectively depend on the fact that on x86 we don\u0027t really ever have the\nlast page of usable RAM followed immediately by any IO memory (due to\nACPI tables, BIOS buffer areas etc).\n\nSome of the bit operations we do are a bit \"subtle\".  It\u0027s commented,\nbut you do need to really think about the code.  Or just consider it\nblack magic.\n\nThanks to people on G+ for some of the optimized bit tricks.\n"
    },
    {
      "commit": "6d7d1a0dc735ea8412769edae7154885021107a9",
      "tree": "9ccf7b36be77b61cdb1491f262be95592c731858",
      "parents": [
        "c16fa4f2ad19908a47c63d8fa436a1178438c7e7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 19 16:19:53 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 19 16:19:53 2012 -0700"
      },
      "message": "vfs: get rid of batshit-insane pointless dentry hash calculations\n\nFor some odd historical reason, the final mixing round for the dentry\ncache hash table lookup had an insane \"xor with big constant\" logic.  In\ntwo places.\n\nThe big constant that is being xor\u0027ed is GOLDEN_RATIO_PRIME, which is a\nfairly random-looking number that is designed to be *multiplied* with so\nthat the bits get spread out over a whole long-word.\n\nBut xor\u0027ing with it is insane.  It doesn\u0027t really even change the hash -\nit really only shifts the hash around in the hash table.  To make\nmatters worse, the insane big constant is different on 32-bit and 64-bit\nbuilds, even though the name hash bits we use are always 32-bit (and the\nbits from the pointer we mix in effectively are too).\n\nIt\u0027s all total voodoo programming, in other words.\n\nNow, some testing and analysis of the hash chains shows that the rest of\nthe hash function seems to be fairly good.  It does pick the right bits\nof the parent dentry pointer, for example, and while it\u0027s generally a\nbad idea to use an xor to mix down the upper bits (because if there is a\nrepeating pattern, the xor can cause \"destructive interference\"), it\nseems to not have been a disaster.\n\nFor example, replacing the hash with the normal \"hash_long()\" code (that\nuses the GOLDEN_RATIO_PRIME constant correctly, btw) actually just makes\nthe hash worse.  The hand-picked hash knew which bits of the pointer had\nthe highest entropy, and hash_long() ends up mixing bits less optimally\nat least in some trivial tests.\n\nSo the hash function overall seems fine, it just has that really odd\n\"shift result around by a constant xor\".\n\nSo get rid of the silly xor, and replace the down-mixing of the bits\nwith an add instead of an xor that tends to not have the same kind of\ndestructive interference issues.  Some stats on the resulting hash\nchains shows that they look statistically identical before and after,\nbut the code is simpler and no longer makes you go \"WTF?\".\n\nAlso, the incoming hash really is just \"unsigned int\", not a long, and\nthere\u0027s no real point to worry about the high 26 bits of the dentry\npointer for the 64-bit case, because they are all going to be identical\nanyway.\n\nSo also change the hashing to be done in the more natural \u0027unsigned int\u0027\nthat is the real size of the actual hashed data anyway.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bfcfaa77bdf0f775263e906015982a608df01c76",
      "tree": "6671137d4af157b851d953b7e2809abbfa809e81",
      "parents": [
        "9f8050c4f99789d03ca96d4e625bd6637241828f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 06 11:16:17 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 08 18:08:44 2012 -0800"
      },
      "message": "vfs: use \u0027unsigned long\u0027 accesses for dcache name comparison and hashing\n\nOk, this is hacky, and only works on little-endian machines with goo\nunaligned handling.  And even then only with CONFIG_DEBUG_PAGEALLOC\ndisabled, since it can access up to 7 bytes after the pathname.\n\nBut it runs like a bat out of hell.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5483f18e986ed5267b923bec12b407845181350b",
      "tree": "732959579f2439c5787c22250bfba5533a54232c",
      "parents": [
        "192cfd58774b4d17b2fe8bdc77d89c2ef4e0591d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Mar 04 15:51:42 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Mar 04 15:51:42 2012 -0800"
      },
      "message": "vfs: move dentry_cmp from \u003clinux/dcache.h\u003e to fs/dcache.c\n\nIt\u0027s only used inside fs/dcache.c, and we\u0027re going to play games with it\nfor the word-at-a-time patches.  This time we really don\u0027t even want to\nexport it, because it really is an internal function to fs/dcache.c, and\nhas been since it was introduced.\n\nHaving it in that extremely hot header file (it\u0027s included in pretty\nmuch everything, thanks to \u003clinux/fs.h\u003e) is a disaster for testing\ndifferent versions, and is utterly pointless.\n\nWe really should have some kind of header file diet thing, where we\nfigure out which parts of header files are really better off private and\nonly result in more expensive compiles.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8966be90304b394fd6a2c5af7b6b3abe2df3889c",
      "tree": "9893ca0f2e1c97d4ed5d37fee8502a77f0c3b7d2",
      "parents": [
        "2273d5ccb882106a74c7b780a6bfa16fb210cd24"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 02 14:23:30 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 02 14:23:30 2012 -0800"
      },
      "message": "vfs: trivial __d_lookup_rcu() cleanups\n\nThese don\u0027t change any semantics, but they clean up the code a bit and\nmark some arguments appropriately \u0027const\u0027.\n\nThey came up as I was doing the word-at-a-time dcache name accessor\ncode, and cleaning this up now allows me to send out a smaller relevant\ninteresting patch for the experimental stuff.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "630d9c47274aa89bfa77fe6556d7818bdcb12992",
      "tree": "501b418c3c89d4c80113aa2fdbbc917eedacd2d4",
      "parents": [
        "13ae246db4a02971ef4f557af1f6d3e21d64b710"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Wed Nov 16 23:57:37 2011 -0500"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Tue Feb 28 19:31:58 2012 -0500"
      },
      "message": "fs: reduce the use of module.h wherever possible\n\nFor files only using THIS_MODULE and/or EXPORT_SYMBOL, map\nthem onto including export.h -- or if the file isn\u0027t even\nusing those, then just delete the include.  Fix up any implicit\ninclude dependencies that were being masked by module.h along\nthe way.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "074b85175a43a23fdbde60f55feea636e0bf0f85",
      "tree": "e6f6fdd82854b2bf25ea5b404cee010806a8fced",
      "parents": [
        "1d6f2097865e64963e90cce04980dce2f9fc023f"
      ],
      "author": {
        "name": "Dimitri Sivanich",
        "email": "sivanich@sgi.com",
        "time": "Wed Feb 08 12:39:07 2012 -0800"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Feb 13 20:45:38 2012 -0500"
      },
      "message": "vfs: fix panic in __d_lookup() with high dentry hashtable counts\n\nWhen the number of dentry cache hash table entries gets too high\n(2147483648 entries), as happens by default on a 16TB system, use of a\nsigned integer in the dcache_init() initialization loop prevents the\ndentry_hashtable from getting initialized, causing a panic in\n__d_lookup().  Fix this in dcache_init() and similar areas.\n\nSigned-off-by: Dimitri Sivanich \u003csivanich@sgi.com\u003e\nAcked-by: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1a52bb0b686844021597d190e562ab55d1210104",
      "tree": "7edf13509869a6a7f1f488a679f15ff6c3057c54",
      "parents": [
        "8638094e956a47dbb9a25166705a91e9a0981d52",
        "83eb26af0db71f2dfe551405c55d982288fa6178"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 13 10:29:21 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 13 10:29:21 2012 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:\n  ceph: ensure prealloc_blob is in place when removing xattr\n  rbd: initialize snap_rwsem in rbd_add()\n  ceph: enable/disable dentry complete flags via mount option\n  vfs: export symbol d_find_any_alias()\n  ceph: always initialize the dentry in open_root_dentry()\n  libceph: remove useless return value for osd_client __send_request()\n  ceph: avoid iput() while holding spinlock in ceph_dir_fsync\n  ceph: avoid useless dget/dput in encode_fh\n  ceph: dereference pointer after checking for NULL\n  crush: fix force for non-root TAKE\n  ceph: remove unnecessary d_fsdata conditional checks\n  ceph: Use kmemdup rather than duplicating its implementation\n\nFix up conflicts in fs/ceph/super.c (d_alloc_root() failure handling vs\nalways initialize the dentry in open_root_dentry)\n"
    },
    {
      "commit": "46f72b349290d2bd7aecea38f02609d814332df6",
      "tree": "4d9adf3578e3cc526c6756b1e5165a65ba285648",
      "parents": [
        "d46cfba5363a163851dc768f717f34185527a472"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 10 09:04:37 2012 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Jan 12 11:00:28 2012 -0800"
      },
      "message": "vfs: export symbol d_find_any_alias()\n\nCeph needs this.\n\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "eaf5f9073533cde21c7121c136f1c3f072d9cf59",
      "tree": "db9cb9424fbae04decf7a8281a5180f65e5124b9",
      "parents": [
        "f4947fbce208990266920d51837e4e7ba9779db1"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "miklos@szeredi.hu",
        "time": "Tue Jan 10 18:22:25 2012 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 10 13:06:32 2012 -0500"
      },
      "message": "fix shrink_dcache_parent() livelock\n\nTwo (or more) concurrent calls of shrink_dcache_parent() on the same dentry may\ncause shrink_dcache_parent() to loop forever.\n\nHere\u0027s what appears to happen:\n\n1 - CPU0: select_parent(P) finds C and puts it on dispose list, returns 1\n\n2 - CPU1: select_parent(P) locks P-\u003ed_lock\n\n3 - CPU0: shrink_dentry_list() locks C-\u003ed_lock\n   dentry_kill(C) tries to lock P-\u003ed_lock but fails, unlocks C-\u003ed_lock\n\n4 - CPU1: select_parent(P) locks C-\u003ed_lock,\n         moves C from dispose list being processed on CPU0 to the new\ndispose list, returns 1\n\n5 - CPU0: shrink_dentry_list() finds dispose list empty, returns\n\n6 - Goto 2 with CPU0 and CPU1 switched\n\nBasically select_parent() steals the dentry from shrink_dentry_list() and thinks\nit found a new one, causing shrink_dentry_list() to think it\u0027s making progress\nand loop over and over.\n\nOne way to trigger this is to make udev calls stat() on the sysfs file while it\nis going away.\n\nHaving a file in /lib/udev/rules.d/ with only this one rule seems to the trick:\n\nATTR{vendor}\u003d\u003d\"0x8086\", ATTR{device}\u003d\u003d\"0x10ca\", ENV{PCI_SLOT_NAME}\u003d\"%k\", ENV{MATCHADDR}\u003d\"$attr{address}\", RUN+\u003d\"/bin/true\"\n\nThen execute the following loop:\n\nwhile true; do\n        echo -bond0 \u003e /sys/class/net/bonding_masters\n        echo +bond0 \u003e /sys/class/net/bonding_masters\n        echo -bond1 \u003e /sys/class/net/bonding_masters\n        echo +bond1 \u003e /sys/class/net/bonding_masters\ndone\n\nOne fix would be to check all callers and prevent concurrent calls to\nshrink_dcache_parent().  But I think a better solution is to stop the\nstealing behavior.\n\nThis patch adds a new dentry flag that is set when the dentry is added to the\ndispose list.  The flag is cleared in dentry_lru_del() in case the dentry gets a\nnew reference just before being pruned.\n\nIf the dentry has this flag, select_parent() will skip it and let\nshrink_dentry_list() retry pruning it.  With select_parent() skipping those\ndentries there will not be the appearance of progress (new dentries found) when\nthere is none, hence shrink_dcache_parent() will not loop forever.\n\nSet the flag is also set in prune_dcache_sb() for consistency as suggested by\nLinus.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCC: stable@vger.kernel.org\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "adc0e91ab142abe93f5b0d7980ada8a7676231fe",
      "tree": "27ee89f960b7e2d6cd5179d914bc252324122c26",
      "parents": [
        "b48f03b319ba78f3abf9a7044d1f436d8d90f4f9"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jan 08 16:49:21 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 09 19:23:45 2012 -0500"
      },
      "message": "vfs: new helper - d_make_root()\n\nd_alloc_root() with iput() in case of allocation failure...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b48f03b319ba78f3abf9a7044d1f436d8d90f4f9",
      "tree": "7ddc8f545787d28825413946519ed88ea19edb24",
      "parents": [
        "3c5184ef1216dd476c9c67f22a199d90ac4d5892"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Aug 23 18:56:24 2011 +1000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 09 19:22:52 2012 -0500"
      },
      "message": "dcache: use a dispose list in select_parent\n\nselect_parent currently abuses the dentry cache LRU to provide\ncleanup features for child dentries that need to be freed. It moves\nthem to the tail of the LRU, then tells shrink_dcache_parent() to\ncalls __shrink_dcache_sb to unconditionally move them to a dispose\nlist (as DCACHE_REFERENCED is ignored). __shrink_dcache_sb() has to\nrelock the dentries to move them off the LRU onto the dispose list,\nbut otherwise does not touch the dentries that select_parent() moved\nto the tail of the LRU. It then passses the dispose list to\nshrink_dentry_list() which tries to free the dentries.\n\nIOWs, the use of __shrink_dcache_sb() is superfluous - we can build\nexactly the same list of dentries for disposal directly in\nselect_parent() and call shrink_dentry_list() instead of calling\n__shrink_dcache_sb() to do that. This means that we avoid long holds\non the lru lock walking the LRU moving dentries to the dispose list\nWe also avoid the need to relock each dentry just to move it off the\nLRU, reducing the numebr of times we lock each dentry to dispose of\nthem in shrink_dcache_parent() from 3 to 2 times.\n\nFurther, we remove one of the two callers of __shrink_dcache_sb().\nThis also means that __shrink_dcache_sb can be moved into back into\nprune_dcache_sb() and we no longer have to handle referenced\ndentries conditionally, simplifying the code.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "143c8c91cee7efdd732ec5f61b3471fc46192f20",
      "tree": "dd3e9a9b8b88f1876a258fe1bf274532aeb72a62",
      "parents": [
        "900148dcac6bc93ca688d64a7f9a9f8d706e0d1c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Nov 25 00:46:35 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:09 2012 -0500"
      },
      "message": "vfs: mnt_ns moved to struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a73324da7af4052e1d1ddec6a5980f552420e58b",
      "tree": "65c119bf3bb852c4298aeb24b906dc3a5be7520a",
      "parents": [
        "0714a533805a0f8ebfc6fdb6bda9f129b8c7c6d7"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 22:25:07 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:05 2012 -0500"
      },
      "message": "vfs: move mnt_mountpoint to struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "0714a533805a0f8ebfc6fdb6bda9f129b8c7c6d7",
      "tree": "7f34ceedc12c4a680ca3509562b09ec441a0954f",
      "parents": [
        "3376f34fff5be9954fd9a9c4fd68f4a0a36d480e"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 22:19:58 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:05 2012 -0500"
      },
      "message": "vfs: now it can be done - make mnt_parent point to struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "3376f34fff5be9954fd9a9c4fd68f4a0a36d480e",
      "tree": "22a5995e66efd92cc394186c56deb082e4521440",
      "parents": [
        "643822b41e5e0f133438883b0be574cdaf168a2a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 22:05:19 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:04 2012 -0500"
      },
      "message": "vfs: mnt_parent moved to struct mount\n\nthe second victim...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "676da58df740f325034b8641311413c2393588e1",
      "tree": "88d1e385d368d73c7b1284da2fc46516879a867d",
      "parents": [
        "1ab597386205f8dc757cf8750465502aeae65154"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 21:47:05 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:04 2012 -0500"
      },
      "message": "vfs: spread struct mount - mnt_has_parent\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "afac7cba7ed31968a95e181dc25e204e45009ea8",
      "tree": "282cf7da6bc3915093df622ebfcd39f44f6fd1cd",
      "parents": [
        "b2dba1af3c4157040303a76d25216b1713d333d0"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Nov 23 19:34:49 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:52:36 2012 -0500"
      },
      "message": "vfs: more mnt_parent cleanups\n\na) mount --move is checking that -\u003emnt_parent is non-NULL before\nlooking if that parent happens to be shared; -\u003emnt_parent is never\nNULL and it\u0027s not even an misspelled !mnt_has_parent()\n\nb) pivot_root open-codes is_path_reachable(), poorly.\n\nc) so does path_is_under(), while we are at it.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b2dba1af3c4157040303a76d25216b1713d333d0",
      "tree": "c846b1c8074d29b9fc02ef3eeda98631dfd6ee94",
      "parents": [
        "aa9c0e07bb90589186f3b5a0ca97660c2cb50806"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Nov 23 19:26:23 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:52:36 2012 -0500"
      },
      "message": "vfs: new internal helper: mnt_has_parent(mnt)\n\nvfsmounts have -\u003emnt_parent pointing either to a different vfsmount\nor to itself; it\u0027s never NULL and termination condition in loops\ntraversing the tree towards root is mnt \u003d\u003d mnt-\u003emnt_parent.  At least\none place (see the next patch) is confused about what\u0027s going on;\nlet\u0027s add an explicit helper checking it right way and use it in\nall places where we need it.  Not that there had been too many,\nbut...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "02125a826459a6ad142f8d91c5b6357562f96615",
      "tree": "8c9d9860aef93917d9b8cc6d471fe68b58ce7a9d",
      "parents": [
        "5611cc4572e889b62a7b4c72a413536bf6a9c416"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Dec 05 08:43:34 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Dec 06 23:57:18 2011 -0500"
      },
      "message": "fix apparmor dereferencing potentially freed dentry, sanitize __d_path() API\n\n__d_path() API is asking for trouble and in case of apparmor d_namespace_path()\ngetting just that.  The root cause is that when __d_path() misses the root\nit had been told to look for, it stores the location of the most remote ancestor\nin *root.  Without grabbing references.  Sure, at the moment of call it had\nbeen pinned down by what we have in *path.  And if we raced with umount -l, we\ncould have very well stopped at vfsmount/dentry that got freed as soon as\nprepend_path() dropped vfsmount_lock.\n\nIt is safe to compare these pointers with pre-existing (and known to be still\nalive) vfsmount and dentry, as long as all we are asking is \"is it the same\naddress?\".  Dereferencing is not safe and apparmor ended up stepping into\nthat.  d_namespace_path() really wants to examine the place where we stopped,\neven if it\u0027s not connected to our namespace.  As the result, it looked\nat -\u003ed_sb-\u003es_magic of a dentry that might\u0027ve been already freed by that point.\nAll other callers had been careful enough to avoid that, but it\u0027s really\na bad interface - it invites that kind of trouble.\n\nThe fix is fairly straightforward, even though it\u0027s bigger than I\u0027d like:\n\t* prepend_path() root argument becomes const.\n\t* __d_path() is never called with NULL/NULL root.  It was a kludge\nto start with.  Instead, we have an explicit function - d_absolute_root().\nSame as __d_path(), except that it doesn\u0027t get root passed and stops where\nit stops.  apparmor and tomoyo are using it.\n\t* __d_path() returns NULL on path outside of root.  The main\ncaller is show_mountinfo() and that\u0027s precisely what we pass root for - to\nskip those outside chroot jail.  Those who don\u0027t want that can (and do)\nuse d_path().\n\t* __d_path() root argument becomes const.  Everyone agrees, I hope.\n\t* apparmor does *NOT* try to use __d_path() or any of its variants\nwhen it sees that path-\u003emnt is an internal vfsmount.  In that case it\u0027s\ndefinitely not mounted anywhere and dentry_path() is exactly what we want\nthere.  Handling of sysctl()-triggered weirdness is moved to that place.\n\t* if apparmor is asked to do pathname relative to chroot jail\nand __d_path() tells it we it\u0027s not in that jail, the sucker just calls\nd_absolute_path() instead.  That\u0027s the other remaining caller of __d_path(),\nBTW.\n        * seq_path_root() does _NOT_ return -ENAMETOOLONG (it\u0027s stupid anyway -\nthe normal seq_file logics will take care of growing the buffer and redoing\nthe call of -\u003eshow() just fine).  However, if it gets path not reachable\nfrom root, it returns SEQ_SKIP.  The only caller adjusted (i.e. stopped\nignoring the return value as it used to do).\n\nReviewed-by: John Johansen \u003cjohn.johansen@canonical.com\u003e\nACKed-by: John Johansen \u003cjohn.johansen@canonical.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "dd179946db2493646955efc112d73c85b3cafcb1",
      "tree": "59203e419cf14e4a28e3ede7cb32a00d34bd0f8e",
      "parents": [
        "f1fd306a91f875e65af0e04855b23adda6831ac9"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Aug 16 15:31:30 2011 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Nov 20 23:04:27 2011 -0500"
      },
      "message": "VFS: Log the fact that we\u0027ve given ELOOP rather than creating a loop\n\nTo prevent an NFS server from being used to create a directory loop in an NFS\nsuperblock on the client, the following patch was committed:\n\n\tcommit 1836750115f20b774e55c032a3893e8c5bdf41ed\n\tAuthor: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n\tDate:   Tue Jul 12 21:42:24 2011 -0400\n\tSubject: fix loop checks in d_materialise_unique()\n\nThis causes ELOOP to be reported to anyone trying to access the dentry that\nwould otherwise cause the kernel to complete the loop.\n\nHowever, no indication is given to the caller as to why an operation that ought\nto work doesn\u0027t.  The fault is with the kernel, which doesn\u0027t want to try and\nsolve the problem as it gets horrendously messy if there\u0027s another mountpoint\nsomewhere in the trees being spliced that can\u0027t be moved[*].\n\n[*] The real problem is that we don\u0027t handle the excision of a subtree that\ngets moved _out_ of what we can see.  This can happen on the server where a\ndirectory is merely moved between two other dirs on the same filesystem, but\nwhere destination dir is not accessible by the client.\n\nSo, given the choice to return ELOOP rather than trying to reconfigure the\ndentry tree, we should give the caller some indication of why they aren\u0027t being\nallowed to make what should be a legitimate request and log a message.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Sachin Prabhu \u003csprabhu@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "50e696308c3fb18a4a0dae7b3a4d47469149c919",
      "tree": "16ff458026c1551803b86d9e0f9f02c7a64182fa",
      "parents": [
        "a84450604d0fe08b6a2335efbedede18d3d7cc75"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@ZenIV.linux.org.uk",
        "time": "Mon Nov 07 16:39:57 2011 +0000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Nov 07 10:54:10 2011 -0800"
      },
      "message": "vfs: d_invalidate() should leave mountpoints alone\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f0023bc617ba600956b9226f1806033d7486c8ba",
      "tree": "7a5ad7481b160e1d40cdc95626bfdb5e8577c88e",
      "parents": [
        "a78ef704a8dd430225955f0709b22d4a6ba21deb"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Oct 28 10:02:42 2011 -0700"
      },
      "committer": {
        "name": "Christoph Hellwig",
        "email": "hch@serles.lst.de",
        "time": "Wed Nov 02 12:53:43 2011 +0100"
      },
      "message": "vfs: add d_prune dentry operation\n\nThis adds a d_prune dentry operation that is called by the VFS prior to\npruning (i.e. unhashing and killing) a hashed dentry from the dcache.\nWrap dentry_lru_del() and use the new _prune() helper in the cases where we\nare about to unhash and kill the dentry.\n\nThis will be used by Ceph to maintain a flag indicating whether the\ncomplete contents of a directory are contained in the dcache, allowing it\nto satisfy lookups and readdir without addition server communication.\n\nRenumber a few DCACHE_* #defines to group DCACHE_OP_PRUNE with the other\nDCACHE_OP_ bits.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "830c0f0edca67403d361fe976a25b17356c11f19",
      "tree": "b4bfc71ab9aaff0e8b65403c319dde519dd6f9ef",
      "parents": [
        "7cd4767e696123cdb7447fbd7c281eb8c610c8e4"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 06 22:41:50 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 06 22:52:40 2011 -0700"
      },
      "message": "vfs: renumber DCACHE_xyz flags, remove some stale ones\n\nGcc tends to generate better code with small integers, including the\nDCACHE_xyz flag tests - so move the common ones to be first in the list.\nAlso just remove the unused DCACHE_INOTIFY_PARENT_WATCHED and\nDCACHE_AUTOFS_PENDING values, their users no longer exists in the source\ntree.\n\nAnd add a \"unlikely()\" to the DCACHE_OP_COMPARE test, since we want the\ncommon case to be a nice straight-line fall-through.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2af14162656b81bea9e03e76d7c5f1787cc86ea6",
      "tree": "12906ff5b3f372606f2822ba8aef2989c76d284c",
      "parents": [
        "88eca0207cf1574328c3ce8c3be537a9317261bb"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "rdunlap@xenotime.net",
        "time": "Wed Aug 03 16:21:07 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:21 2011 -1000"
      },
      "message": "fs/dcache.c: fix new kernel-doc warning\n\nFix new kernel-doc warning in fs/dcache.c:\n\n  Warning(fs/dcache.c:797): No description found for parameter \u0027sb\u0027\n\nSigned-off-by: Randy Dunlap \u003crdunlap@xenotime.net\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": "43c1c9cd244098012441b90c32304f11f1258d43",
      "tree": "f6d924936b376cfa3bb7bc1eec5716900a61a2cf",
      "parents": [
        "c6627c60c07c43b51ef88e352627fa786d1e1592"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Jun 07 14:09:30 2011 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 01 02:27:57 2011 -0400"
      },
      "message": "VFS: Reorganise shrink_dcache_for_umount_subtree() after demise of dcache_lock\n\nReorganise shrink_dcache_for_umount_subtree() in light of the demise of\ndcache_lock.  Without that dcache_lock, there is no need for the batching of\nremoval of dentries from the system under it (we wanted to make intensive use\nof the locked data whilst we held it, but didn\u0027t want to hold it for long at a\ntime).\n\nThis works, provided the preceding patch is correct in its removal of locking\non dentry-\u003ed_lock on the basis that no one should be locking these dentries any\nmore as the whole superblock is defunct.\n\nWith this patch, the calls to dentry_lru_del() and __d_shrink() are placed at\nthe point where each dentry is detached handled.\n\nIt is possible that, as an alternative, the batching should still be done -\nbut only for dentry_lru_del() of all a dentry\u0027s children in one go.  In such a\ncase, the batching would be done under dcache_lru_lock.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c6627c60c07c43b51ef88e352627fa786d1e1592",
      "tree": "2d0924acf0c6fa37d0fc7277a9f17940496b6461",
      "parents": [
        "35f40ef00204c456f5c181c0e7f54e25bb93cd49"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Jun 07 14:09:20 2011 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 01 02:27:57 2011 -0400"
      },
      "message": "VFS: Remove dentry-\u003ed_lock locking from shrink_dcache_for_umount_subtree()\n\nLocks of the dcache_lock were replaced by locks of dentry-\u003ed_lock in commits\nsuch as:\n\n\t2304450783dfde7b0b94ae234edd0dbffa865073\n\t2fd6b7f50797f2e993eea59e0a0b8c6399c811dc\n\nas part of the RCU-based pathwalk changes, despite the fact that the caller\n(shrink_dcache_for_umount()) notes in the banner comment the reasons that\nd_lock is not necessary in these functions:\n\n/*\n * destroy the dentries attached to a superblock on unmounting\n * - we don\u0027t need to use dentry-\u003ed_lock because:\n *   - the superblock is detached from all mountings and open files, so the\n *     dentry trees will not be rearranged by the VFS\n *   - s_umount is write-locked, so the memory pressure shrinker will ignore\n *     any dentries belonging to this superblock that it comes across\n *   - the filesystem itself is no longer permitted to rearrange the dentries\n *     in this superblock\n */\n\nSo remove these locks.  If the locks are actually necessary, then this banner\ncomment should be altered instead.\n\nThe hash table chains are protected by 1-bit locks in the hash table heads, so\nthose shouldn\u0027t be a problem.\n\nNote that to make this work, __d_drop() has to be split so that the RCUwalk\nbarrier can be avoided.  This causes problems otherwise as it has an assertion\nthat dentry-\u003ed_lock is locked - but there is no need for that as no one else\ncan be trying to access this dentry, except to step over it (and that should\nbe handled by d_free(), I think).\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nCc: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "35f40ef00204c456f5c181c0e7f54e25bb93cd49",
      "tree": "dca61042039ba374b79491ce5b3227759c214f49",
      "parents": [
        "86bc704db0ab7e69230f79bc7d124e063259abc6"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Jun 07 14:09:10 2011 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 01 02:27:57 2011 -0400"
      },
      "message": "VFS: Remove detached-dentry counter from shrink_dcache_for_umount_subtree()\n\nRemove the detached-dentry counter from shrink_dcache_for_umount_subtree() as\nthe value it computes is no longer used as of commit\n312d3ca856d369bb04d0443846b85b4cdde6fa8a which made the nr_dentry counters\nsummed per-CPU rather than global atomic.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c46c887744b330795eba55fdb96343c36d481765",
      "tree": "3e4608981b87d8b5d2b23827988312d7c35778b2",
      "parents": [
        "41c96486f238e6a545f52215f95fe69748abf603"
      ],
      "author": {
        "name": "Jeff Layton",
        "email": "jlayton@redhat.com",
        "time": "Tue Jul 26 13:33:16 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jul 26 13:41:14 2011 -0400"
      },
      "message": "vfs: document locking requirements for d_move, __d_move and d_materialise_unique\n\nAdding a comment to d_materialise_unique per Al\u0027s request...\n\nd_move and __d_move have some pretty substantial locking requirements,\nbut they are not clearly documented. Add some comments spelling them\nout. Also, document the requirement for the i_mutex of the parent in\nd_materialise_unique.\n\nCc: Al Viro \u003cviro@ZenIV.linux.org.uk\u003e\nSigned-off-by: Jeff Layton \u003cjlayton@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "bbd9d6f7fbb0305c9a592bf05a32e87eb364a4ff",
      "tree": "12b2bb4202b05f6ae6a43c6ce830a0472043dbe5",
      "parents": [
        "8e204874db000928e37199c2db82b7eb8966cc3c",
        "5a9a43646cf709312d71eca71cef90ad802f28f9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 19:02:39 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 19:02:39 2011 -0700"
      },
      "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: (107 commits)\n  vfs: use ERR_CAST for err-ptr tossing in lookup_instantiate_filp\n  isofs: Remove global fs lock\n  jffs2: fix IN_DELETE_SELF on overwriting rename() killing a directory\n  fix IN_DELETE_SELF on overwriting rename() on ramfs et.al.\n  mm/truncate.c: fix build for CONFIG_BLOCK not enabled\n  fs:update the NOTE of the file_operations structure\n  Remove dead code in dget_parent()\n  AFS: Fix silly characters in a comment\n  switch d_add_ci() to d_splice_alias() in \"found negative\" case as well\n  simplify gfs2_lookup()\n  jfs_lookup(): don\u0027t bother with . or ..\n  get rid of useless dget_parent() in btrfs rename() and link()\n  get rid of useless dget_parent() in fs/btrfs/ioctl.c\n  fs: push i_mutex and filemap_write_and_wait down into -\u003efsync() handlers\n  drivers: fix up various -\u003ellseek() implementations\n  fs: handle SEEK_HOLE/SEEK_DATA properly in all fs\u0027s that define their own llseek\n  Ext4: handle SEEK_HOLE/SEEK_DATA generically\n  Btrfs: implement our own -\u003ellseek\n  fs: add SEEK_HOLE and SEEK_DATA flags\n  reiserfs: make reiserfs default to barrier\u003dflush\n  ...\n\nFix up trivial conflicts in fs/xfs/linux-2.6/xfs_super.c due to the new\nshrinker callout for the inode cache, that clashed with the xfs code to\nstart the periodic workers later.\n"
    },
    {
      "commit": "b91da88fed84843313a1b6fd1b1c834a24bbcf9e",
      "tree": "0c9456266a09f247a875fd3b55073ad42dc7445d",
      "parents": [
        "b307d4655a71749ac3f91c6dbe33d28cc026ceeb"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 21 11:01:42 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 21 11:01:42 2011 -0700"
      },
      "message": "vfs: drop conditional inode prefetch in __do_lookup_rcu\n\nIt seems to hurt performance in real life.  Yes, the inode will be used\nlater, but the conditional doesn\u0027t seem to predict all that well\n(negative dentries are not uncommon) and it looks like the cost of\nprefetching is simply higher than depending on the cache doing the right\nthing.\n\nAs usual.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "86c98e8cdb21ff4628f4d48559ab6e006380fa4b",
      "tree": "fb4038d37fc073c7b858c0a15f20cc7c627ac9a7",
      "parents": [
        "e4b9f0058145a3bed4199eacee62a9969c163401"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jul 18 23:39:07 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:48:04 2011 -0400"
      },
      "message": "Remove dead code in dget_parent()\n\n-\u003ed_parent is never NULL...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4513d899c418ff69052420e29e354e4c64b3ef76",
      "tree": "ffe11084d28c4a3d7b4eaa745748539c2eff2fb4",
      "parents": [
        "6c673ab393bc18e8bff729cd04cf384d15e72a04"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jul 17 10:52:14 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:48:02 2011 -0400"
      },
      "message": "switch d_add_ci() to d_splice_alias() in \"found negative\" case as well\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b0d40c92adafde7c2d81203ce7c1c69275f41140",
      "tree": "f75a19dcd1a37aff23dc43323b58f014b1297c6b",
      "parents": [
        "12ad3ab66103e6582ca69c0c9de18b13487eaaef"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Jul 08 14:14:42 2011 +1000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:47:10 2011 -0400"
      },
      "message": "superblock: introduce per-sb cache shrinker infrastructure\n\nWith context based shrinkers, we can implement a per-superblock\nshrinker that shrinks the caches attached to the superblock. We\ncurrently have global shrinkers for the inode and dentry caches that\nsplit up into per-superblock operations via a coarse proportioning\nmethod that does not batch very well.  The global shrinkers also\nhave a dependency - dentries pin inodes - so we have to be very\ncareful about how we register the global shrinkers so that the\nimplicit call order is always correct.\n\nWith a per-sb shrinker callout, we can encode this dependency\ndirectly into the per-sb shrinker, hence avoiding the need for\nstrictly ordering shrinker registrations. We also have no need for\nany proportioning code for the shrinker subsystem already provides\nthis functionality across all shrinkers. Allowing the shrinker to\noperate on a single superblock at a time means that we do less\nsuperblock list traversals and locking and reclaim should batch more\neffectively. This should result in less CPU overhead for reclaim and\npotentially faster reclaim of items from each filesystem.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a9049376ee05bf966bfe2b081b5071326856890a",
      "tree": "efb3cbfc7760537f201bb28dacbb0d39ec39f04c",
      "parents": [
        "0c1aa9a952c3608eb17bf990466f1491d1ee8b6c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jul 08 21:20:11 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:44:26 2011 -0400"
      },
      "message": "make d_splice_alias(ERR_PTR(err), dentry) \u003d ERR_PTR(err)\n\n... and simplify the living hell out of callers\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a4464dbc0ca6a3ab8e9d1206bc05059dae2a559d",
      "tree": "d3c9332ab72cf5a4eba483ba1ff83c54ca4c42a0",
      "parents": [
        "e3c3d9c838d48c0341c40ea45ee087e3d8c8ea39"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jul 07 15:03:58 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:44:17 2011 -0400"
      },
      "message": "Make -\u003ed_sb assign-once and always non-NULL\n\nNew helper (non-exported, fs/internal.h-only): __d_alloc(sb, name).\nAllocates dentry, sets its -\u003ed_sb to given superblock and sets\n-\u003ed_op accordingly.  Old d_alloc(NULL, name) callers are converted\nto that (all of them know what superblock they want).  d_alloc()\nitself is left only for parent !\u003d NULl case; uses __d_alloc(),\ninserts result into the list of parent\u0027s children.\n\nNote that now -\u003ed_sb is assign-once and never NULL *and*\n-\u003ed_parent is never NULL either.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "44396f4b5cb8566f7118aec55eeac99be7ad94cb",
      "tree": "dc2fd0d01c634ee9a5f5cfb8ca0d660f060ce188",
      "parents": [
        "e6625fa48e6580a74b7e700efd7e6463e282810b"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue May 31 11:58:49 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:03 2011 -0400"
      },
      "message": "fs: add a DCACHE_NEED_LOOKUP flag for d_flags\n\nBtrfs (and I\u0027d venture most other fs\u0027s) stores its indexes in nice disk order\nfor readdir, but unfortunately in the case of anything that stats the files in\norder that readdir spits back (like oh say ls) that means we still have to do\nthe normal lookup of the file, which means looking up our other index and then\nlooking up the inode.  What I want is a way to create dummy dentries when we\nfind them in readdir so that when ls or anything else subsequently does a\nstat(), we already have the location information in the dentry and can go\nstraight to the inode itself.  The lookup stuff just assumes that if it finds a\ndentry it is done, it doesn\u0027t perform a lookup.  So add a DCACHE_NEED_LOOKUP\nflag so that the lookup code knows it still needs to run i_op-\u003elookup() on the\nparent to get the inode for the dentry.  I have tested this with btrfs and I\nwent from something that looks like this\n\nhttp://people.redhat.com/jwhiter/ls-noreada.png\n\nTo this\n\nhttp://people.redhat.com/jwhiter/ls-good.png\n\nThats a savings of 1300 seconds, or 22 minutes.  That is a significant savings.\nThanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1836750115f20b774e55c032a3893e8c5bdf41ed",
      "tree": "3c0cb24361ccfb460b93b0fd6385650df80a26e6",
      "parents": [
        "94c0d4ecbe7f9fe56e052b26b2ab484e246c07b4"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jul 12 21:42:24 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jul 14 21:33:41 2011 -0400"
      },
      "message": "fix loop checks in d_materialise_unique()\n\nBoth __d_unalias() and __d_materialise_dentry() need loop prevention.\nGrab rename_lock in caller, check for loops there...\n\nAs a side benefit, we have dentry_lock_for_move() called only under\nrename_lock, which seriously reduces deadlock potential of the\nexecrable \"locking order\" used for -\u003ed_lock.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1495f230fa7750479c79e3656286b9183d662077",
      "tree": "e5e233bb9fe1916ccc7281e7dcc71b1572fb22c5",
      "parents": [
        "a09ed5e00084448453c8bada4dcd31e5fbfc2f21"
      ],
      "author": {
        "name": "Ying Han",
        "email": "yinghan@google.com",
        "time": "Tue May 24 17:12:27 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 25 08:39:26 2011 -0700"
      },
      "message": "vmscan: change shrinker API by passing shrink_control struct\n\nChange each shrinker\u0027s API by consolidating the existing parameters into\nshrink_control struct.  This will simplify any further features added w/o\ntouching each file of shrinker.\n\n[akpm@linux-foundation.org: fix build]\n[akpm@linux-foundation.org: fix warning]\n[kosaki.motohiro@jp.fujitsu.com: fix up new shrinker API]\n[akpm@linux-foundation.org: fix xfs warning]\n[akpm@linux-foundation.org: update gfs2]\nSigned-off-by: Ying Han \u003cyinghan@google.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "268bb0ce3e87872cb9290c322b0d35bce230d88f",
      "tree": "c8331ade4a3e24fc589c4eb62731bc2312d35333",
      "parents": [
        "257313b2a87795e07a0bdf58d0fffbdba8b31051"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 20 12:50:29 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 20 12:50:29 2011 -0700"
      },
      "message": "sanitize \u003clinux/prefetch.h\u003e usage\n\nCommit e66eed651fd1 (\"list: remove prefetching from regular list\niterators\") removed the include of prefetch.h from list.h, which\nuncovered several cases that had apparently relied on that rather\nobscure header file dependency.\n\nSo this fixes things up a bit, using\n\n   grep -L linux/prefetch.h $(git grep -l \u0027[^a-z_]prefetchw*(\u0027 -- \u0027*.[ch]\u0027)\n   grep -L \u0027prefetchw*(\u0027 $(git grep -l \u0027linux/prefetch.h\u0027 -- \u0027*.[ch]\u0027)\n\nto guide us in finding files that either need \u003clinux/prefetch.h\u003e\ninclusion, or have it despite not needing it.\n\nThere are more of them around (mostly network drivers), but this gets\nmany core ones.\n\nReported-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1879fd6a26571fd4e8e1f4bb3e7537bc936b1fe7",
      "tree": "5fb41fdaef01d462ff9c7ecfe688760a44e89b6a",
      "parents": [
        "3dd2ee4824b668a635d6d2bb6bc73f33708cab9f"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Apr 25 14:01:36 2011 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 25 18:14:10 2011 -0700"
      },
      "message": "add hlist_bl_lock/unlock helpers\n\nNow that the whole dcache_hash_bucket crap is gone, go all the way and\nalso remove the weird locking layering violations for locking the hash\nbuckets.  Add hlist_bl_lock/unlock helpers to move the locking into the\nlist abstraction instead of requiring each caller to open code it.\nAfter all allowing for the bit locks is the whole point of these helpers\nover the plain hlist variant.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dea3667bc3c2a0521e8d8855e407a49d9d70028c",
      "tree": "bda1a624616f2e1bf9d3ec38b30ab002379a8e6a",
      "parents": [
        "b07ad9967f40b164af77205027352ba53729cf5a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Apr 24 07:58:46 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Apr 24 07:58:46 2011 -0700"
      },
      "message": "vfs: get rid of insane dentry hashing rules\n\nThe dentry hashing rules have been really quite complicated for a long\nwhile, in odd ways.  That made functions like __d_drop() very fragile\nand non-obvious.\n\nIn particular, whether a dentry was hashed or not was indicated with an\nexplicit DCACHE_UNHASHED bit.  That\u0027s despite the fact that the hash\nabstraction that the dentries use actually have a \u0027is this entry hashed\nor not\u0027 model (which is a simple test of the \u0027pprev\u0027 pointer).\n\nThe reason that was done is because we used the normal \u0027is this entry\nunhashed\u0027 model to mark whether the dentry had _ever_ been hashed in the\ndentry hash tables, and that logic goes back many years (commit\nb3423415fbc2: \"dcache: avoid RCU for never-hashed dentries\").\n\nThat, in turn, meant that __d_drop had totally different unhashing logic\nfor the dentry hash table case and for the anonymous dcache case,\nbecause in order to use the \"is this dentry hashed\" logic as a flag for\nwhether it had ever been on the RCU hash table, we had to unhash such a\ndentry differently so that we\u0027d never think that it wasn\u0027t \u0027unhashed\u0027\nand wouldn\u0027t be free\u0027d correctly.\n\nThat\u0027s just insane.  It made the logic really hard to follow, when there\nwere two different kinds of \"unhashed\" states, and one of them (the one\nthat used \"list_bl_unhashed()\") really had nothing at all to do with\nbeing unhashed per se, but with a very subtle lifetime rule instead.\n\nSo turn all of it around, and make it logical.\n\nInstead of having a DENTRY_UNHASHED bit in d_flags to indicate whether\nthe dentry is on the hash chains or not, use the hash chain unhashed\nlogic for that.  Suddenly \"d_unhashed()\" just uses \"list_bl_unhashed()\",\nand everything makes sense.\n\nAnd for the lifetime rule, just use an explicit DENTRY_RCUACCEES bit.\nIf we ever insert the dentry into the dentry hash table so that it is\nvisible to RCU lookup, we mark it DENTRY_RCUACCESS to show that it now\nneeds the RCU lifetime rules.  Now suddently that test at dentry free\ntime makes sense too.\n\nAnd because unhashing now is sane and doesn\u0027t depend on where the dentry\ngot unhashed from (because the dentry hash chain details doesn\u0027t have\nsome subtle side effects), we can re-unify the __d_drop() logic and use\ncommon code for the unhashing.\n\nAlso fix one more open-coded hash chain bit_spin_lock() that I missed in\nthe previous chain locking cleanup commit.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b07ad9967f40b164af77205027352ba53729cf5a",
      "tree": "33ce9c53602f1983cff5dd5f209bb668fb7ffca5",
      "parents": [
        "0f1d9f78ce41a8874d30271ef8480e6f8f7f1fce"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Apr 23 22:32:03 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Apr 23 22:32:03 2011 -0700"
      },
      "message": "vfs: get rid of \u0027struct dcache_hash_bucket\u0027 abstraction\n\nIt\u0027s a useless abstraction for \u0027hlist_bl_head\u0027, and it doesn\u0027t actually\nhelp anything - quite the reverse.  All the users end up having to know\nabout the hlist_bl_head details anyway, using \u0027struct hlist_bl_node *\u0027\netc. So it just makes the code look confusing.\n\nAnd the cost of it is extra \u0027\u0026b-\u003ehead\u0027 syntactic noise, but more\nimportantly it spuriously makes the hash table dentry list look\ndifferent from the per-superblock DCACHE_DISCONNECTED dentry list.\n\nAs a result, the code ended up using ad-hoc locking for one case and\nspecial helper functions for what is really another totally identical\ncase in the very same function.\n\nMake it all look and work the same.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7ebfa57f6d307b66bb88600145afccde31016ab5",
      "tree": "f2f3574549fa2de097db2b8bb8fc4c35c744fa6a",
      "parents": [
        "e38f5b745075828ac51b12c8c95c85a7be4a3ec7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 15 07:34:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 15 07:34:26 2011 -0700"
      },
      "message": "vfs: fix incorrect dentry_update_name_case() BUG_ON() test\n\nThe case we should be verifying when updating the dentry name is that\nthe _parent_ inode (the directory) semaphore is held, not the semaphore\nfor the dentry itself.  It\u0027s the directory locking that rename and\nreaddir() etc all care about.\n\nThe comment just above even says so - but then the BUG_ON() still\nchecked the dentry inode itself.\n\nVery few people noticed, because this helper function really isn\u0027t used\nfor very much, so you had to be using ncpfs to ever hit it.\n\nI think I should just remove the BUG_ON (the function really has just\none user), but let\u0027s run with it fixed for a while before getting rid of\nit entirely.\n\nReported-and-tested-by: Bongani Hlope \u003cbonganih@bankservafrica.com\u003e\nReported-and-tested-by: Bernd Feige \u003cbernd.feige@uniklinik-freiburg.de\u003e\nCc: Petr Vandrovec \u003cpetr@vandrovec.name\u003e,\nCc: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f539abece1b7e36fae6add4f9ea29203d40badcb",
      "tree": "786c08f3131a1871ece13343c3fa3832930c1408",
      "parents": [
        "3f6f7e6d57b8a0ae2810ae7aac70c51b6f2a6304",
        "24ff6663ccfdaf088dfa7acae489cb11ed4f43c4"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 18 10:51:11 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 18 10:51:11 2011 -0700"
      },
      "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:\n  fs: call security_d_instantiate in d_obtain_alias V2\n  lose \u0027mounting_here\u0027 argument in -\u003ed_manage()\n  don\u0027t pass \u0027mounting_here\u0027 flag to follow_down()\n  change the locking order for namespace_sem\n  fix deadlock in pivot_root()\n  vfs: split off vfsmount-related parts of vfs_kern_mount()\n  Some fixes for pstore\n  kill simple_set_mnt()\n"
    },
    {
      "commit": "e16b396ce314b2bcdfe6c173fe075bf8e3432368",
      "tree": "640f0f56f2ea676647af4eb42d32fa56be2ee549",
      "parents": [
        "7fd23a24717a327a66f3c32d11a20a2f169c824f",
        "e6e8dd5055a974935af1398c8648d4a9359b0ecb"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 18 10:37:40 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 18 10:37:40 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (47 commits)\n  doc: CONFIG_UNEVICTABLE_LRU doesn\u0027t exist anymore\n  Update cpuset info \u0026 webiste for cgroups\n  dcdbas: force SMI to happen when expected\n  arch/arm/Kconfig: remove one to many l\u0027s in the word.\n  asm-generic/user.h: Fix spelling in comment\n  drm: fix printk typo \u0027sracth\u0027\n  Remove one to many n\u0027s in a word\n  Documentation/filesystems/romfs.txt: fixing link to genromfs\n  drivers:scsi Change printk typo initate -\u003e initiate\n  serial, pch uart: Remove duplicate inclusion of linux/pci.h header\n  fs/eventpoll.c: fix spelling\n  mm: Fix out-of-date comments which refers non-existent functions\n  drm: Fix printk typo \u0027failled\u0027\n  coh901318.c: Change initate to initiate.\n  mbox-db5500.c Change initate to initiate.\n  edac: correct i82975x error-info reported\n  edac: correct i82975x mci initialisation\n  edac: correct commented info\n  fs: update comments to point correct document\n  target: remove duplicate include of target/target_core_device.h from drivers/target/target_core_hba.c\n  ...\n\nTrivial conflict in fs/eventpoll.c (spelling vs addition)\n"
    },
    {
      "commit": "24ff6663ccfdaf088dfa7acae489cb11ed4f43c4",
      "tree": "beb9039caed8082054e17922d33181f2dedae8b8",
      "parents": [
        "1aed3e4204dd787d53b3cd6363eb63bb4900c38e"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Thu Nov 18 20:52:55 2010 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 18 10:02:09 2011 -0400"
      },
      "message": "fs: call security_d_instantiate in d_obtain_alias V2\n\nWhile trying to track down some NFS problems with BTRFS, I kept noticing I was\ngetting -EACCESS for no apparent reason.  Eric Paris and printk() helped me\nfigure out that it was SELinux that was giving me grief, with the following\ndenial\n\ntype\u003dAVC msg\u003daudit(1290013638.413:95): avc:  denied  { 0x800000 } for  pid\u003d1772\ncomm\u003d\"nfsd\" name\u003d\"\" dev\u003dsda1 ino\u003d256 scontext\u003dsystem_u:system_r:kernel_t:s0\ntcontext\u003dsystem_u:object_r:unlabeled_t:s0 tclass\u003dfile\n\nTurns out this is because in d_obtain_alias if we can\u0027t find an alias we create\none and do all the normal instantiation stuff, but we don\u0027t do the\nsecurity_d_instantiate.\n\nUsually we are protected from getting a hashed dentry that hasn\u0027t yet run\nsecurity_d_instantiate() by the parent\u0027s i_mutex, but obviously this isn\u0027t an\noption there, so in order to deal with the case that a second thread comes in\nand finds our new dentry before we get to run security_d_instantiate(), we go\nahead and call it if we find a dentry already.  Eric assures me that this is ok\nas the code checks to see if the dentry has been initialized already so calling\nsecurity_d_instantiate() against the same dentry multiple times is ok.  With\nthis patch I\u0027m no longer getting errant -EACCESS values.\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c83ce989cb5ff86575821992ea82c4df5c388ebc",
      "tree": "29741017daffb074fbe09c3aec6d937f2f0c140d",
      "parents": [
        "c826cb7dfce80512c26c984350077a25046bd215"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Mar 15 13:36:43 2011 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 15 15:46:11 2011 -0700"
      },
      "message": "VFS: Fix the nfs sillyrename regression in kernel 2.6.38\n\nThe new vfs locking scheme introduced in 2.6.38 breaks NFS sillyrename\nbecause the latter relies on being able to determine the parent\ndirectory of the dentry in the -\u003eiput() callback in order to send the\nappropriate unlink rpc call.\n\nLooking at the code that cares about races with dput(), there doesn\u0027t\nseem to be anything that specifically uses d_parent as a test for\nwhether or not there is a race:\n  - __d_lookup_rcu(), __d_lookup() all test for d_hashed() after d_parent\n  - shrink_dcache_for_umount() is safe since nothing else can rearrange\n    the dentries in that super block.\n  - have_submount(), select_parent() and d_genocide() can test for a\n    deletion if we set the DCACHE_DISCONNECTED flag when the dentry\n    is removed from the parent\u0027s d_subdirs list.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: stable@kernel.org (2.6.38, needs commit c826cb7dfce8 \"dcache.c:\n\tcreate helper function for duplicated functionality\" )\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c826cb7dfce80512c26c984350077a25046bd215",
      "tree": "6230dc7babebfa008d67bd309de7562a0292ab8b",
      "parents": [
        "76ca07832842100b14a31ad8996dab7b0c28aa42"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 15 15:29:21 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 15 15:29:21 2011 -0700"
      },
      "message": "dcache.c: create helper function for duplicated functionality\n\nThis creates a helper function for he \"try to ascend into the parent\ndirectory\" case, which was written out in triplicate before.  With all\nthe locking and subtle sequence number stuff, we really don\u0027t want to\nduplicate that kind of code.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d891eedbc3b1b0fade8a9ce60cc0eba1cccb59e5",
      "tree": "55dd6aa9e17cd763efda6291d740bafd7f05d802",
      "parents": [
        "1ca551c6caae7b52178555cdedea6ca26444be46"
      ],
      "author": {
        "name": "J. Bruce Fields",
        "email": "bfields@fieldses.org",
        "time": "Tue Jan 18 15:45:09 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 05:18:54 2011 -0500"
      },
      "message": "fs/dcache: allow d_obtain_alias() to return unhashed dentries\n\nWithout this patch, inodes are not promptly freed on last close of an\nunlinked file by an nfs client:\n\n\tclient$ mount -tnfs4 server:/export/ /mnt/\n\tclient$ tail -f /mnt/FOO\n\t...\n\tserver$ df -i /export\n\tserver$ rm /export/FOO\n\t(^C the tail -f)\n\tserver$ df -i /export\n\tserver$ echo 2 \u003e/proc/sys/vm/drop_caches\n\tserver$ df -i /export\n\nthe df\u0027s will show that the inode is not freed on the filesystem until\nthe last step, when it could have been freed after killing the client\u0027s\ntail -f. On-disk data won\u0027t be deallocated either, leading to possible\nspurious ENOSPC.\n\nThis occurs because when the client does the close, it arrives in a\ncompound with a putfh and a close, processed like:\n\n\t- putfh: look up the filehandle.  The only alias found for the\n\t  inode will be DCACHE_UNHASHED alias referenced by the filp\n\t  this, so it creates a new DCACHE_DISCONECTED dentry and\n\t  returns that instead.\n\t- close: closes the existing filp, which is destroyed\n\t  immediately by dput() since it\u0027s DCACHE_UNHASHED.\n\t- end of the compound: release the reference\n\t  to the current filehandle, and dput() the new\n\t  DCACHE_DISCONECTED dentry, which gets put on the\n\t  unused list instead of being destroyed immediately.\n\nNick Piggin suggested fixing this by allowing d_obtain_alias to return\nthe unhashed dentry that is referenced by the filp, instead of making it\ncreate a new dentry.\n\nLeave __d_find_alias() alone to avoid changing behavior of other\ncallers.\n\nAlso nfsd doesn\u0027t need all the checks of __d_find_alias(); any dentry,\nhashed or unhashed, disconnected or not, should work.\n\nSigned-off-by: J. Bruce Fields \u003cbfields@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b0a4bb830e099a31bec79452268639a7d8c2c1e4",
      "tree": "ef6a4e8215f0eb236d78b9d25c1ed48546312648",
      "parents": [
        "5629f8a7fa391e40e61d528d4f5d7850dbfdf7ae"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Sat Jan 22 15:31:32 2011 +0900"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Thu Feb 17 16:41:32 2011 +0100"
      },
      "message": "fs: update comments to point correct document\n\ndcache-locking.txt is not exist any more, and the path was not\ncorrect anyway. Fix it.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "ff5fdb61493d95332945630fcae249f896098652",
      "tree": "7a0ba7c65bbecaa5c5d98004d5c52cfb83d1ed77",
      "parents": [
        "9b310acc335cb0da7d743e2b60f999587beb6496"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Sat Jan 22 20:16:06 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jan 22 20:32:38 2011 -0800"
      },
      "message": "fs: fix new dcache.c kernel-doc warnings\n\nFix new fs/dcache.c kernel-doc warnings:\n\n  Warning(fs/dcache.c:184): No description found for parameter \u0027dentry\u0027\n  Warning(fs/dcache.c:296): No description found for parameter \u0027parent\u0027\n  Warning(fs/dcache.c:1985): No description found for parameter \u0027dparent\u0027\n  Warning(fs/dcache.c:1985): Excess function parameter \u0027parent\u0027 description in \u0027d_validate\u0027\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc:\tAlexander Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc:\tNick Piggin \u003cnpiggin@kernel.dk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "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"
    }
  ],
  "next": "da5029563a0a026c64821b09e8e7b4fd81d3fe1b"
}
