)]}'
{
  "log": [
    {
      "commit": "a3fbbde70a0cec017f2431e8f8de208708c76acc",
      "tree": "f584856e638ca916a8aca32eda58a8fe89722c9f",
      "parents": [
        "54a0f91301950af3d6ae2ff2bf710c9c68a9bfea"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@ZenIV.linux.org.uk",
        "time": "Mon Nov 07 21:21:26 2011 +0000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Nov 07 14:58:06 2011 -0800"
      },
      "message": "VFS: we need to set LOOKUP_JUMPED on mountpoint crossing\n\nMountpoint crossing is similar to following procfs symlinks - we do\nnot get -\u003ed_revalidate() called for dentry we have arrived at, with\nunpleasant consequences for NFS4.\n\nSimple way to reproduce the problem in mainline:\n\n    cat \u003e/tmp/a.c \u003c\u003c\u0027EOF\u0027\n    #include \u003cunistd.h\u003e\n    #include \u003cfcntl.h\u003e\n    #include \u003cstdio.h\u003e\n    main()\n    {\n            struct flock fl \u003d {.l_type \u003d F_RDLCK, .l_whence \u003d SEEK_SET, .l_len \u003d 1};\n            if (fcntl(0, F_SETLK, \u0026fl))\n                    perror(\"setlk\");\n    }\n    EOF\n    cc /tmp/a.c -o /tmp/test\n\nthen on nfs4:\n\n    mount --bind file1 file2\n    /tmp/test \u003c file1\t\t# ok\n    /tmp/test \u003c file2\t\t# spews \"setlk: No locks available\"...\n\nWhat happens is the missing call of -\u003ed_revalidate() after mountpoint\ncrossing and that\u0027s where NFS4 would issue OPEN request to server.\n\nThe fix is simple - treat mountpoint crossing the same way we deal with\nfollowing procfs-style symlinks.  I.e.  set LOOKUP_JUMPED...\n\nCc: stable@kernel.org\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1fa1e7f615f4d3ae436fa319af6e4eebdd4026a8",
      "tree": "aa3521aaa762424cc7fb38dbf924a34dac1b03c2",
      "parents": [
        "32096ea1aac14e6f29d4744924092eca52b937b0"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@canonical.com",
        "time": "Wed Nov 02 09:44:39 2011 +0100"
      },
      "committer": {
        "name": "Christoph Hellwig",
        "email": "hch@serles.lst.de",
        "time": "Wed Nov 02 12:53:42 2011 +0100"
      },
      "message": "readlinkat: ensure we return ENOENT for the empty pathname for normal lookups\n\nSince the commit below which added O_PATH support to the *at() calls, the\nerror return for readlink/readlinkat for the empty pathname has switched\nfrom ENOENT to EINVAL:\n\n  commit 65cfc6722361570bfe255698d9cd4dccaf47570d\n  Author: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n  Date:   Sun Mar 13 15:56:26 2011 -0400\n\n    readlinkat(), fchownat() and fstatat() with empty relative pathnames\n\nThis is both unexpected for userspace and makes readlink/readlinkat\ninconsistant with all other interfaces; and inconsistant with our stated\nreturn for these pathnames.\n\nAs the readlinkat call does not have a flags parameter we cannot use the\nAT_EMPTY_PATH approach used in the other calls.  Therefore expose whether\nthe original path is infact entry via a new user_path_at_empty() path\nlookup function.  Use this to determine whether to default to EINVAL or\nENOENT for failures.\n\nAddresses http://bugs.launchpad.net/bugs/817187\n\n[akpm@linux-foundation.org: remove unused getname_flags()]\nSigned-off-by: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: \u003cstable@kernel.org\u003e\nCc: \u003cstable@vger.kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "f3c7691e8d30d88899b514675c7c86d19057b5fd",
      "tree": "0065bcc05b19a99d8785ce523f992a48fe573e79",
      "parents": [
        "79835a710d6ff811659c8de46f89c7577c3b8cc6"
      ],
      "author": {
        "name": "J. Bruce Fields",
        "email": "bfields@redhat.com",
        "time": "Wed Sep 21 10:58:13 2011 -0400"
      },
      "committer": {
        "name": "root",
        "email": "root@serles.lst.de",
        "time": "Fri Oct 28 14:59:00 2011 +0200"
      },
      "message": "leases: fix write-open/read-lease race\n\nIn setlease, we use i_writecount to decide whether we can give out a\nread lease.\n\nIn open, we break leases before incrementing i_writecount.\n\nThere is therefore a window between the break lease and the i_writecount\nincrement when setlease could add a new read lease.\n\nThis would leave us with a simultaneous write open and read lease, which\nshouldn\u0027t happen.\n\nSigned-off-by: J. Bruce Fields \u003cbfields@redhat.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "948409c74d217f6cf054b8c927765a1c3fe16b53",
      "tree": "e4d0d3d07eb8f11333fd050e3d577834da600db5",
      "parents": [
        "d124b60a838141bb9cac1b6567e9ca4539d1fff0"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@kernel.org",
        "time": "Sun Oct 23 23:13:33 2011 +0530"
      },
      "committer": {
        "name": "root",
        "email": "root@serles.lst.de",
        "time": "Fri Oct 28 14:58:55 2011 +0200"
      },
      "message": "vfs: add a comment to inode_permission()\n\nAcked-by: J. Bruce Fields \u003cbfields@redhat.com\u003e\nAcked-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Andreas Gruenbacher \u003cagruen@kernel.org\u003e\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "d124b60a838141bb9cac1b6567e9ca4539d1fff0",
      "tree": "aefe6f38e9617b0a878dac1db2bc65981fbc216a",
      "parents": [
        "8522ca5818652c4da6808c66a307abce75462212"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@kernel.org",
        "time": "Sun Oct 23 23:13:32 2011 +0530"
      },
      "committer": {
        "name": "root",
        "email": "root@serles.lst.de",
        "time": "Fri Oct 28 14:58:54 2011 +0200"
      },
      "message": "vfs: pass all mask flags check_acl and posix_acl_permission\n\nAcked-by: J. Bruce Fields \u003cbfields@redhat.com\u003e\nAcked-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Andreas Gruenbacher \u003cagruen@kernel.org\u003e\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "8fd90c8d1dacb5ff0f372217c97f57a9e61559cd",
      "tree": "af301c3ceaa15fea359a0bc753f0cda0df2389c0",
      "parents": [
        "1448c721e4fa2faf742029a0403b4b787fccb7fa"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@kernel.org",
        "time": "Sun Oct 23 23:13:30 2011 +0530"
      },
      "committer": {
        "name": "root",
        "email": "root@serles.lst.de",
        "time": "Fri Oct 28 14:58:54 2011 +0200"
      },
      "message": "vfs: indicate that the permission functions take all the MAY_* flags\n\nAcked-by: J. Bruce Fields \u003cbfields@redhat.com\u003e\nAcked-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Andreas Gruenbacher \u003cagruen@kernel.org\u003e\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "b6c8069d3577481390b3f24a8434ad72a3235594",
      "tree": "43133cbf05bacec887cf010db32589e726a87154",
      "parents": [
        "815d405ceff0d6964683f033e18b9b23a88fba87"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 27 08:12:33 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 27 08:12:33 2011 -0700"
      },
      "message": "vfs: remove LOOKUP_NO_AUTOMOUNT flag\n\nThat flag no longer makes sense, since we don\u0027t look up automount points\nas eagerly any more.  Additionally, it turns out that the NO_AUTOMOUNT\nhandling was buggy to begin with: it would avoid automounting even for\ncases where we really *needed* to do the automount handling, and could\nreturn ENOENT for autofs entries that hadn\u0027t been instantiated yet.\n\nWith our new non-eager automount semantics, one discussion has been\nabout adding a AT_AUTOMOUNT flag to vfs_fstatat (and thus the\nnewfstatat() and fstatat64() system calls), but it\u0027s probably not worth\nit: you can always force at least directory automounting by simply\nadding the final \u0027/\u0027 to the filename, which works for *all* of the stat\nfamily system calls, old and new.\n\nSo AT_NO_AUTOMOUNT (and thus LOOKUP_NO_AUTOMOUNT) really were just a\nresult of our bad default behavior.\n\nAcked-by: Ian Kent \u003craven@themaw.net\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d94c177beeb4469cd4f6e83354ab0223353e98ed",
      "tree": "0ce1b8a3d9d35afd3df533ce58eb8d1f2f401f81",
      "parents": [
        "858b1814b89d043a3866299c258ccdc27eb2538c"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Sep 26 17:44:55 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Sep 26 17:44:55 2011 -0700"
      },
      "message": "vfs pathname lookup: Add LOOKUP_AUTOMOUNT flag\n\nSince we\u0027ve now turned around and made LOOKUP_FOLLOW *not* force an\nautomount, we want to add the ability to force an automount event on\nlookup even if we don\u0027t happen to have one of the other flags that force\nit implicitly (LOOKUP_OPEN, LOOKUP_DIRECTORY, LOOKUP_PARENT..)\n\nMost cases will never want to use this, since you\u0027d normally want to\ndelay automounting as long as possible, which usually implies\nLOOKUP_OPEN (when we open a file or directory, we really cannot avoid\nthe automount any more).\n\nBut Trond argued sufficiently forcefully that at a minimum bind mounting\na file and quotactl will want to force the automount lookup.  Some other\ncases (like nfs_follow_remote_path()) could use it too, although\nLOOKUP_DIRECTORY would work there as well.\n\nThis commit just adds the flag and logic, no users yet, though.  It also\ndoesn\u0027t actually touch the LOOKUP_NO_AUTOMOUNT flag that is related, and\nwas made irrelevant by the same change that made us not follow on\nLOOKUP_FOLLOW.\n\nCc: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: Ian Kent \u003craven@themaw.net\u003e\nCc: Jeff Layton \u003cjlayton@redhat.com\u003e\nCc: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Greg KH \u003cgregkh@suse.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1d2ef5901483004d74947bbf78d5146c24038fe7",
      "tree": "add2cc75116bf7588434f212bb8dd52d32b320d5",
      "parents": [
        "003f6c9df54970d8b19578d195b3e2b398cdbde2"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@ZenIV.linux.org.uk",
        "time": "Wed Sep 14 18:55:41 2011 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Sep 14 11:31:55 2011 -0700"
      },
      "message": "restore pinning the victim dentry in vfs_rmdir()/vfs_rename_dir()\n\nWe used to get the victim pinned by dentry_unhash() prior to commit\n64252c75a219 (\"vfs: remove dget() from dentry_unhash()\") and -\u003ermdir()\nand -\u003erename() instances relied on that; most of them don\u0027t care, but\nones that used d_delete() themselves do.  As the result, we are getting\nrmdir() oopses on NFS now.\n\nJust grab the reference before locking the victim and drop it explicitly\nafter unlocking, same as vfs_rename_other() does.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Simon Kirby \u003csim@hostway.ca\u003e\nCc: stable@kernel.org (3.0.x)\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0ec26fd0698285b31248e34bf1abb022c00f23d6",
      "tree": "1d144b5b749a510e819ab0dfb624f3676e9991e9",
      "parents": [
        "e4e436e0bd480668834fe6849a52c5397b7be4fb"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Sep 05 18:06:26 2011 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Sep 09 15:42:34 2011 -0700"
      },
      "message": "vfs: automount should ignore LOOKUP_FOLLOW\n\nPrior to 2.6.38 automount would not trigger on either stat(2) or\nlstat(2) on the automount point.\n\nAfter 2.6.38, with the introduction of the -\u003ed_automount()\ninfrastructure, stat(2) and others would start triggering automount\nwhile lstat(2), etc. still would not.  This is a regression and a\nuserspace ABI change.\n\nProblem originally reported here:\n\n  http://thread.gmane.org/gmane.linux.kernel.autofs/6098\n\nIt appears that there was an attempt at fixing various userspace tools\nto not trigger the automount.  But since the stat system call is\nrather common it is impossible to \"fix\" all userspace.\n\nThis patch reverts the original behavior, which is to not trigger on\nstat(2) and other symlink following syscalls.\n\n[ It\u0027s not really clear what the right behavior is.  Apparently Solaris\n  does the \"automount on stat, leave alone on lstat\".  And some programs\n  can get unhappy when \"stat+open+fstat\" ends up giving a different\n  result from the fstat than from the initial stat.\n\n  But the change in 2.6.38 resulted in problems for some people, so\n  we\u0027re going back to old behavior.  Maybe we can re-visit this\n  discussion at some future date  - Linus ]\n\nReported-by: Leonardo Chiquitto \u003cleonardo.lists@gmail.com\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nAcked-by: Ian Kent \u003craven@themaw.net\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7813b94a54987571082ff19e9d87eabbfec23b4e",
      "tree": "f0c6b3325adba97b2af15d7bae55b4babb812f76",
      "parents": [
        "206b1d09a56dcd2db1052245c4131879c410eaf8"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Aug 07 09:53:20 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Aug 07 13:42:25 2011 -0700"
      },
      "message": "vfs: rename \u0027do_follow_link\u0027 to \u0027should_follow_link\u0027\n\nAl points out that the do_follow_link() helper function really is\nmisnamed - it\u0027s about whether we should try to follow a symlink or not,\nnot about actually doing the following.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "206b1d09a56dcd2db1052245c4131879c410eaf8",
      "tree": "86a5d67b10c8736b47323cde7717068e98a023e1",
      "parents": [
        "c2f340a69cabe0fb7b9f02d1a2495927db225a06"
      ],
      "author": {
        "name": "Ari Savolainen",
        "email": "ari.m.savolainen@gmail.com",
        "time": "Sat Aug 06 19:43:07 2011 +0300"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Aug 07 04:52:23 2011 -0400"
      },
      "message": "Fix POSIX ACL permission check\n\nAfter commit 3567866bf261: \"RCUify freeing acls, let check_acl() go ahead in\nRCU mode if acl is cached\" posix_acl_permission is being called with an\nunsupported flag and the permission check fails. This patch fixes the issue.\n\nSigned-off-by: Ari Savolainen \u003cari.m.savolainen@gmail.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "3ddcd0569cd68f00f3beae9a7959b72918bb91f4",
      "tree": "3f7c591316560b1c22e2cc0700fbcd29aa3fbd7f",
      "parents": [
        "830c0f0edca67403d361fe976a25b17356c11f19"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 06 22:45:50 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 06 22:53:23 2011 -0700"
      },
      "message": "vfs: optimize inode cache access patterns\n\nThe inode structure layout is largely random, and some of the vfs paths\nreally do care.  The path lookup in particular is already quite D$\nintensive, and profiles show that accessing the \u0027inode-\u003ei_op-\u003exyz\u0027\nfields is quite costly.\n\nWe already optimized the dcache to not unnecessarily load the d_op\nstructure for members that are often NULL using the DCACHE_OP_xyz bits\nin dentry-\u003ed_flags, and this does something very similar for the inode\nops that are used during pathname lookup.\n\nIt also re-orders the fields so that the fields accessed by \u0027stat\u0027 are\ntogether at the beginning of the inode structure, and roughly in the\norder accessed.\n\nThe effect of this seems to be in the 1-2% range for an empty kernel\n\"make -j\" run (which is fairly kernel-intensive, mostly in filename\nlookup), so it\u0027s visible.  The numbers are fairly noisy, though, and\nlikely depend a lot on exact microarchitecture.  So there\u0027s more tuning\nto be done.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3567866bf26190d1e734c975c907eb06e923ba23",
      "tree": "60d6b71d8ec821b121e6ab0756833d79c912908e",
      "parents": [
        "951c0d660a7c35286e401ca6d6ef38c9d49643c7"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Aug 02 21:32:13 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Aug 03 00:58:42 2011 -0400"
      },
      "message": "RCUify freeing acls, let check_acl() go ahead in RCU mode if acl is cached\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "5a30d8a2b8ddd5102c440c7e5a7c8e1fd729c818",
      "tree": "005d290c2390207a485042687ca018afbefa2993",
      "parents": [
        "b4aff1f874f679320c03e3d97b60fc7babfd4623"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Mon Jul 11 14:20:57 2011 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 01 01:38:01 2011 -0400"
      },
      "message": "VFS: Fix automount for negative autofs dentries\n\nAutofs may set the DCACHE_NEED_AUTOMOUNT flag on negative dentries.  These\nneed attention from the automounter daemon regardless of the LOOKUP_FOLLOW flag.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Ian Kent \u003craven@themaw.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "84635d68be4b846ba984a89f386524153330c597",
      "tree": "f9195d7eecccef6e421e483fa18755706bc2ad66",
      "parents": [
        "45b583b10a8b438b970e95a7d1d4db22c9e35004"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 22:47:03 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 22:47:03 2011 -0700"
      },
      "message": "vfs: fix check_acl compile error when CONFIG_FS_POSIX_ACL is  not set\n\nCommit e77819e57f08 (\"vfs: move ACL cache lookup into generic code\")\ndidn\u0027t take the FS_POSIX_ACL config variable into account - when that is\nnot set, ACL\u0027s go away, and the cache helper functions do not exist,\ncausing compile errors like\n\n  fs/namei.c: In function \u0027check_acl\u0027:\n  fs/namei.c:191:10: error: implicit declaration of function \u0027negative_cached_acl\u0027\n  fs/namei.c:196:2: error: implicit declaration of function \u0027get_cached_acl\u0027\n  fs/namei.c:196:6: warning: assignment makes pointer from integer without a cast\n  fs/namei.c:212:11: error: implicit declaration of function \u0027set_cached_acl\u0027\n\nReported-by: Markus Trippelsdorf \u003cmarkus@trippelsdorf.de\u003e\nAcked-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "14067ff536286bd2f7f79d46337d2228b12ef880",
      "tree": "74028825cc4562caf4c12cd96aebdce96aa6092c",
      "parents": [
        "750e06992d49666a7589aac555eb3bb68e4dbb88"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 19:55:52 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 19:55:52 2011 -0700"
      },
      "message": "vfs: make gcc generate more obvious code for acl permission checking\n\nThe \"fsuid is the inode owner\" case is not necessarily always the likely\ncase, but it\u0027s the case that doesn\u0027t do anything odd and that we want in\nstraight-line code.  Make gcc not generate random \"jump around for the\nfun of it\" code.\n\nThis just helps me read profiles.  That thing is one of the hottest\nparts of the whole pathname lookup.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4e34e719e457f2e031297175410fc0bd4016a085",
      "tree": "ab969a371e0d2efc6bfbf503ca6cdfce3af3bf6c",
      "parents": [
        "edde854e8bb34a7f32fa993d721f1da0faf64165"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Jul 23 17:37:31 2011 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jul 25 14:30:23 2011 -0400"
      },
      "message": "fs: take the ACL checks to common code\n\nReplace the -\u003echeck_acl method with a -\u003eget_acl method that simply reads an\nACL from disk after having a cache miss.  This means we can replace the ACL\nchecking boilerplate code with a single implementation in namei.c.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "e77819e57f0817c6dc7cadd061acd70c604cbce2",
      "tree": "f5d7aba2dfbb747a97d783b7cc6a486922c42559",
      "parents": [
        "3ca30d40a91fb9b9871e61d5dea2c1a895906a15"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 19:30:19 2011 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jul 25 14:23:39 2011 -0400"
      },
      "message": "vfs: move ACL cache lookup into generic code\n\nThis moves logic for checking the cached ACL values from low-level\nfilesystems into generic code.  The end result is a streamlined ACL\ncheck that doesn\u0027t need to load the inode-\u003ei_op-\u003echeck_acl pointer at\nall for the common cached case.\n\nThe filesystems also don\u0027t need to check for a non-blocking RCU walk\ncase in their acl_check() functions, because that is all handled at a\nVFS layer.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "8c5dc70aae29d2571c0f461d69b37e4e6e01ff4c",
      "tree": "8f8ef804a7e0df8b432d042d0b029515a5a8ada5",
      "parents": [
        "e46ebd27823b27273da780376d54c080250ff1a2"
      ],
      "author": {
        "name": "Tobias Klauser",
        "email": "tklauser@distanz.ch",
        "time": "Fri Jul 01 13:44:51 2011 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:47:43 2011 -0400"
      },
      "message": "VFS: Fixup kerneldoc for generic_permission()\n\nThe flags parameter went away in\nd749519b444db985e40b897f73ce1898b11f997e\n\nSigned-off-by: Tobias Klauser \u003ctklauser@distanz.ch\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "e3c3d9c838d48c0341c40ea45ee087e3d8c8ea39",
      "tree": "4ed2993e4c1af8aa725b2bd138c0a6967d33384b",
      "parents": [
        "e0a0124936171af6156b80fe8ac8799f039e767f"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 27 17:14:56 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:44:16 2011 -0400"
      },
      "message": "unexport kern_path_parent()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "e0a0124936171af6156b80fe8ac8799f039e767f",
      "tree": "5eed31f5b5dbf43f9a4d0e14fb4f9e1f9bcfd6d0",
      "parents": [
        "ed75e95de574c99575e5f3e1d9ca59ea8c12a9cb"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 27 17:00:37 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:44:14 2011 -0400"
      },
      "message": "switch vfs_path_lookup() to struct path\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ed75e95de574c99575e5f3e1d9ca59ea8c12a9cb",
      "tree": "9b79ea8f3b30f2589d2edf773307bdc6528ef3e3",
      "parents": [
        "5da4e689449ad99ab31cf2208d99eddfce0498ba"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 27 16:53:43 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:44:12 2011 -0400"
      },
      "message": "kill lookup_create()\n\nfolded into the only caller (kern_path_create())\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "dae6ad8f37529963ae7df52baaccf056b38f210e",
      "tree": "1bfc6f766601e744c2c2c064b97cdefdcca4ad5c",
      "parents": [
        "49084c3bb2055c401f3493c13edae14d49128ca0"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jun 26 11:50:15 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:44:05 2011 -0400"
      },
      "message": "new helpers: kern_path_create/user_path_create\n\ncombination of kern_path_parent() and lookup_create().  Does *not*\nexpose struct nameidata to caller.  Syscalls converted to that...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "49084c3bb2055c401f3493c13edae14d49128ca0",
      "tree": "354b13abe17f898bdcb24c11b961095f5023b832",
      "parents": [
        "8aeb376ca0fe61038166c3b8243c678addb80abf"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jun 25 21:59:52 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:44:03 2011 -0400"
      },
      "message": "kill LOOKUP_CONTINUE\n\nLOOKUP_PARENT is equivalent to it now\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "8a5e929dd2e05ab4d3d89f58c5e8fca596af8f3a",
      "tree": "8cbed05fcd99d24e881e5ea12d8a954865e31085",
      "parents": [
        "554a8b9f54cd7ca2b89f5dc227df08be082fae0d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jun 25 19:15:54 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:52 2011 -0400"
      },
      "message": "don\u0027t transliterate lower bits of -\u003eintent.open.flags to FMODE_...\n\n-\u003ecreate() instances are much happier that way...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "554a8b9f54cd7ca2b89f5dc227df08be082fae0d",
      "tree": "d8188a1503e744fa64dbabe6e585065e5234683b",
      "parents": [
        "f7c85868fcacc331dd3454a4f08f006d7942521f"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 23 12:35:50 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:49 2011 -0400"
      },
      "message": "Don\u0027t pass nameidata when calling vfs_create() from mknod()\n\nAll instances can cope with that now (and ceph one actually\nstarts working properly).\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d2d9e9fbc2f8f492dae373482da61d34475c53c1",
      "tree": "5d881318daae1c85d9544d18500eca4d175e76e7",
      "parents": [
        "4ad5abb3d01a2c10854969b00982fadb130784a6"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 10:55:26 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:34 2011 -0400"
      },
      "message": "merge do_revalidate() into its only caller\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4ad5abb3d01a2c10854969b00982fadb130784a6",
      "tree": "757ad9baeab65982e8c8ed61b222c8969b3dbf43",
      "parents": [
        "d594e7ec4da6c1a527dea4965eee37cd785792b8"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 19:57:03 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:32 2011 -0400"
      },
      "message": "no reason to keep exec_permission() separate now\n\ncache footprint alone makes it a bad idea...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d594e7ec4da6c1a527dea4965eee37cd785792b8",
      "tree": "b1c50c217309934a25449052625747927cbe4b45",
      "parents": [
        "eecdd358b467405a084d400d5ec571bbdbfe97a3"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 19:55:42 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:30 2011 -0400"
      },
      "message": "massage generic_permission() to treat directories on a separate path\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "eecdd358b467405a084d400d5ec571bbdbfe97a3",
      "tree": "357332873b909a19964e77dbae3c4aed5c100dc6",
      "parents": [
        "cf1dd1dae851ce5765cda5de16aa965eef7c2dbf"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 19:48:41 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:29 2011 -0400"
      },
      "message": "-\u003epermission() sanitizing: don\u0027t pass flags to exec_permission()\n\npass mask instead; kill security_inode_exec_permission() since we can use\nsecurity_inode_permission() instead.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "10556cb21a0d0b24d95f00ea6df16f599a3345b2",
      "tree": "3d7d8dfba807805a55c154f1850717bf3b49f343",
      "parents": [
        "2830ba7f34ebb27c4e5b8b6ef408cd6d74860890"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 19:28:19 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:24 2011 -0400"
      },
      "message": "-\u003epermission() sanitizing: don\u0027t pass flags to -\u003epermission()\n\nnot used by the instances anymore.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "2830ba7f34ebb27c4e5b8b6ef408cd6d74860890",
      "tree": "bbcebc14bffd000f1dfcbf37e64f56d2f49581ac",
      "parents": [
        "7e40145eb111a5192e6d819f764db9d6828d1abb"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 19:16:29 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:22 2011 -0400"
      },
      "message": "-\u003epermission() sanitizing: don\u0027t pass flags to generic_permission()\n\nredundant; all callers get it duplicated in mask \u0026 MAY_NOT_BLOCK and none of\nthem removes that bit.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7e40145eb111a5192e6d819f764db9d6828d1abb",
      "tree": "3249952a751de12465e8d66c63328445e9242f3a",
      "parents": [
        "9c2c703929e4c41210cfa6e3f599514421bab8dc"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 19:12:17 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:21 2011 -0400"
      },
      "message": "-\u003epermission() sanitizing: don\u0027t pass flags to -\u003echeck_acl()\n\nnot used in the instances anymore.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9c2c703929e4c41210cfa6e3f599514421bab8dc",
      "tree": "2086738f22755ad18ba18ab2ee0f2b23d651da60",
      "parents": [
        "1fc0f78ca9f311c6277e2f1b7655bb4d43ceb311"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 19:06:22 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:19 2011 -0400"
      },
      "message": "-\u003epermission() sanitizing: pass MAY_NOT_BLOCK to -\u003echeck_acl()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1fc0f78ca9f311c6277e2f1b7655bb4d43ceb311",
      "tree": "9c6a5879558b7a189f94eae97ac80268e63fe29b",
      "parents": [
        "178ea73521d64ba41d7aa5488fb9f549c6d4507d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 18:59:02 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:18 2011 -0400"
      },
      "message": "-\u003epermission() sanitizing: MAY_NOT_BLOCK\n\nDuplicate the flags argument into mask bitmap.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "178ea73521d64ba41d7aa5488fb9f549c6d4507d",
      "tree": "7fb6bfb6483577752e307a5bb2e3905658d44294",
      "parents": [
        "07b8ce1ee87d291ff564c02cf878fae973317a52"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 11:31:30 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:16 2011 -0400"
      },
      "message": "kill check_acl callback of generic_permission()\n\nits value depends only on inode and does not change; we might as\nwell store it in -\u003ei_op-\u003echeck_acl and be done with that.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "07b8ce1ee87d291ff564c02cf878fae973317a52",
      "tree": "94f07ed2b5d18aef71f1b28193375f88c0c947bc",
      "parents": [
        "f4d6ff89d8e54b68a4322388d26d518d6133fa4e"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 10:52:57 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:14 2011 -0400"
      },
      "message": "lockless get_write_access/deny_write_access\n\nnew helpers: atomic_inc_unless_negative()/atomic_dec_unless_positive()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f4d6ff89d8e54b68a4322388d26d518d6133fa4e",
      "tree": "57f4113a7e5ac2cc0e5a713ac31339f72de797ba",
      "parents": [
        "3bfa784a6539f91a27d7ffdd408efdb638e3bebd"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jun 19 13:14:21 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:13 2011 -0400"
      },
      "message": "move exec_permission() up to the rest of permission-related functions\n\n... and convert the comment before it into linuxdoc form.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "3bfa784a6539f91a27d7ffdd408efdb638e3bebd",
      "tree": "2fb293076c98a4bbc18fd2ddad7fdc4cea08c384",
      "parents": [
        "1b5d783c94c328d406e801566f161adcfb018dda"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jun 19 12:55:10 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:11 2011 -0400"
      },
      "message": "kill file_permission() completely\n\nconvert the last remaining caller to inode_permission()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "78f32a9b479e9b9f1ce2bf620a7602c1cdbc4c8e",
      "tree": "1c1d61bbe0587edb29f1290efaafcdeee0cb814e",
      "parents": [
        "6f2861097467852f2271c2b40f9c3d1d01757048"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jun 19 11:54:42 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:08 2011 -0400"
      },
      "message": "switch path_init() to exec_permission()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4cf27141cbe0239f48ec6f0b37bad347d51d1785",
      "tree": "ef2b247dc3cbbd795331b8937d3c29e5fc3c7b85",
      "parents": [
        "43e15cdbefea4ce6d68113de98d4f61c0cf45687"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jun 19 01:50:08 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:05 2011 -0400"
      },
      "message": "make exec_permission(dir) really equivalent to inode_permission(dir, MAY_EXEC)\n\ncapability overrides apply only to the default case; if fs has -\u003epermission()\nthat does _not_ call generic_permission(), we have no business doing them.\nMoreover, if it has -\u003epermission() that does call generic_permission(), we\nhave no need to recheck capabilities.\n\nBesides, the capability overrides should apply only if we got EACCES from\nacl_permission_check(); any other value (-EIO, etc.) should be returned\nto caller, capabilities or not capabilities.\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": "59430262401bec02d415179c43dbe5b8819c09ce",
      "tree": "18caba988f1fb650bb804727de06adc73953b2c6",
      "parents": [
        "fec11dd9a0109fe52fd631e5c510778d6cbff6cc"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 18 15:43:29 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 19 21:49:01 2011 -0700"
      },
      "message": "vfs: fix race in rcu lookup of pruned dentry\n\nDon\u0027t update *inode in __follow_mount_rcu() until we\u0027d verified that\nthere is mountpoint there.  Kudos to Hugh Dickins for catching that\none in the first place and eventually figuring out the solution (and\ncatching a braino in the earlier version of patch).\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "94c0d4ecbe7f9fe56e052b26b2ab484e246c07b4",
      "tree": "aa6d28122deb93e6f14b89d78987ef91d722b59d",
      "parents": [
        "258e43fdb00c73d424b114ae3850accd55b27cbb"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jul 12 21:40:23 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jul 12 21:40:23 2011 -0400"
      },
      "message": "Fix -\u003ed_lock locking order in unlazy_walk()\n\nMake sure that child is still a child of parent before nested locking\nof child-\u003ed_lock in unlazy_walk(); otherwise we are risking a violation\nof locking order and deadlocks.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "8e833fd2e1f0107ee7a4b6bc4de3c9f0e9b0ed41",
      "tree": "adf3e53b81e9e52874fc1f38eeb09065fae5cf02",
      "parents": [
        "6291176bcd71a2766a19a10cbd9bab07d289e1d7"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jun 19 01:56:53 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 10:45:56 2011 -0400"
      },
      "message": "fix comment in generic_permission()\n\nCAP_DAC_OVERRIDE is enough for MAY_EXEC on directory, even if\nno exec bits are set.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6291176bcd71a2766a19a10cbd9bab07d289e1d7",
      "tree": "123ca2c96c0614b94ad2065174f5c1c77db45c12",
      "parents": [
        "1aec7036d0c2996c86ce483ca0a28f3b20807b43"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jun 17 19:20:48 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 10:45:49 2011 -0400"
      },
      "message": "kill obsolete comment for follow_down()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "8aef18845266f5c05904c610088f2d1ed58f6be3",
      "tree": "fbdecafcd5e5d15445af18119cc8ee2e9b2cb850",
      "parents": [
        "50338b889dc504c69e0cb316ac92d1b9e51f3c8a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@ZenIV.linux.org.uk",
        "time": "Thu Jun 16 15:10:06 2011 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 16 11:28:16 2011 -0400"
      },
      "message": "VFS: Fix vfsmount overput on simultaneous automount\n\n[Kudos to dhowells for tracking that crap down]\n\nIf two processes attempt to cause automounting on the same mountpoint at the\nsame time, the vfsmount holding the mountpoint will be left with one too few\nreferences on it, causing a BUG when the kernel tries to clean up.\n\nThe problem is that lock_mount() drops the caller\u0027s reference to the\nmountpoint\u0027s vfsmount in the case where it finds something already mounted on\nthe mountpoint as it transits to the mounted filesystem and replaces path-\u003emnt\nwith the new mountpoint vfsmount.\n\nDuring a pathwalk, however, we don\u0027t take a reference on the vfsmount if it is\nthe same as the one in the nameidata struct, but do_add_mount() doesn\u0027t know\nthis.\n\nThe fix is to make sure we have a ref on the vfsmount of the mountpoint before\ncalling do_add_mount().  However, if lock_mount() doesn\u0027t transit, we\u0027re then\nleft with an extra ref on the mountpoint vfsmount which needs releasing.\nWe can handle that in follow_managed() by not making assumptions about what\nwe can and what we cannot get from lookup_mnt() as the current code does.\n\nThe callers of follow_managed() expect that reference to path-\u003emnt will be\ngrabbed iff path-\u003emnt has been changed.  follow_managed() and follow_automount()\nkeep track of whether such reference has been grabbed and assume that it\u0027ll\nhappen in those and only those cases that\u0027ll have us return with changed\npath-\u003emnt.  That assumption is almost correct - it breaks in case of\nracing automounts and in even harder to hit race between following a mountpoint\nand a couple of mount --move.  The thing is, we don\u0027t need to make that\nassumption at all - after the end of loop in follow_manage() we can check\nif path-\u003emnt has ended up unchanged and do mntput() if needed.\n\nThe BUG can be reproduced with the following test program:\n\n\t#include \u003cstdio.h\u003e\n\t#include \u003csys/types.h\u003e\n\t#include \u003csys/stat.h\u003e\n\t#include \u003cunistd.h\u003e\n\t#include \u003csys/wait.h\u003e\n\tint main(int argc, char **argv)\n\t{\n\t\tint pid, ws;\n\t\tstruct stat buf;\n\t\tpid \u003d fork();\n\t\tstat(argv[1], \u0026buf);\n\t\tif (pid \u003e 0) wait(\u0026ws);\n\t\treturn 0;\n\t}\n\nand the following procedure:\n\n (1) Mount an NFS volume that on the server has something else mounted on a\n     subdirectory.  For instance, I can mount / from my server:\n\n\tmount warthog:/ /mnt -t nfs4 -r\n\n     On the server /data has another filesystem mounted on it, so NFS will see\n     a change in FSID as it walks down the path, and will mark /mnt/data as\n     being a mountpoint.  This will cause the automount code to be triggered.\n\n     !!! Do not look inside the mounted fs at this point !!!\n\n (2) Run the above program on a file within the submount to generate two\n     simultaneous automount requests:\n\n\t/tmp/forkstat /mnt/data/testfile\n\n (3) Unmount the automounted submount:\n\n\tumount /mnt/data\n\n (4) Unmount the original mount:\n\n\tumount /mnt\n\n     At this point the kernel should throw a BUG with something like the\n     following:\n\n\tBUG: Dentry ffff880032e3c5c0{i\u003d2,n\u003d} still in use (1) [unmount of nfs4 0:12]\n\nNote that the bug appears on the root dentry of the original mount, not the\nmountpoint and not the submount because sys_umount() hasn\u0027t got to its final\nmntput_no_expire() yet, but this isn\u0027t so obvious from the call trace:\n\n [\u003cffffffff8117cd82\u003e] shrink_dcache_for_umount+0x69/0x82\n [\u003cffffffff8116160e\u003e] generic_shutdown_super+0x37/0x15b\n [\u003cffffffffa00fae56\u003e] ? nfs_super_return_all_delegations+0x2e/0x1b1 [nfs]\n [\u003cffffffff811617f3\u003e] kill_anon_super+0x1d/0x7e\n [\u003cffffffffa00d0be1\u003e] nfs4_kill_super+0x60/0xb6 [nfs]\n [\u003cffffffff81161c17\u003e] deactivate_locked_super+0x34/0x83\n [\u003cffffffff811629ff\u003e] deactivate_super+0x6f/0x7b\n [\u003cffffffff81186261\u003e] mntput_no_expire+0x18d/0x199\n [\u003cffffffff811862a8\u003e] mntput+0x3b/0x44\n [\u003cffffffff81186d87\u003e] release_mounts+0xa2/0xbf\n [\u003cffffffff811876af\u003e] sys_umount+0x47a/0x4ba\n [\u003cffffffff8109e1ca\u003e] ? trace_hardirqs_on_caller+0x1fd/0x22f\n [\u003cffffffff816ea86b\u003e] system_call_fastpath+0x16/0x1b\n\nas do_umount() is inlined.  However, you can see release_mounts() in there.\n\nNote also that it may be necessary to have multiple CPU cores to be able to\ntrigger this bug.\n\nTested-by: Jeff Layton \u003cjlayton@redhat.com\u003e\nTested-by: Ian Kent \u003craven@themaw.net\u003e\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "50338b889dc504c69e0cb316ac92d1b9e51f3c8a",
      "tree": "8e353de07b21b350664eff5d69f3a67014d01bcd",
      "parents": [
        "a685e08987d1edf1995b76511d4c98ea0e905377"
      ],
      "author": {
        "name": "Török Edwin",
        "email": "edwintorok@gmail.com",
        "time": "Thu Jun 16 00:06:14 2011 +0300"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 16 11:27:39 2011 -0400"
      },
      "message": "fix wrong iput on d_inode introduced by e6bc45d65d\n\nGit bisection shows that commit e6bc45d65df8599fdbae73be9cec4ceed274db53 causes\nBUG_ONs under high I/O load:\n\nkernel BUG at fs/inode.c:1368!\n[ 2862.501007] Call Trace:\n[ 2862.501007]  [\u003cffffffff811691d8\u003e] d_kill+0xf8/0x140\n[ 2862.501007]  [\u003cffffffff81169c19\u003e] dput+0xc9/0x190\n[ 2862.501007]  [\u003cffffffff8115577f\u003e] fput+0x15f/0x210\n[ 2862.501007]  [\u003cffffffff81152171\u003e] filp_close+0x61/0x90\n[ 2862.501007]  [\u003cffffffff81152251\u003e] sys_close+0xb1/0x110\n[ 2862.501007]  [\u003cffffffff814c14fb\u003e] system_call_fastpath+0x16/0x1b\n\nA reliable way to reproduce this bug is:\nLogin to KDE, run \u0027rsnapshot sync\u0027, and apt-get install openjdk-6-jdk,\nand apt-get remove openjdk-6-jdk.\n\nThe buggy part of the patch is this:\n\tstruct inode *inode \u003d NULL;\n.....\n-               if (nd.last.name[nd.last.len])\n-                       goto slashes;\n                inode \u003d dentry-\u003ed_inode;\n-               if (inode)\n-                       ihold(inode);\n+               if (nd.last.name[nd.last.len] || !inode)\n+                       goto slashes;\n+               ihold(inode)\n...\n\tif (inode)\n\t\tiput(inode);\t/* truncate the inode here */\n\nIf nd.last.name[nd.last.len] is nonzero (and thus goto slashes branch is taken),\nand dentry-\u003ed_inode is non-NULL, then this code now does an additional iput on\nthe inode, which is wrong.\n\nFix this by only setting the inode variable if nd.last.name[nd.last.len] is 0.\n\nReference: https://lkml.org/lkml/2011/6/15/50\nReported-by: Norbert Preining \u003cpreining@logic.at\u003e\nReported-by: Török Edwin \u003cedwintorok@gmail.com\u003e\nCc: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Török Edwin \u003cedwintorok@gmail.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "e6bc45d65df8599fdbae73be9cec4ceed274db53",
      "tree": "2a9a5a0c0835b431d605332ebbfa6dad66e069f0",
      "parents": [
        "9054760ff585a7fa436599990b63a585ae89ff4d"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 06 19:19:40 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jun 07 08:51:14 2011 -0400"
      },
      "message": "vfs: make unlink() and rmdir() return ENOENT in preference to EROFS\n\nIf user space attempts to remove a non-existent file or directory, and\nthe file system is mounted read-only, return ENOENT instead of EROFS.\nEither error code is arguably valid/correct, but ENOENT is a more\nspecific error message.\n\nReported-by: Michael Tokarev \u003cmjt@tls.msk.ru\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "3cebde2413ba42504cf2c10ec1d47582912435cd",
      "tree": "296302cd2f065c125b1c932caa3bd836720c7efe",
      "parents": [
        "55922c9d1b84b89cb946c777fddccb3247e7df2c"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sun May 29 21:20:59 2011 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon May 30 01:48:27 2011 -0400"
      },
      "message": "vfs: shrink_dcache_parent before rmdir, dir rename\n\nThe dentry_unhash push-down series missed that shink_dcache_parent needs to\nbe called prior to rmdir or dir rename to clear DCACHE_REFERENCED and\nallow efficient dentry reclaim.\n\nReported-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d6e9bd256c88ce5f4b668249e363a74f51393daa",
      "tree": "87c70fb00c36164136fbdc0eb2daf3dbe79c80b1",
      "parents": [
        "dea3937619cb67d2ad08e2d29ae923875b1eeee9"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri May 27 07:03:15 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri May 27 07:03:15 2011 -0400"
      },
      "message": "Lift the check for automount points into do_lookup()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "dea3937619cb67d2ad08e2d29ae923875b1eeee9",
      "tree": "d4c4e3ed44cff625f6d2730c2288961922357ba2",
      "parents": [
        "287548e46aa752ce9bb87fcff46f8aa794cc5037"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri May 27 06:53:39 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri May 27 07:01:49 2011 -0400"
      },
      "message": "Trim excessive arguments of follow_mount_rcu()\n\n... and kill a useless local variable in follow_dotdot_rcu(), while\nwe are at it - follow_mount_rcu(nd, path, inode) *always* assigned\nvalue to *inode, and always it had been path-\u003edentry-\u003ed_inode (aka\nnd-\u003epath.dentry-\u003ed_inode, since it always got \u0026nd-\u003epath as the second\nargument).\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "287548e46aa752ce9bb87fcff46f8aa794cc5037",
      "tree": "9ef364213a2ab4f540dd39a71b95e1f0ed46aaa5",
      "parents": [
        "dc7acbb2518f250050179c8581a972df3b6a24f1"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri May 27 06:50:06 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri May 27 06:51:56 2011 -0400"
      },
      "message": "split __follow_mount_rcu() into normal and .. cases\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "32e51f141fd8d880f57b6a2eb53ce72856254d4a",
      "tree": "d8d7a0d503533a03fb07b2ebd5eccd9043f2d228",
      "parents": [
        "ca16d140af91febe25daeb9e032bf8bd46b8c31f",
        "b6ff24a333267a6810e28ee5b9fc539d149c52f0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 26 09:52:14 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 26 09:52:14 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: (25 commits)\n  cifs: remove unnecessary dentry_unhash on rmdir/rename_dir\n  ocfs2: remove unnecessary dentry_unhash on rmdir/rename_dir\n  exofs: remove unnecessary dentry_unhash on rmdir/rename_dir\n  nfs: remove unnecessary dentry_unhash on rmdir/rename_dir\n  ext2: remove unnecessary dentry_unhash on rmdir/rename_dir\n  ext3: remove unnecessary dentry_unhash on rmdir/rename_dir\n  ext4: remove unnecessary dentry_unhash on rmdir/rename_dir\n  btrfs: remove unnecessary dentry_unhash in rmdir/rename_dir\n  ceph: remove unnecessary dentry_unhash calls\n  vfs: clean up vfs_rename_other\n  vfs: clean up vfs_rename_dir\n  vfs: clean up vfs_rmdir\n  vfs: fix vfs_rename_dir for FS_RENAME_DOES_D_MOVE filesystems\n  libfs: drop unneeded dentry_unhash\n  vfs: update dentry_unhash() comment\n  vfs: push dentry_unhash on rename_dir into file systems\n  vfs: push dentry_unhash on rmdir into file systems\n  vfs: remove dget() from dentry_unhash()\n  vfs: dentry_unhash immediately prior to rmdir\n  vfs: Block mmapped writes while the fs is frozen\n  ...\n"
    },
    {
      "commit": "51892bbb57e87854c27c105317797823f8891e68",
      "tree": "8d7fd27631bc868ebac7de8c3baaab7a8111591b",
      "parents": [
        "9055cba711891a6313232629cd6bbca7c901e07f"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 24 13:06:13 2011 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 26 07:26:53 2011 -0400"
      },
      "message": "vfs: clean up vfs_rename_other\n\nSimplify control flow to match vfs_rename_dir.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9055cba711891a6313232629cd6bbca7c901e07f",
      "tree": "877880a16f0ec062c82ef36886ca5c2257ee9e89",
      "parents": [
        "912dbc15d953791f013b0c64a8093ab0490e5f40"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 24 13:06:12 2011 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 26 07:26:52 2011 -0400"
      },
      "message": "vfs: clean up vfs_rename_dir\n\nSimplify control flow through vfs_rename_dir.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "912dbc15d953791f013b0c64a8093ab0490e5f40",
      "tree": "90cdea27c906f37bfc58ba909431b709c7699879",
      "parents": [
        "b5afd2c406f5c6272d916fd705f44f070fbbc0ba"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 24 13:06:11 2011 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 26 07:26:51 2011 -0400"
      },
      "message": "vfs: clean up vfs_rmdir\n\nSimplify the control flow with an out label.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b5afd2c406f5c6272d916fd705f44f070fbbc0ba",
      "tree": "93378abaf5120d5fe449ee77234368291331615a",
      "parents": [
        "5c5d3f3b871a719e2c6413b85009c723adeb27e1"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue May 24 13:06:10 2011 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 26 07:26:50 2011 -0400"
      },
      "message": "vfs: fix vfs_rename_dir for FS_RENAME_DOES_D_MOVE filesystems\n\nvfs_rename_dir() doesn\u0027t properly account for filesystems with\nFS_RENAME_DOES_D_MOVE.  If new_dentry has a target inode attached, it\nunhashes the new_dentry prior to the rename() iop and rehashes it after,\nbut doesn\u0027t account for the possibility that rename() may have swapped\n{old,new}_dentry.  For FS_RENAME_DOES_D_MOVE filesystems, it rehashes\nnew_dentry (now the old renamed-from name, which d_move() expected to go\naway), such that a subsequent lookup will find it.  Currently all\nFS_RENAME_DOES_D_MOVE filesystems compensate for this by failing in\nd_revalidate.\n\nThe bug was introduced by: commit 349457ccf2592c14bdf13b6706170ae2e94931b1\n\"[PATCH] Allow file systems to manually d_move() inside of -\u003erename()\"\n\nFix by not rehashing the new dentry.  Rehashing used to be needed by\nd_move() but isn\u0027t anymore.\n\nReported-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a71905f0db41d4b2b01044fb40f97656fefc44a7",
      "tree": "31d286471b6d14be1a1531acf4b04d5fc8d47268",
      "parents": [
        "e4eaac06bcccb2a70bca6a2de9871882dce2aa14"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 24 13:06:08 2011 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 26 07:26:49 2011 -0400"
      },
      "message": "vfs: update dentry_unhash() comment\n\nThe helper is now only called by file systems, not the VFS.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "e4eaac06bcccb2a70bca6a2de9871882dce2aa14",
      "tree": "ca6736d96294cd6e65a1c3055718bfd5adc7336e",
      "parents": [
        "79bf7c732b5ff75b96022ed9d29181afd3d2509c"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 24 13:06:07 2011 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 26 07:26:48 2011 -0400"
      },
      "message": "vfs: push dentry_unhash on rename_dir into file systems\n\nOnly a few file systems need this.  Start by pushing it down into each\nrename method (except gfs2 and xfs) so that it can be dealt with on a\nper-fs basis.\n\nAcked-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "79bf7c732b5ff75b96022ed9d29181afd3d2509c",
      "tree": "74b8cc690f9a37fff02d0685464e1c695a25ef94",
      "parents": [
        "64252c75a2196a0cf1e0d3777143ecfe0e3ae650"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 24 13:06:06 2011 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 26 07:26:47 2011 -0400"
      },
      "message": "vfs: push dentry_unhash on rmdir into file systems\n\nOnly a few file systems need this.  Start by pushing it down into each\nfs rmdir method (except gfs2 and xfs) so it can be dealt with on a per-fs\nbasis.\n\nThis does not change behavior for any in-tree file systems.\n\nAcked-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "64252c75a2196a0cf1e0d3777143ecfe0e3ae650",
      "tree": "8534f12a507ef5aee91e302f3e54cf8a4440fc82",
      "parents": [
        "48293699a09324d2e3c66bd53d10eed6d67937a0"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 24 13:06:05 2011 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 26 07:26:46 2011 -0400"
      },
      "message": "vfs: remove dget() from dentry_unhash()\n\nThis serves no useful purpose that I can discern.  All callers (rename,\nrmdir) hold their own reference to the dentry.\n\nA quick audit of all file systems showed no relevant checks on the value\nof d_count in vfs_rmdir/vfs_rename_dir paths.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "48293699a09324d2e3c66bd53d10eed6d67937a0",
      "tree": "5554ad59665d62ebc36ed16d5e13b0badea46a69",
      "parents": [
        "ea13a86463fd0c26c2c209c53dc46b8eff81bad4"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 24 13:06:04 2011 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 26 07:26:46 2011 -0400"
      },
      "message": "vfs: dentry_unhash immediately prior to rmdir\n\nThis presumes that there is no reason to unhash a dentry if we fail because\nit is a mountpoint or the LSM check fails, and that the LSM checks do not\ndepend on the dentry being unhashed.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9f1fafee9e42b73beb3aa51ab2d6a19bfddeb5fe",
      "tree": "0c0251b271371e572daf29d2a2282c323c557e8c",
      "parents": [
        "19660af736ba00e1620970601dd313efedbbcfd2"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 25 11:00:12 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 26 07:26:32 2011 -0400"
      },
      "message": "merge handle_reval_dot and nameidata_drop_rcu_last\n\nnew helper: complete_walk().  Done on successful completion\nof walk, drops out of RCU mode, does d_revalidate of final\nresult if that hadn\u0027t been done already.\n\nhandle_reval_dot() and nameidata_drop_rcu_last() subsumed into\nthat one; callers converted to use of complete_walk().\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "19660af736ba00e1620970601dd313efedbbcfd2",
      "tree": "07f6fcbbb34161cab29474d80afe01dff7f7d87d",
      "parents": [
        "1be6a1f89f131e9c3d22f819ec542be9cda8c9e3"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 25 10:32:48 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 26 07:26:02 2011 -0400"
      },
      "message": "consolidate nameidata_..._drop_rcu()\n\nMerge these into a single function (unlazy_walk(nd, dentry)),\nkill ..._maybe variants\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1a4022f88d40e1255920b017556092ab926d7f66",
      "tree": "f4e54841dae0ecf1324a3002bc540f8b6ba441d5",
      "parents": [
        "052497553e5dedc04c43800820c1d5788201cc71"
      ],
      "author": {
        "name": "Erez Zadok",
        "email": "ezk@fsl.cs.sunysb.edu",
        "time": "Sat May 21 01:19:59 2011 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat May 21 00:12:16 2011 -0700"
      },
      "message": "VFS: move BUG_ON test for symlink nd-\u003edepth after current-\u003elink_count test\n\nThis solves a serious VFS-level bug in nested_symlink (which was\nrewritten from do_follow_link), and follows the order of depth tests\nthat existed before.\n\nThe bug triggers a BUG_ON in fs/namei.c:1381, when running racer with\nsymlink and rename ops.\n\nSigned-off-by: Erez Zadok \u003cezk@cs.sunysb.edu\u003e\nAcked-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCc: stable@kernel.org\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "26cf46be954a2dd391d32eeaf7d07c3a953dcc5a",
      "tree": "6445ebf0328e3227178f378c97be6b083cad087b",
      "parents": [
        "47a150edc2ae734c0f4bf50aa19499e23b9a46f8"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 13 11:51:01 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 13 11:51:01 2011 -0700"
      },
      "message": "vfs: micro-optimize acl_permission_check()\n\nIt\u0027s a hot function, and we\u0027re better off not mixing types in the mask\ncalculations.  The compiler just ends up mixing 16-bit and 32-bit\noperations, for no good reason.\n\nSo do everything in \u0027unsigned int\u0027 rather than mixing \u0027unsigned int\u0027\nmasking with a \u0027umode_t\u0027 (16-bit) mode variable.\n\nThis, together with the parent commit (47a150edc2ae: \"Cache user_ns in\nstruct cred\") makes acl_permission_check() much nicer.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c1530019e311c91d14b24d8e74d233152d806e45",
      "tree": "37bd46f1d30534d8f03a186338295b653e75886c",
      "parents": [
        "5853b4f06f7b9b56f37f457d7923f7b96496074e"
      ],
      "author": {
        "name": "Tim Chen",
        "email": "tim.c.chen@linux.intel.com",
        "time": "Fri Apr 15 11:39:29 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 15 15:28:12 2011 -0700"
      },
      "message": "vfs: Fix absolute RCU path walk failures due to uninitialized seq number\n\nDuring RCU walk in path_lookupat and path_openat, the rcu lookup\nfrequently failed if looking up an absolute path, because when root\ndirectory was looked up, seq number was not properly set in nameidata.\n\nWe dropped out of RCU walk in nameidata_drop_rcu due to mismatch in\ndirectory entry\u0027s seq number.  We reverted to slow path walk that need\nto take references.\n\nWith the following patch, I saw a 50% increase in an exim mail server\nbenchmark throughput on a 4-socket Nehalem-EX system.\n\nSigned-off-by: Tim Chen \u003ctim.c.chen@linux.intel.com\u003e\nReviewed-by: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: stable@kernel.org (v2.6.38)\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "25985edcedea6396277003854657b5f3cb31a628",
      "tree": "f026e810210a2ee7290caeb737c23cb6472b7c38",
      "parents": [
        "6aba74f2791287ec407e0f92487a725a25908067"
      ],
      "author": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Wed Mar 30 22:57:33 2011 -0300"
      },
      "committer": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Thu Mar 31 11:26:23 2011 -0300"
      },
      "message": "Fix common misspellings\n\nFixes generated by \u0027codespell\u0027 and manually reviewed.\n\nSigned-off-by: Lucas De Marchi \u003clucas.demarchi@profusion.mobi\u003e\n"
    },
    {
      "commit": "62a7375e5d77d654695297c4b39d5d740d901184",
      "tree": "b479c60a43f22e3bb99d9ebf1af89de2a7020673",
      "parents": [
        "b81a618dcd3ea99de292dbe624f41ca68f464376"
      ],
      "author": {
        "name": "Ian Kent",
        "email": "raven@themaw.net",
        "time": "Fri Mar 25 01:51:02 2011 +0800"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 24 14:24:32 2011 -0400"
      },
      "message": "vfs - check non-mountpoint dentry might block in __follow_mount_rcu()\n\nWhen following a mount in rcu-walk mode we must check if the incoming dentry\nis telling us it may need to block, even if it isn\u0027t actually a mountpoint.\n\nSigned-off-by: Ian Kent \u003craven@themaw.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b81a618dcd3ea99de292dbe624f41ca68f464376",
      "tree": "c5fbe44f944da9d7dc0c224116be77094d379c8a",
      "parents": [
        "2f284c846331fa44be1300a3c2c3e85800268a00",
        "a9712bc12c40c172e393f85a9b2ba8db4bf59509"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 20:51:42 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 20:51:42 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  deal with races in /proc/*/{syscall,stack,personality}\n  proc: enable writing to /proc/pid/mem\n  proc: make check_mem_permission() return an mm_struct on success\n  proc: hold cred_guard_mutex in check_mem_permission()\n  proc: disable mem_write after exec\n  mm: implement access_remote_vm\n  mm: factor out main logic of access_process_vm\n  mm: use mm_struct to resolve gate vma\u0027s in __get_user_pages\n  mm: arch: rename in_gate_area_no_task to in_gate_area_no_mm\n  mm: arch: make in_gate_area take an mm_struct instead of a task_struct\n  mm: arch: make get_gate_vma take an mm_struct instead of a task_struct\n  x86: mark associated mm when running a task in 32 bit compatibility mode\n  x86: add context tag to mark mm when running a task in 32-bit compatibility mode\n  auxv: require the target to be tracable (or yourself)\n  close race in /proc/*/environ\n  report errors in /proc/*/*map* sanely\n  pagemap: close races with suid execve\n  make sessionid permissions in /proc/*/task/* match those in /proc/*\n  fix leaks in path_lookupat()\n\nFix up trivial conflicts in fs/proc/base.c\n"
    },
    {
      "commit": "2e1496707560ecf98e9b0604622c0990f94861d3",
      "tree": "d1473b70fad31a903fedc87221680678a6c6c5f6",
      "parents": [
        "e795b71799ff0b27365020c9ddaa25d0d83f99c8"
      ],
      "author": {
        "name": "Serge E. Hallyn",
        "email": "serge@hallyn.com",
        "time": "Wed Mar 23 16:43:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:47:13 2011 -0700"
      },
      "message": "userns: rename is_owner_or_cap to inode_owner_or_capable\n\nAnd give it a kernel-doc comment.\n\n[akpm@linux-foundation.org: btrfs changed in linux-next]\nSigned-off-by: Serge E. Hallyn \u003cserge.hallyn@canonical.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Daniel Lezcano \u003cdaniel.lezcano@free.fr\u003e\nAcked-by: David Howells \u003cdhowells@redhat.com\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e795b71799ff0b27365020c9ddaa25d0d83f99c8",
      "tree": "f3b628c2366f181380a8fbcd490910eb086a7b8e",
      "parents": [
        "b0e77598f87107001a00b8a4ece9c95e4254ccc4"
      ],
      "author": {
        "name": "Serge E. Hallyn",
        "email": "serge@hallyn.com",
        "time": "Wed Mar 23 16:43:25 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:47:08 2011 -0700"
      },
      "message": "userns: userns: check user namespace for task-\u003efile uid equivalence checks\n\nCheat for now and say all files belong to init_user_ns.  Next step will be\nto let superblocks belong to a user_ns, and derive inode_userns(inode)\nfrom inode-\u003ei_sb-\u003es_user_ns.  Finally we\u0027ll introduce more flexible\narrangements.\n\nChangelog:\n\tFeb 15: make is_owner_or_cap take const struct inode\n\tFeb 23: make is_owner_or_cap bool\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Serge E. Hallyn \u003cserge.hallyn@canonical.com\u003e\nAcked-by: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nAcked-by: Daniel Lezcano \u003cdaniel.lezcano@free.fr\u003e\nAcked-by: David Howells \u003cdhowells@redhat.com\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bd23a539d0733c9f9ec3f9fc628491fad2658e82",
      "tree": "b64a04b76be41fe62a734b6e9693890a76b117b3",
      "parents": [
        "eddecbb601c9ea3fab7e67d7892010fc9426d1e6"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 23 09:56:30 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 23 09:56:55 2011 -0400"
      },
      "message": "fix leaks in path_lookupat()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1aed3e4204dd787d53b3cd6363eb63bb4900c38e",
      "tree": "503582fa9f7fa68a1da7af3770d3a627d041fb52",
      "parents": [
        "7cc90cc3ffe22a0d81b8d605b20a82ec7911012d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 18 09:09:02 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 18 10:01:59 2011 -0400"
      },
      "message": "lose \u0027mounting_here\u0027 argument in -\u003ed_manage()\n\nit\u0027s always false...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7cc90cc3ffe22a0d81b8d605b20a82ec7911012d",
      "tree": "a870fc960dd10a12be6fb905ea266c65547c11bb",
      "parents": [
        "b12cea9198fa99ffd3de1776c323bc7464d26b44"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 18 09:04:20 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 18 09:04:20 2011 -0400"
      },
      "message": "don\u0027t pass \u0027mounting_here\u0027 flag to follow_down()\n\nit\u0027s always false now\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "0e794589e588a88d34e339feee50c72606fb21a7",
      "tree": "74c193941b49c0c3bfe3e0934aaf4bbdff22eab4",
      "parents": [
        "d10902812c9cd5583130a4ebb9ad19c60b68149d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 16 02:45:02 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 16 04:57:03 2011 -0400"
      },
      "message": "fix follow_link() breakage\n\ncommit 574197e0de46a8a4db5c54ef7b65e43ffa8873a7 had a missing\npiece, breaking the loop detection ;-/\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "574197e0de46a8a4db5c54ef7b65e43ffa8873a7",
      "tree": "c7669dd50705785f4632ff9b054bcd2e4614ea46",
      "parents": [
        "b356379a020bb7197603118bb1cbc903963aa198"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 22:20:34 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 17:16:25 2011 -0400"
      },
      "message": "tidy the trailing symlinks traversal up\n\n* pull the handling of current-\u003etotal_link_count into\n__do_follow_link()\n* put the common \"do -\u003eput_link() if needed and path_put() the link\"\n  stuff into a helper (put_link(nd, link, cookie))\n* rename __do_follow_link() to follow_link(), while we are at it\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b356379a020bb7197603118bb1cbc903963aa198",
      "tree": "834722d850b2f6a82a07464680244847ed477755",
      "parents": [
        "ce0525449da56444948c368f52e10f3db0465338"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 21:54:55 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 17:16:25 2011 -0400"
      },
      "message": "Turn resolution of trailing symlinks iterative everywhere\n\nThe last remaining place (resolution of nested symlink) converted\nto the loop of the same kind we have in path_lookupat() and\npath_openat().\n\nNote that we still *do* have a recursion in pathname resolution;\ncan\u0027t avoid it, really.  However, it\u0027s strictly for nested symlinks\nnow - i.e. ones in the middle of a pathname.\n\nlink_path_walk() has lost the tail now - it always walks everything\nexcept the last component.\n\ndo_follow_link() renamed to nested_symlink() and moved down.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ce0525449da56444948c368f52e10f3db0465338",
      "tree": "df50f16b0af733738b39c9430145d94e35a2abdb",
      "parents": [
        "bd92d7fed877ed1e6997e4f3f13dbcd872947653"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 21:28:04 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 17:16:25 2011 -0400"
      },
      "message": "simplify link_path_walk() tail\n\nNow that link_path_walk() is called without LOOKUP_PARENT\nonly from do_follow_link(), we can simplify the checks in\nlast component handling.  First of all, checking if we\u0027d\narrived to a directory is not needed - the caller will check\nit anyway.  And LOOKUP_FOLLOW is guaranteed to be there,\nsince we only get to that place with nd-\u003edepth \u003e 0.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "bd92d7fed877ed1e6997e4f3f13dbcd872947653",
      "tree": "184223c18695fd1b543850dc186e89faf71bb461",
      "parents": [
        "b21041d0f72899ed815bd2cbf7275339c74737b6"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 19:54:59 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 17:16:25 2011 -0400"
      },
      "message": "Make trailing symlink resolution in path_lookupat() iterative\n\nNow the only caller of link_path_walk() that does *not* pass\nLOOKUP_PARENT is do_follow_link()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b21041d0f72899ed815bd2cbf7275339c74737b6",
      "tree": "e9dddabedc599175926ea29603ca366cdc50dbaa",
      "parents": [
        "ce57dfc1791221ef58b6d6b8f5437fccefc4e187"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 20:01:51 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 17:16:25 2011 -0400"
      },
      "message": "update nd-\u003einode in __do_follow_link() instead of after do_follow_link()\n\n... and note that we only need to do it for LAST_BIND symlinks\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ce57dfc1791221ef58b6d6b8f5437fccefc4e187",
      "tree": "f4745174c126231bbd2c4a652d37f086ad035e3c",
      "parents": [
        "11a7b371b64ef39fc5fb1b6f2218eef7c4d035e3"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 13 19:58:58 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 17:16:20 2011 -0400"
      },
      "message": "pull handling of one pathname component into a helper\n\nnew helper: walk_component().  Handles everything except symlinks;\nreturns negative on error, 0 on success and 1 on symlinks we decided\nto follow.  Drops out of RCU mode on such symlinks.\n\nlink_path_walk() and do_last() switched to using that.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "11a7b371b64ef39fc5fb1b6f2218eef7c4d035e3",
      "tree": "7d2059c9570e24c7d742eedfeedf19743d05a744",
      "parents": [
        "326be7b484843988afe57566b627fb7a70beac56"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sat Jan 29 18:43:42 2011 +0530"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 17:16:05 2011 -0400"
      },
      "message": "fs: allow AT_EMPTY_PATH in linkat(), limit that to CAP_DAC_READ_SEARCH\n\nWe don\u0027t want to allow creation of private hardlinks by different application\nusing the fd passed to them via SCM_RIGHTS. So limit the null relative name\nusage in linkat syscall to CAP_DAC_READ_SEARCH\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "bcda76524cd1fa32af748536f27f674a13e56700",
      "tree": "37dbc7fb50b515f3dff820e14d92e768fb1cda31",
      "parents": [
        "1abf0c718f15a56a0a435588d1b104c7a37dc9bd"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 13 16:42:14 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 02:21:45 2011 -0400"
      },
      "message": "Allow O_PATH for symlinks\n\nAt that point we can\u0027t do almost nothing with them.  They can be opened\nwith O_PATH, we can manipulate such descriptors with dup(), etc. and\nwe can see them in /proc/*/{fd,fdinfo}/*.\n\nWe can\u0027t (and won\u0027t be able to) follow /proc/*/fd/* symlinks for those;\nthere\u0027s simply not enough information for pathname resolution to go on\nfrom such point - to resolve a symlink we need to know which directory\ndoes it live in.\n\nWe will be able to do useful things with them after the next commit, though -\nreadlinkat() and fchownat() will be possible to use with dfd being an\nO_PATH-opened symlink and empty relative pathname.  Combined with\nopen_by_handle() it\u0027ll give us a way to do realink-by-handle and\nlchown-by-handle without messing with more redundant syscalls.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1abf0c718f15a56a0a435588d1b104c7a37dc9bd",
      "tree": "91a6fae3218686b9a945569a7fa7fad120f64e94",
      "parents": [
        "f2fa2ffc2046fdc35f96366d1ec8675f4d578522"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 13 03:51:11 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 02:21:45 2011 -0400"
      },
      "message": "New kind of open files - \"location only\".\n\nNew flag for open(2) - O_PATH.  Semantics:\n\t* pathname is resolved, but the file itself is _NOT_ opened\nas far as filesystem is concerned.\n\t* almost all operations on the resulting descriptors shall\nfail with -EBADF.  Exceptions are:\n\t1) operations on descriptors themselves (i.e.\n\t\tclose(), dup(), dup2(), dup3(), fcntl(fd, F_DUPFD),\n\t\tfcntl(fd, F_DUPFD_CLOEXEC, ...), fcntl(fd, F_GETFD),\n\t\tfcntl(fd, F_SETFD, ...))\n\t2) fcntl(fd, F_GETFL), for a common non-destructive way to\n\t\tcheck if descriptor is open\n\t3) \"dfd\" arguments of ...at(2) syscalls, i.e. the starting\n\t\tpoints of pathname resolution\n\t* closing such descriptor does *NOT* affect dnotify or\nposix locks.\n\t* permissions are checked as usual along the way to file;\nno permission checks are applied to the file itself.  Of course,\ngiving such thing to syscall will result in permission checks (at\nthe moment it means checking that starting point of ....at() is\na directory and caller has exec permissions on it).\n\nfget() and fget_light() return NULL on such descriptors; use of\nfget_raw() and fget_raw_light() is needed to get them.  That protects\nexisting code from dealing with those things.\n\nThere are two things still missing (they come in the next commits):\none is handling of symlinks (right now we refuse to open them that\nway; see the next commit for semantics related to those) and another\nis descriptor passing via SCM_RIGHTS datagrams.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "aae8a97d3ec30788790d1720b71d76fd8eb44b73",
      "tree": "12dbe7afc10da3eee7ce5dfcf389b655634737e0",
      "parents": [
        "becfd1f37544798cbdfd788f32c827160fab98c1"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sat Jan 29 18:43:27 2011 +0530"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 02:21:44 2011 -0400"
      },
      "message": "fs: Don\u0027t allow to create hardlink for deleted file\n\nAdd inode-\u003ei_nlink \u003d\u003d 0 check in VFS. Some of the file systems\ndo this internally. A followup patch will remove those instance.\nThis is needed to ensure that with link by handle we don\u0027t allow\nto create hardlink of an unlinked file. The check also prevent a race\nbetween unlink and link\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f52e0c11305aa09ed56cad97ffc8f0cdc3d78b5d",
      "tree": "b04070034f8a941fe5d7e9e1b335a02784686bd5",
      "parents": [
        "5fe0c2378884e68beb532f5890cc0e3539ac747b"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 18:56:51 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 19:12:20 2011 -0400"
      },
      "message": "New AT_... flag: AT_EMPTY_PATH\n\nFor name_to_handle_at(2) we\u0027ll want both ...at()-style syscall that\nwould be usable for non-directory descriptors (with empty relative\npathname).  Introduce new flag (AT_EMPTY_PATH) to deal with that and\ncorresponding LOOKUP_EMPTY; teach user_path_at() and path_init() to\ndeal with the latter.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "73d049a40fc6269189c4e2ba6792cb5dd054883c",
      "tree": "a713747cd06926ad89bfa9b36ea13dd20bbc507f",
      "parents": [
        "5b6ca027d85b7438c84b78a54ccdc2e53f2909cd"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 11 12:08:24 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:28 2011 -0400"
      },
      "message": "open-style analog of vfs_path_lookup()\n\nnew function: file_open_root(dentry, mnt, name, flags) opens the file\nvfs_path_lookup would arrive to.\n\nNote that name can be empty; in that case the usual requirement that\ndentry should be a directory is lifted.\n\nopen-coded equivalents switched to it, may_open() got down exactly\none caller and became static.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "5b6ca027d85b7438c84b78a54ccdc2e53f2909cd",
      "tree": "e35b870101fbc6a2ea6e0399429d9c23707697f3",
      "parents": [
        "5a18fff2090c3af830d699c8ccb230498a1e37e5"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 09 23:04:47 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:27 2011 -0400"
      },
      "message": "reduce vfs_path_lookup() to do_path_lookup()\n\nNew lookup flag: LOOKUP_ROOT.  nd-\u003eroot is set (and held) by caller,\npath_init() starts walking from that place and all pathname resolution\nmachinery never drops nd-\u003eroot if that flag is set.  That turns\nvfs_path_lookup() into a special case of do_path_lookup() *and*\ngets us down to 3 callers of link_path_walk(), making it finally\nfeasible to rip the handling of trailing symlink out of link_path_walk().\nThat will not only simply the living hell out of it, but make life\nmuch simpler for unionfs merge.  Trailing symlink handling will\nbecome iterative, which is a good thing for stack footprint in\na lot of situations as well.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "5a18fff2090c3af830d699c8ccb230498a1e37e5",
      "tree": "388675113818a8d14e7cd7dc25185e1be55354f9",
      "parents": [
        "40b39136f07279fdc868a36cba050f4e84ce0ace"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 11 04:44:53 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:27 2011 -0400"
      },
      "message": "untangle do_lookup()\n\nThat thing has devolved into rats nest of gotos; sane use of unlikely()\ngets rid of that horror and gives much more readable structure:\n\t* make a fast attempt to find a dentry; false negatives are OK.\nIn RCU mode if everything went fine, we are done, otherwise just drop\nout of RCU.  If we\u0027d done (RCU) -\u003ed_revalidate() and it had not refused\noutright (i.e. didn\u0027t give us -ECHILD), remember its result.\n\t* now we are not in RCU mode and hopefully have a dentry.  If we\ndo not, lock parent, do full d_lookup() and if that has not found anything,\nallocate and call -\u003elookup().  If we\u0027d done that -\u003elookup(), remember that\ndentry is good and we don\u0027t need to revalidate it.\n\t* now we have a dentry.  If it has -\u003ed_revalidate() and we can\u0027t\nskip it, call it.\n\t* hopefully dentry is good; if not, either fail (in case of error)\nor try to invalidate it.  If d_invalidate() has succeeded, drop it and\nretry everything as if original attempt had not found a dentry.\n\t* now we can finish it up - deal with mountpoint crossing and\nautomount.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "40b39136f07279fdc868a36cba050f4e84ce0ace",
      "tree": "cd68e514f1b410d034c3b49678d15c352a38d6da",
      "parents": [
        "f374ed5fa8afed8590deaae5dc147422e0e1a6d9"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 09 16:22:18 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:27 2011 -0400"
      },
      "message": "path_openat: clean ELOOP handling a bit\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f374ed5fa8afed8590deaae5dc147422e0e1a6d9",
      "tree": "76bf116e7a8c75be60734527dd804632dee8a95b",
      "parents": [
        "6c0d46c493217cf48999b3f8808910ae534aa085"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 09 01:34:45 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:27 2011 -0400"
      },
      "message": "do_last: kill a rudiment of old -\u003ed_revalidate() workaround\n\nThere used to be time when -\u003ed_revalidate() couldn\u0027t return an error.\nSo intents code had lookup_instantiate_filp() stash ERR_PTR(error)\nin nd-\u003eintent.open.filp and had it checked after lookup_hash(), to\ncatch the otherwise silent failures.  That had been introduced by\ncommit 4af4c52f34606bdaab6930a845550c6fb02078a4.  These days\n-\u003ed_revalidate() can and does propagate errors back to callers\nexplicitly, so this check isn\u0027t needed anymore.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6c0d46c493217cf48999b3f8808910ae534aa085",
      "tree": "4c36a27f499ce8a8fb70807c78187c247e79dc65",
      "parents": [
        "ca344a894b41a133dab07dfbbdf652c053f6658c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 09 00:59:59 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:27 2011 -0400"
      },
      "message": "fold __open_namei_create() and open_will_truncate() into do_last()\n\n... and clean up a bit more\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ca344a894b41a133dab07dfbbdf652c053f6658c",
      "tree": "2ff61ce7ff0595b3200fa2d9b69e93a87e6c8427",
      "parents": [
        "9b44f1b3928b6f41532c9a1dc9a6fc665989ad5b"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 09 00:36:45 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:27 2011 -0400"
      },
      "message": "do_last: unify may_open() call and everyting after it\n\nWe have a bunch of diverging codepaths in do_last(); some of\nthem converge, but the case of having to create a new file\nduplicates large part of common tail of the rest and exits\nseparately.  Massage them so that they could be merged.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9b44f1b3928b6f41532c9a1dc9a6fc665989ad5b",
      "tree": "ffa1a492cc767c3c3e561c206131fa1762747833",
      "parents": [
        "0f9d1a10c341020617e5b1c7f9c16f6a070438ec"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 09 00:17:27 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:26 2011 -0400"
      },
      "message": "move may_open() from __open_name_create() to do_last()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "0f9d1a10c341020617e5b1c7f9c16f6a070438ec",
      "tree": "f5bbdf21986394cfe96e3965e75f633fd1331410",
      "parents": [
        "5a202bcd75bbd2397136397961babbd8463416af"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 09 00:13:14 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:26 2011 -0400"
      },
      "message": "expand finish_open() in its only caller\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "5a202bcd75bbd2397136397961babbd8463416af",
      "tree": "4a973df44ef169e66ee2aa5eb6c6b7ed69059509",
      "parents": [
        "6a96ba54418be740303765c0f52be028573cb99a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 08 14:17:44 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:26 2011 -0400"
      },
      "message": "sanitize pathname component hash calculation\n\nLift it to lookup_one_len() and link_path_walk() resp. into the\nsame place where we calculated default hash function of the same\nname.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6a96ba54418be740303765c0f52be028573cb99a",
      "tree": "1766b39499c1e0b18ed42f0ef31f64357fa8c8ab",
      "parents": [
        "fe2d35ff0d18a2c93993b0d7d46f846ff4331b72"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 07 23:49:20 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:26 2011 -0400"
      },
      "message": "kill __lookup_one_len()\n\nonly one caller left\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    }
  ],
  "next": "fe2d35ff0d18a2c93993b0d7d46f846ff4331b72"
}
