)]}'
{
  "log": [
    {
      "commit": "16b1c1cd71176ab0a76b26818fbf12db9183ed57",
      "tree": "da4ab8077cc3d9dce5b6ec2d003074cba3841446",
      "parents": [
        "50ee93afcaa970620d1fb5a9894109a2ab152868"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon May 21 17:30:19 2012 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jun 01 12:12:01 2012 -0400"
      },
      "message": "vfs: retry last component if opening stale dentry\n\nNFS optimizes away d_revalidates for last component of open.  This means that\nopen itself can find the dentry stale.\n\nThis patch allows the filesystem to return EOPENSTALE and the VFS will retry the\nlookup on just the last component if possible.\n\nIf the lookup was done using RCU mode, including the last component, then this\nis not possible since the parent dentry is lost.  In this case fall back to\nnon-RCU lookup.  Currently this is not used since NFS will always leave RCU\nmode.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "5f5daac12a4cef568d1269be0215fec0667193c1",
      "tree": "fd580ca7c35d607fd9267499193ec1a93b656cc1",
      "parents": [
        "d7fdd7f6e1afbffda03aeacb90039c092e8cacf8"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon May 21 17:30:14 2012 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jun 01 12:12:00 2012 -0400"
      },
      "message": "vfs: do_last() common post lookup\n\nNow the post lookup code can be shared between O_CREAT and plain opens since\nthey are essentially the same.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d7fdd7f6e1afbffda03aeacb90039c092e8cacf8",
      "tree": "3ce93ad170a92ee15b7d0d1364baa18c26aed042",
      "parents": [
        "050ac841ea90610067fec26150574be8c6077738"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon May 21 17:30:13 2012 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jun 01 12:11:59 2012 -0400"
      },
      "message": "vfs: do_last(): add audit_inode before open\n\nThis allows this code to be shared between O_CREAT and plain opens.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "050ac841ea90610067fec26150574be8c6077738",
      "tree": "9cad4c8ddc28fc4d22715c6a72ade663a5063815",
      "parents": [
        "af2f55426d1d888dcc0ba8dc9e9deb49fae38e38"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon May 21 17:30:12 2012 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jun 01 12:11:59 2012 -0400"
      },
      "message": "vfs: do_last(): only return EISDIR for O_CREAT\n\nThis allows this code to be shared between O_CREAT and plain opens.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "af2f55426d1d888dcc0ba8dc9e9deb49fae38e38",
      "tree": "09a0e9d2b7cc722edf4cd6d1904a98630656a773",
      "parents": [
        "54c33e7f95284539e52ec2d99dcdf6efd29b247f"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon May 21 17:30:11 2012 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jun 01 12:11:58 2012 -0400"
      },
      "message": "vfs: do_last(): check LOOKUP_DIRECTORY\n\nCheck for ENOTDIR before finishing open.  This allows this code to be shared\nbetween O_CREAT and plain opens.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "54c33e7f95284539e52ec2d99dcdf6efd29b247f",
      "tree": "777bbd294473b78538ba5ad3151c6e2596c94eee",
      "parents": [
        "d45ea86792db9679ed010b2c3df3db32b2ce5bde"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon May 21 17:30:10 2012 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jun 01 12:11:58 2012 -0400"
      },
      "message": "vfs: do_last(): make ENOENT exit RCU safe\n\nThis will allow this code to be used in RCU mode.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d45ea86792db9679ed010b2c3df3db32b2ce5bde",
      "tree": "573f99f16911ce9e14087a5559a11e876d676859",
      "parents": [
        "decf3400879d02d0eafedea52c7f208587be062a"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon May 21 17:30:09 2012 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jun 01 12:11:58 2012 -0400"
      },
      "message": "vfs: make follow_link check RCU safe\n\nThis will allow this code to be used in RCU mode.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "decf3400879d02d0eafedea52c7f208587be062a",
      "tree": "988c4006b9689c50cb43a379069dc5ea019567d8",
      "parents": [
        "a1eb33153090549e622ab42cb375af06614dd7a8"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon May 21 17:30:08 2012 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jun 01 12:11:57 2012 -0400"
      },
      "message": "vfs: do_last(): use inode variable\n\nUse helper variable instead of path-\u003edentry-\u003ed_inode before complete_walk().\nThis will allow this code to be used in RCU mode.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a1eb33153090549e622ab42cb375af06614dd7a8",
      "tree": "905f4a840fb12aea792af9a00f72450601baa70d",
      "parents": [
        "e276ae672fa2d727721b1a5a2508ff34bac85439"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon May 21 17:30:07 2012 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jun 01 12:11:57 2012 -0400"
      },
      "message": "vfs: do_last(): inline walk_component()\n\nCopy walk_component() into do_lookup().\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "e276ae672fa2d727721b1a5a2508ff34bac85439",
      "tree": "554ff042e36591f20bd8bf4e475ee0af7b95f3f6",
      "parents": [
        "697f514df10b0f46bcd7596c1be18b7e2e9b28bb"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon May 21 17:30:06 2012 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jun 01 12:11:57 2012 -0400"
      },
      "message": "vfs: do_last(): make exit RCU safe\n\nAllow returning from do_last() with LOOKUP_RCU still set on the \"out:\" and\n\"exit:\" labels.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "697f514df10b0f46bcd7596c1be18b7e2e9b28bb",
      "tree": "eed5439dcc771e5ee18cab74de829e97200ea320",
      "parents": [
        "e41f941a23115e84a8550b3d901a13a14b2edc2f"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon May 21 17:30:05 2012 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jun 01 12:11:56 2012 -0400"
      },
      "message": "vfs: split do_lookup()\n\nSplit do_lookup() into two functions:\n\n  lookup_fast() - does cached lookup without i_mutex\n  lookup_slow() - does lookup with i_mutex\n\nBoth follow managed dentries.\n\nThe new functions are needed by atomic_open.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "962830df366b66e71849040770ae6ba55a8b4aec",
      "tree": "0af9487fd8d5a73fa7adbde0bed368ada4298e39",
      "parents": [
        "eea62f831b8030b0eeea8314eed73b6132d1de26"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Tue May 08 13:32:02 2012 +0930"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue May 29 23:28:41 2012 -0400"
      },
      "message": "brlocks/lglocks: API cleanups\n\nlglocks and brlocks are currently generated with some complicated macros\nin lglock.h.  But there\u0027s no reason to not just use common utility\nfunctions and put all the data into a common data structure.\n\nIn preparation, this patch changes the API to look more like normal\nfunction calls with pointers, not magic macros.\n\nThe patch is rather large because I move over all users in one go to keep\nit bisectable.  This impacts the VFS somewhat in terms of lines changed.\nBut no actual behaviour change.\n\n[akpm@linux-foundation.org: checkpatch fixes]\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "36126f8f2ed8168eb13aa0662b9b9585cba100a9",
      "tree": "543f6b6ab60dd3e47af931142aa84f0ba7749d43",
      "parents": [
        "4ae73f2d53255c388d50bf83c1681112a6f9cba1"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat May 26 10:43:17 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat May 26 11:33:40 2012 -0700"
      },
      "message": "word-at-a-time: make the interfaces truly generic\n\nThis changes the interfaces in \u003casm/word-at-a-time.h\u003e to be a bit more\ncomplicated, but a lot more generic.\n\nIn particular, it allows us to really do the operations efficiently on\nboth little-endian and big-endian machines, pretty much regardless of\nmachine details.  For example, if you can rely on a fast population\ncount instruction on your architecture, this will allow you to make your\noptimized \u003casm/word-at-a-time.h\u003e file with that.\n\nNOTE! The \"generic\" version in include/asm-generic/word-at-a-time.h is\nnot truly generic, it actually only works on big-endian.  Why? Because\non little-endian the generic algorithms are wasteful, since you can\ninevitably do better. The x86 implementation is an example of that.\n\n(The only truly non-generic part of the asm-generic implementation is\nthe \"find_zero()\" function, and you could make a little-endian version\nof it.  And if the Kbuild infrastructure allowed us to pick a particular\nheader file, that would be lovely)\n\nThe \u003casm/word-at-a-time.h\u003e functions are as follows:\n\n - WORD_AT_A_TIME_CONSTANTS: specific constants that the algorithm\n   uses.\n\n - has_zero(): take a word, and determine if it has a zero byte in it.\n   It gets the word, the pointer to the constant pool, and a pointer to\n   an intermediate \"data\" field it can set.\n\n   This is the \"quick-and-dirty\" zero tester: it\u0027s what is run inside\n   the hot loops.\n\n - \"prep_zero_mask()\": take the word, the data that has_zero() produced,\n   and the constant pool, and generate an *exact* mask of which byte had\n   the first zero.  This is run directly *outside* the loop, and allows\n   the \"has_zero()\" function to answer the \"is there a zero byte\"\n   question without necessarily getting exactly *which* byte is the\n   first one to contain a zero.\n\n   If you do multiple byte lookups concurrently (eg \"hash_name()\", which\n   looks for both NUL and \u0027/\u0027 bytes), after you\u0027ve done the prep_zero_mask()\n   phase, the result of those can be or\u0027ed together to get the \"either\n   or\" case.\n\n - The result from \"prep_zero_mask()\" can then be fed into \"find_zero()\"\n   (to find the byte offset of the first byte that was zero) or into\n   \"zero_bytemask()\" (to find the bytemask of the bytes preceding the\n   zero byte).\n\n   The existence of zero_bytemask() is optional, and is not necessary\n   for the normal string routines.  But dentry name hashing needs it, so\n   if you enable DENTRY_WORD_AT_A_TIME you need to expose it.\n\nThis changes the generic strncpy_from_user() function and the dentry\nhashing functions to use these modified word-at-a-time interfaces.  This\ngets us back to the optimized state of the x86 strncpy that we lost in\nthe previous commit when moving over to the generic version.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ce004178be1bbaa292e9e6497939e2970300095a",
      "tree": "1cd5306548947deaedd612189b56d35265217e8e",
      "parents": [
        "9978306e31a8f89bd81fbc4c49fd9aefb1d30d10",
        "c5389831cda3b38a56606a348a537a1332f2d729"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 24 15:10:28 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 24 15:10:28 2012 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc\n\nPull sparc changes from David S. Miller:\n \"This has the generic strncpy_from_user() implementation architectures\n  can now use, which we\u0027ve been developing on linux-arch over the past\n  few days.\n\n  For good measure I ran both a 32-bit and a 64-bit glibc testsuite run,\n  and the latter of which pointed out an adjustment I needed to make to\n  sparc\u0027s user_addr_max() definition.  Linus, you were right, STACK_TOP\n  was not the right thing to use, even on sparc itself :-)\n\n  From Sam Ravnborg, we have a conversion of sparc32 over to the common\n  alloc_thread_info_node(), since the aspect which originally blocked\n  our doing so (sun4c) has been removed.\"\n\nFix up trivial arch/sparc/Kconfig and lib/Makefile conflicts.\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc:\n  sparc: Fix user_addr_max() definition.\n  lib: Sparc\u0027s strncpy_from_user is generic enough, move under lib/\n  kernel: Move REPEAT_BYTE definition into linux/kernel.h\n  sparc: Increase portability of strncpy_from_user() implementation.\n  sparc: Optimize strncpy_from_user() zero byte search.\n  sparc: Add full proper error handling to strncpy_from_user().\n  sparc32: use the common implementation of alloc_thread_info_node()\n"
    },
    {
      "commit": "446969084d33a4064a39d280806da642c54ba4ac",
      "tree": "0887795d96007b228733c9499bda1731d64e48fe",
      "parents": [
        "35c9646062eba15351c6d64ea0c02176e5cb66ac"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed May 23 20:12:50 2012 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu May 24 13:10:05 2012 -0700"
      },
      "message": "kernel: Move REPEAT_BYTE definition into linux/kernel.h\n\nAnd make sure that everything using it explicitly includes\nthat header file.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "644473e9c60c1ff4f6351fed637a6e5551e3dce7",
      "tree": "10316518bedc735a2c6552886658d69dfd9f1eb0",
      "parents": [
        "fb827ec68446c83e9e8754fa9b55aed27ecc4661",
        "4b06a81f1daee668fbd6de85557bfb36dd36078f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 23 17:42:39 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 23 17:42:39 2012 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace\n\nPull user namespace enhancements from Eric Biederman:\n \"This is a course correction for the user namespace, so that we can\n  reach an inexpensive, maintainable, and reasonably complete\n  implementation.\n\n  Highlights:\n   - Config guards make it impossible to enable the user namespace and\n     code that has not been converted to be user namespace safe.\n\n   - Use of the new kuid_t type ensures the if you somehow get past the\n     config guards the kernel will encounter type errors if you enable\n     user namespaces and attempt to compile in code whose permission\n     checks have not been updated to be user namespace safe.\n\n   - All uids from child user namespaces are mapped into the initial\n     user namespace before they are processed.  Removing the need to add\n     an additional check to see if the user namespace of the compared\n     uids remains the same.\n\n   - With the user namespaces compiled out the performance is as good or\n     better than it is today.\n\n   - For most operations absolutely nothing changes performance or\n     operationally with the user namespace enabled.\n\n   - The worst case performance I could come up with was timing 1\n     billion cache cold stat operations with the user namespace code\n     enabled.  This went from 156s to 164s on my laptop (or 156ns to\n     164ns per stat operation).\n\n   - (uid_t)-1 and (gid_t)-1 are reserved as an internal error value.\n     Most uid/gid setting system calls treat these value specially\n     anyway so attempting to use -1 as a uid would likely cause\n     entertaining failures in userspace.\n\n   - If setuid is called with a uid that can not be mapped setuid fails.\n     I have looked at sendmail, login, ssh and every other program I\n     could think of that would call setuid and they all check for and\n     handle the case where setuid fails.\n\n   - If stat or a similar system call is called from a context in which\n     we can not map a uid we lie and return overflowuid.  The LFS\n     experience suggests not lying and returning an error code might be\n     better, but the historical precedent with uids is different and I\n     can not think of anything that would break by lying about a uid we\n     can\u0027t map.\n\n   - Capabilities are localized to the current user namespace making it\n     safe to give the initial user in a user namespace all capabilities.\n\n  My git tree covers all of the modifications needed to convert the core\n  kernel and enough changes to make a system bootable to runlevel 1.\"\n\nFix up trivial conflicts due to nearby independent changes in fs/stat.c\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace: (46 commits)\n  userns:  Silence silly gcc warning.\n  cred: use correct cred accessor with regards to rcu read lock\n  userns: Convert the move_pages, and migrate_pages permission checks to use uid_eq\n  userns: Convert cgroup permission checks to use uid_eq\n  userns: Convert tmpfs to use kuid and kgid where appropriate\n  userns: Convert sysfs to use kgid/kuid where appropriate\n  userns: Convert sysctl permission checks to use kuid and kgids.\n  userns: Convert proc to use kuid/kgid where appropriate\n  userns: Convert ext4 to user kuid/kgid where appropriate\n  userns: Convert ext3 to use kuid/kgid where appropriate\n  userns: Convert ext2 to use kuid/kgid where appropriate.\n  userns: Convert devpts to use kuid/kgid where appropriate\n  userns: Convert binary formats to use kuid/kgid where appropriate\n  userns: Add negative depends on entries to avoid building code that is userns unsafe\n  userns: signal remove unnecessary map_cred_ns\n  userns: Teach inode_capable to understand inodes whose uids map to other namespaces.\n  userns: Fail exec for suid and sgid binaries with ids outside our user namespace.\n  userns: Convert stat to return values mapped from kuids and kgids\n  userns: Convert user specfied uids and gids in chown into kuids and kgid\n  userns: Use uid_eq gid_eq helpers when comparing kuids and kgids in the vfs\n  ...\n"
    },
    {
      "commit": "31ed8e6f93a27304c9e157dab0267772cd94eaad",
      "tree": "2fd62bea73efa7e2920b0c3e1d81c425eb7bf71c",
      "parents": [
        "7e5cb5e151c5474b4a468f437f5038ba9f67ef4d",
        "26fe575028703948880fce4355a210c76bb0536e"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon May 21 08:50:57 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon May 21 08:50:57 2012 -0700"
      },
      "message": "Merge branch \u0027dentry-cleanups\u0027 (dcache access cleanups and optimizations)\n\nThis branch simplifies and clarifies the dcache lookup, and allows us to\ndo certain nice optimizations when comparing dentries.  It also cleans\nup the interface to __d_lookup_rcu(), especially around passing the\ninode information around.\n\n* dentry-cleanups:\n  vfs: make it possible to access the dentry hash/len as one 64-bit entry\n  vfs: move dentry name length comparison from dentry_cmp() into callers\n  vfs: do the careful dentry name access for all dentry_cmp cases\n  vfs: remove unnecessary d_unhashed() check from __d_lookup_rcu\n  vfs: clean up __d_lookup_rcu() and dentry_cmp() interfaces\n"
    },
    {
      "commit": "7e5cb5e151c5474b4a468f437f5038ba9f67ef4d",
      "tree": "899f42e88f926fb4501402cf4ee4aa0903421ef5",
      "parents": [
        "8c12fec90c54cfabdd57b2726a1defbc07c19a55",
        "e994defb7b6813ba6fa7a2a36e86d2455ad1dc35"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon May 21 08:46:08 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon May 21 08:46:08 2012 -0700"
      },
      "message": "Merge branch \u0027vfs-cleanups\u0027 (random vfs cleanups)\n\nThis teaches vfs_fstat() to use the appropriate f[get|put]_light\nfunctions, allowing it to avoid some unnecessary locking for the common\ncase.\n\nMore noticeably, it also cleans up and simplifies the \"getname_flags()\"\nfunction, which now relies on the architecture strncpy_from_user() doing\nall the user access checks properly, instead of hacking around the fact\nthat on x86 it didn\u0027t use to do it right (see commit 92ae03f2ef99: \"x86:\nmerge 32/64-bit versions of \u0027strncpy_from_user()\u0027 and speed it up\").\n\n* vfs-cleanups:\n  VFS: make vfs_fstat() use f[get|put]_light()\n  VFS: clean up and simplify getname_flags()\n  x86: make word-at-a-time strncpy_from_user clear bytes at the end\n"
    },
    {
      "commit": "12f8ad4b0533d9212cb1d5e58ed73d2170114785",
      "tree": "6bab87d6d25b2ea246904aeabc3692e03c89b923",
      "parents": [
        "4f988f152ee087831ea5c1c77cda4454cacc052c"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 04 14:59:14 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 04 18:21:14 2012 -0700"
      },
      "message": "vfs: clean up __d_lookup_rcu() and dentry_cmp() interfaces\n\nThe calling conventions for __d_lookup_rcu() and dentry_cmp() are\nannoying in different ways, and there is actually one single underlying\nreason for both of the annoyances.\n\nThe fundamental reason is that we do the returned dentry sequence number\ncheck inside __d_lookup_rcu() instead of doing it in the caller.  This\nresults in two annoyances:\n\n - __d_lookup_rcu() now not only needs to return the dentry and the\n   sequence number that goes along with the lookup, it also needs to\n   return the inode pointer that was validated by that sequence number\n   check.\n\n - and because we did the sequence number check early (to validate the\n   name pointer and length) we also couldn\u0027t just pass the dentry itself\n   to dentry_cmp(), we had to pass the counted string that contained the\n   name.\n\nSo that sequence number decision caused two separate ugly calling\nconventions.\n\nBoth of these problems would be solved if we just did the sequence\nnumber check in the caller instead.  There\u0027s only one caller, and that\ncaller already has to do the sequence number check for the parent\nanyway, so just do that.\n\nThat allows us to stop returning the dentry-\u003ed_inode in that in-out\nargument (pointer-to-pointer-to-inode), so we can make the inode\nargument just a regular input inode pointer.  The caller can just load\nthe inode from dentry-\u003ed_inode, and then do the sequence number check\nafter that to make sure that it\u0027s synchronized with the name we looked\nup.\n\nAnd it allows us to just pass in the dentry to dentry_cmp(), which is\nwhat all the callers really wanted.  Sure, dentry_cmp() has to be a bit\ncareful about the dentry (which is not stable during RCU lookup), but\nthat\u0027s actually very simple.\n\nAnd now that dentry_cmp() can clearly see that the first string argument\nis a dentry, we can use the direct word access for that, instead of the\ncareful unaligned zero-padding.  The dentry name is always properly\naligned, since it is a single path component that is either embedded\ninto the dentry itself, or was allocated with kmalloc() (see __d_alloc).\n\nFinally, this also uninlines the nasty slow-case for dentry comparisons:\nthat one *does* need to do a sequence number check, since it will call\nin to the low-level filesystems, and we want to give those a stable\ninode pointer and path component length/start arguments.  Doing an extra\nsequence check for that slow case is not a problem, though.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e419b4cc585680940bc42f8ca8a071d6023fb1bb",
      "tree": "8fce0f12b7b2a0fdca7a937af137910011efa783",
      "parents": [
        "ac001e76546523ec2ef05b2f7001d8fdc588d069"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 03 10:16:43 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 03 14:01:40 2012 -0700"
      },
      "message": "vfs: make word-at-a-time accesses handle a non-existing page\n\nIt turns out that there are more cases than CONFIG_DEBUG_PAGEALLOC that\ncan have holes in the kernel address space: it seems to happen easily\nwith Xen, and it looks like the AMD gart64 code will also punch holes\ndynamically.\n\nActually hitting that case is still very unlikely, so just do the\naccess, and take an exception and fix it up for the very unlikely case\nof it being a page-crosser with no next page.\n\nAnd hey, this abstraction might even help other architectures that have\nother issues with unaligned word accesses than the possible missing next\npage.  IOW, this could do the byte order magic too.\n\nPeter Anvin fixed a thinko in the shifting for the exception case.\n\nReported-and-tested-by: Jana Saout \u003cjana@saout.de\u003e\nCc:  Peter Anvin \u003chpa@zytor.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8e96e3b7b8407be794ab1fd8e4b332818a358e78",
      "tree": "f27756bb2ec49e586221ac669ea00c68e8a2ee58",
      "parents": [
        "72cda3d1ef24ab0a9a89c15e9776ca737b75f45a"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Sat Mar 03 21:17:15 2012 -0800"
      },
      "committer": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Thu May 03 03:29:34 2012 -0700"
      },
      "message": "userns: Use uid_eq gid_eq helpers when comparing kuids and kgids in the vfs\n\nAcked-by: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\n"
    },
    {
      "commit": "3f9f0aa687d45cbc8e7bb3cfd3aab555dcc8872e",
      "tree": "317c59226a5741c3de8739c09afedfb84b124dff",
      "parents": [
        "0749708352fddbe0fa81fc25f96e3b1f77c655f4"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Apr 28 14:38:32 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Apr 28 14:38:32 2012 -0700"
      },
      "message": "VFS: clean up and simplify getname_flags()\n\nThis removes a number of silly games around strncpy_from_user() in\ndo_getname(), and removes that helper function entirely.  We instead\nmake getname_flags() just use strncpy_from_user() properly directly.\n\nRemoving the wrapper function simplifies things noticeably, mostly\nbecause we no longer play the unnecessary games with segments (x86\nstrncpy_from_user() no longer needs the hack), but also because the\nempty path handling is just much more obvious.  The return value of\n\"strncpy_to_user()\" is much more obvious than checking an odd error\nreturn case from do_getname().\n\n[ non-x86 architectures were notified of this change several weeks ago,\n  since it is possible that they have copied the old broken x86\n  strncpy_from_user. But nobody reacted, so .. See\n\n    http://www.spinics.net/lists/linux-arch/msg17313.html\n\n  for details ]\n\nCc: linux-arch@vger.kernel.org\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1a48e2ac034d47ed843081c4523b63c46b46888b",
      "tree": "d3a32ac7ffc47b075a64701a2fd74e00bbccf84d",
      "parents": [
        "973c5914260d75292f71a4729753086b9e863d57"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Mon Nov 14 16:24:06 2011 -0800"
      },
      "committer": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Sat Apr 07 17:02:46 2012 -0700"
      },
      "message": "userns: Replace the hard to write inode_userns with inode_capable.\n\nThis represents a change in strategy of how to handle user namespaces.\nInstead of tagging everything explicitly with a user namespace and bulking\nup all of the comparisons of uids and gids in the kernel,  all uids and gids\nin use will have a mapping to a flat kuid and kgid spaces respectively.  This\nallows much more of the existing logic to be preserved and in general\nallows for faster code.\n\nIn this new and improved world we allow someone to utiliize capabilities\nover an inode if the inodes owner mapps into the capabilities holders user\nnamespace and the user has capabilities in their user namespace.  Which\nis simple and efficient.\n\nMoving the fs uid comparisons to be comparisons in a flat kuid space\nfollows in later patches, something that is only significant if you\nare using user namespaces.\n\nAcked-by: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\n"
    },
    {
      "commit": "f68e556e23d1a4176b563bcb25d8baf2c5313f91",
      "tree": "4c43c375dd0c608ed506953d80ebfedacca37161",
      "parents": [
        "23f347ef63aa36b5a001b6791f657cd0e2a04de3"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 06 13:54:56 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 06 13:54:56 2012 -0700"
      },
      "message": "Make the \"word-at-a-time\" helper functions more commonly usable\n\nI have a new optimized x86 \"strncpy_from_user()\" that will use these\nsame helper functions for all the same reasons the name lookup code uses\nthem.  This is preparation for that.\n\nThis moves them into an architecture-specific header file.  It\u0027s\narchitecture-specific for two reasons:\n\n - some of the functions are likely to want architecture-specific\n   implementations.  Even if the current code happens to be \"generic\" in\n   the sense that it should work on any little-endian machine, it\u0027s\n   likely that the \"multiply by a big constant and shift\" implementation\n   is less than optimal for an architecture that has a guaranteed fast\n   bit count instruction, for example.\n\n - I expect that if architectures like sparc want to start playing\n   around with this, we\u0027ll need to abstract out a few more details (in\n   particular the actual unaligned accesses).  So we\u0027re likely to have\n   more architecture-specific stuff if non-x86 architectures start using\n   this.\n\n   (and if it turns out that non-x86 architectures don\u0027t start using\n   this, then having it in an architecture-specific header is still the\n   right thing to do, of course)\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "975d6b3932d43b87a48d2107264ed0c9a7541d8d",
      "tree": "ad82038ec23ccb2bdb00c1cdc13ae595e5a4dfbe",
      "parents": [
        "dd775ae2549217d3ae09363e3edb305d0fa19928"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Sun Nov 13 12:16:43 2011 -0800"
      },
      "committer": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Tue Apr 03 04:28:51 2012 -0700"
      },
      "message": "vfs: Don\u0027t allow a user namespace root to make device nodes\n\nSafely making device nodes in a container is solvable but simply\nhaving the capability in a user namespace is not sufficient to make\nthis work.\n\nAcked-by: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\n"
    },
    {
      "commit": "c0d0259481cc6ec2a38cad810055e455de35c733",
      "tree": "20ca63134e34d408e075790bb2fd4bf375b89313",
      "parents": [
        "bad61189780ec0592cacde01a0775cb98a30efdc"
      ],
      "author": {
        "name": "J. Bruce Fields",
        "email": "bfields@redhat.com",
        "time": "Wed Feb 15 11:48:40 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Mar 31 16:03:17 2012 -0400"
      },
      "message": "vfs: fix out-of-date dentry_unhash() comment\n\n64252c75a2196a0cf1e0d3777143ecfe0e3ae650 \"vfs: remove dget() from\ndentry_unhash()\" changed the implementation but not the comment.\n\nCc: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: J. Bruce Fields \u003cbfields@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "bad61189780ec0592cacde01a0775cb98a30efdc",
      "tree": "c17f96209e27717bab726d1fae5c4164c49c4860",
      "parents": [
        "81e6f520898edbda56e8680d338ace4f5694874e"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Mar 26 12:54:24 2012 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Mar 31 16:03:17 2012 -0400"
      },
      "message": "vfs: split __lookup_hash\n\nSplit __lookup_hash into two component functions:\n\n lookup_dcache - tries cached lookup, returns whether real lookup is needed\n lookup_real - calls i_op-\u003elookup\n\nThis eliminates code duplication between d_alloc_and_lookup() and\nd_inode_lookup().\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "81e6f520898edbda56e8680d338ace4f5694874e",
      "tree": "d516e74ac37250452b6deb8cc3a5ef686bad6a81",
      "parents": [
        "a32555466caee38faeef4e44d7878ecbff1199bc"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 30 14:48:04 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Mar 31 16:03:17 2012 -0400"
      },
      "message": "untangling do_lookup() - take __lookup_hash()-calling case out of line.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a32555466caee38faeef4e44d7878ecbff1199bc",
      "tree": "e0dea5e747bca90e234938d8545634a16aca561a",
      "parents": [
        "a6ecdfcfba9392f469992dd6016ceafb3ea62123"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 30 14:41:51 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Mar 31 16:03:16 2012 -0400"
      },
      "message": "untangling do_lookup() - switch to calling __lookup_hash()\n\nnow we have __lookup_hash() open-coded if !dentry case;\njust call the damn thing instead...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a6ecdfcfba9392f469992dd6016ceafb3ea62123",
      "tree": "0a818c7e050c3a5aa59852020567fb70a5cdcf47",
      "parents": [
        "ec335e91a4f088d8759c1311d0724e609d1c318e"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 30 14:39:15 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Mar 31 16:03:16 2012 -0400"
      },
      "message": "untangling do_lookup() - merge d_alloc_and_lookup() callers\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ec335e91a4f088d8759c1311d0724e609d1c318e",
      "tree": "43163e92febda81023fcee742a9667f34ef39063",
      "parents": [
        "d774a058d94d6b0dafada2295ec5221481b07d16"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 30 14:37:42 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Mar 31 16:03:16 2012 -0400"
      },
      "message": "untangling do_lookup() - merge failure exits in !dentry case\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d774a058d94d6b0dafada2295ec5221481b07d16",
      "tree": "952afb38f52c989752812dc3c0970259293211a9",
      "parents": [
        "08b0ab7c20f767187ae635d51bdd9d262ebe8357"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 30 14:34:00 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Mar 31 16:03:16 2012 -0400"
      },
      "message": "untangling do_lookup() - massage !dentry case towards __lookup_hash()\n\nReorder if-else cases for starters...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "08b0ab7c20f767187ae635d51bdd9d262ebe8357",
      "tree": "b3b7258f1bee1574df231279dec23fe0c92a2b46",
      "parents": [
        "acc9cb3cd425f479d8fc4a441bff45dce23aa6dd"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 30 14:18:50 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Mar 31 16:03:16 2012 -0400"
      },
      "message": "untangling do_lookup() - get rid of need_reval in !dentry case\n\nEverything arriving into if (!dentry) will have need_reval \u003d 1.\nIndeed, the only way to get there with need_reval reset to 0 would\nbe via\n\tif (unlikely(d_need_lookup(dentry)))\n\t\tgoto unlazy;\n\tif (unlikely(dentry-\u003ed_flags \u0026 DCACHE_OP_REVALIDATE)) {\n\t\tstatus \u003d d_revalidate(dentry, nd);\n\tif (unlikely(status \u003c\u003d 0)) {\n\t\tif (status !\u003d -ECHILD)\n\t\t\tneed_reval \u003d 0;\n\t\tgoto unlazy;\n...\nunlazy:\n\t/* no assignments to dentry */\n\tif (dentry \u0026\u0026 unlikely(d_need_lookup(dentry))) {\n\t\tdput(dentry);\n\t\tdentry \u003d NULL;\n\t}\nand if d_need_lookup() had already been false the first time around, it\nwill remain false on the second call as well.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "acc9cb3cd425f479d8fc4a441bff45dce23aa6dd",
      "tree": "08ffc4b16ad2d00069189440dbfd4b893e2cc96e",
      "parents": [
        "37c17e1f377696c797e75c1e915e838b3e0c6120"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 30 14:13:15 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Mar 31 16:03:16 2012 -0400"
      },
      "message": "untangling do_lookup() - eliminate a loop.\n\nd_lookup() *will* fail after successful d_invalidate(), if we are\nholding i_mutex all along.  IOW, we don\u0027t need to jump back to\nl: - we know what path will be taken there and can do that (i.e.\nd_alloc_and_lookup()) directly.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "37c17e1f377696c797e75c1e915e838b3e0c6120",
      "tree": "97af490a11ae06776978b4ed171ba7ceff36128f",
      "parents": [
        "3f6c7c71a2af6eb306e16562c6ee1bfdb48015fb"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 30 14:08:28 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Mar 31 16:03:16 2012 -0400"
      },
      "message": "untangling do_lookup() - expand the area under -\u003ei_mutex\n\nkeep holding -\u003ei_mutex over revalidation parts\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "3f6c7c71a2af6eb306e16562c6ee1bfdb48015fb",
      "tree": "11a45a75c858894fcfdbf40e320d860d7f28c166",
      "parents": [
        "cda309de253f338b04d15b4478e45fc3a0fcc7a3"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 30 14:04:16 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Mar 31 16:03:16 2012 -0400"
      },
      "message": "untangling do_lookup() - isolate !dentry stuff from the rest of it.\n\nDuplicate the revalidation-related parts into if (!dentry) branch.\nNext step will be to pull them under i_mutex.\n\nThis and the next 8 commits are more or less a splitup of patch\nby Miklos; folks, when you are working with something that convoluted,\ncarve your patches up into easily reviewed steps, especially when\na lot of codepaths involved are rarely hit...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "cda309de253f338b04d15b4478e45fc3a0fcc7a3",
      "tree": "93b5c767935ee7ec8a664f01ba684415754d929b",
      "parents": [
        "3637c05d881b2b7bab36f339245b8963f5b29c9f"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Mar 26 12:54:21 2012 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Mar 31 16:03:16 2012 -0400"
      },
      "message": "vfs: move MAY_EXEC check from __lookup_hash()\n\nThe only caller of __lookup_hash() that needs the exec permission check on\nparent is lookup_one_len().\n\nAll lookup_hash() callers already checked permission in LOOKUP_PARENT walk.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "3637c05d881b2b7bab36f339245b8963f5b29c9f",
      "tree": "771ea8149d971517934d7023a6f3d34ccc42068f",
      "parents": [
        "fa4ee159512ee39b6c65ac40db986ea7a2f7de60"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Mar 26 12:54:20 2012 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Mar 31 16:03:16 2012 -0400"
      },
      "message": "vfs: don\u0027t revalidate just looked up dentry\n\n__lookup_hash() calls -\u003elookup() if the dentry needs lookup and on success\nrevalidates the dentry (all under dir-\u003ei_mutex).\n\nWhile this is harmless it doesn\u0027t make a lot of sense.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "fa4ee159512ee39b6c65ac40db986ea7a2f7de60",
      "tree": "1a245fe312d79e063de819f4da0debc2b13739d7",
      "parents": [
        "4613ad180d19082f99551477dcb13cb23d23661b"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Mar 26 12:54:19 2012 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Mar 31 16:03:16 2012 -0400"
      },
      "message": "vfs: fix d_need_lookup/d_revalidate order in do_lookup\n\nDoing revalidate on a dentry which has not yet been looked up makes no sense.\n\nMove the d_need_lookup() check before d_revalidate().\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "11bcb32848ddb5ab28f09f142b625e2ba4d55c4c",
      "tree": "9a2c085e1fce41012bb0f2a340f6ceaaf616b7a0",
      "parents": [
        "ed2d265d1266736bd294332d7f649003943ae36e",
        "8bc3bcc93a2b4e47d5d410146f6546bca6171663"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 24 10:24:31 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 24 10:24:31 2012 -0700"
      },
      "message": "Merge tag \u0027module-for-3.4\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux\n\nPull cleanup of fs/ and lib/ users of module.h from Paul Gortmaker:\n \"Fix up files in fs/ and lib/ dirs to only use module.h if they really\n  need it.\n\n  These are trivial in scope vs the work done previously.  We now have\n  things where any few remaining cleanups can be farmed out to arch or\n  subsystem maintainers, and I have done so when possible.  What is\n  remaining here represents the bits that don\u0027t clearly lie within a\n  single arch/subsystem boundary, like the fs dir and the lib dir.\n\n  Some duplicate includes arising from overlapping fixes from\n  independent subsystem maintainer submissions are also quashed.\"\n\nFix up trivial conflicts due to clashes with other include file cleanups\n(including some due to the previous bug.h cleanup pull).\n\n* tag \u0027module-for-3.4\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux:\n  lib: reduce the use of module.h wherever possible\n  fs: reduce the use of module.h wherever possible\n  includecheck: delete any duplicate instances of module.h\n"
    },
    {
      "commit": "f7493e5d9cc10ac97cf1f1579fdc14117460b40b",
      "tree": "5c73bd9418b24398b33c5eb2c2fb3ea749d8c631",
      "parents": [
        "989412bbd2835f1475d1528846693eddbac744c8"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 22 16:10:40 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 22 16:10:40 2012 -0700"
      },
      "message": "vfs: tidy up sparse warnings in fs/namei.c\n\nWhile doing the fs/namei.c cleanups, I ran sparse on it, and it pointed\nout other large integers and a couple of cases of us using \u00270\u0027 instead\nof the proper \u0027NULL\u0027.\n\nSparse still doesn\u0027t understand some of the conditional locking going\non, but that\u0027s no excuse for not fixing up the trivial stuff.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "989412bbd2835f1475d1528846693eddbac744c8",
      "tree": "192a4fdeeca43951cc69d30fad6b91c6196f9e8c",
      "parents": [
        "1f1e6e523e43e312c0e0d38c09828d53e9f709fc"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 22 15:58:27 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 22 15:58:27 2012 -0700"
      },
      "message": "vfs: tidy up fs/namei.c byte-repeat word constants\n\nIn commit commit 1de5b41cd3b2 (\"fs/namei.c: fix warnings on 32-bit\")\nAndrew said that there must be a tidier way of doing this.\n\nThis is that tidier way.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f132c5be05e407a99cf582347a2ae0120acd3ad7",
      "tree": "f089bbd244aad5d5686360080f93ee9e8592a39d",
      "parents": [
        "ba331d5decbfe1cc8b1bf10fb7005f4b972c4f0e"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@ZenIV.linux.org.uk",
        "time": "Thu Mar 22 21:59:52 2012 +0000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 22 15:10:43 2012 -0700"
      },
      "message": "Fix full_name_hash() behaviour when length is a multiple of 8\n\nWe want it to match what hash_name() is doing, which means extra\nmultiply by 9 in this case...\n\nReported-and-Tested-by: Konrad Rzeszutek Wilk \u003ckonrad.wilk@oracle.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "95211279c5ad00a317c98221d7e4365e02f20836",
      "tree": "2ddc8625378d2915b8c96392f3cf6663b705ed55",
      "parents": [
        "5375871d432ae9fc581014ac117b96aaee3cd0c7",
        "12724850e8064f64b6223d26d78c0597c742c65a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 22 09:04:48 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 22 09:04:48 2012 -0700"
      },
      "message": "Merge branch \u0027akpm\u0027 (Andrew\u0027s patch-bomb)\n\nMerge first batch of patches from Andrew Morton:\n \"A few misc things and all the MM queue\"\n\n* emailed from Andrew Morton \u003cakpm@linux-foundation.org\u003e: (92 commits)\n  memcg: avoid THP split in task migration\n  thp: add HPAGE_PMD_* definitions for !CONFIG_TRANSPARENT_HUGEPAGE\n  memcg: clean up existing move charge code\n  mm/memcontrol.c: remove unnecessary \u0027break\u0027 in mem_cgroup_read()\n  mm/memcontrol.c: remove redundant BUG_ON() in mem_cgroup_usage_unregister_event()\n  mm/memcontrol.c: s/stealed/stolen/\n  memcg: fix performance of mem_cgroup_begin_update_page_stat()\n  memcg: remove PCG_FILE_MAPPED\n  memcg: use new logic for page stat accounting\n  memcg: remove PCG_MOVE_LOCK flag from page_cgroup\n  memcg: simplify move_account() check\n  memcg: remove EXPORT_SYMBOL(mem_cgroup_update_page_stat)\n  memcg: kill dead prev_priority stubs\n  memcg: remove PCG_CACHE page_cgroup flag\n  memcg: let css_get_next() rely upon rcu_read_lock()\n  cgroup: revert ss_id_lock to spinlock\n  idr: make idr_get_next() good for rcu_read_lock()\n  memcg: remove unnecessary thp check in page stat accounting\n  memcg: remove redundant returns\n  memcg: enum lru_list lru\n  ...\n"
    },
    {
      "commit": "1de5b41cd3b2474c2770b825266d372073e1b28b",
      "tree": "3968c179cc49ca60a425b7fe4b76808c0f0af9e0",
      "parents": [
        "1a5a9906d4e8d1976b701f889d8f35d54b928f25"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Wed Mar 21 16:33:42 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:54 2012 -0700"
      },
      "message": "fs/namei.c: fix warnings on 32-bit\n\ni386 allnoconfig:\n\n  fs/namei.c: In function \u0027has_zero\u0027:\n  fs/namei.c:1617: warning: integer constant is too large for \u0027unsigned long\u0027 type\n  fs/namei.c:1617: warning: integer constant is too large for \u0027unsigned long\u0027 type\n  fs/namei.c: In function \u0027hash_name\u0027:\n  fs/namei.c:1635: warning: integer constant is too large for \u0027unsigned long\u0027 type\n\nThere must be a tidier way of doing this.\n\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e2a0883e4071237d09b604a342c28b96b44a04b3",
      "tree": "aa56f4d376b5eb1c32358c19c2669c2a94e0e1fd",
      "parents": [
        "3a990a52f9f25f45469e272017a31e7a3fda60ed",
        "07c0c5d8b8c122b2f2df9ee574ac3083daefc981"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 13:36:41 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 13:36:41 2012 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs\n\nPull vfs pile 1 from Al Viro:\n \"This is _not_ all; in particular, Miklos\u0027 and Jan\u0027s stuff is not there\n  yet.\"\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (64 commits)\n  ext4: initialization of ext4_li_mtx needs to be done earlier\n  debugfs-related mode_t whack-a-mole\n  hfsplus: add an ioctl to bless files\n  hfsplus: change finder_info to u32\n  hfsplus: initialise userflags\n  qnx4: new helper - try_extent()\n  qnx4: get rid of qnx4_bread/qnx4_getblk\n  take removal of PF_FORKNOEXEC to flush_old_exec()\n  trim includes in inode.c\n  um: uml_dup_mmap() relies on -\u003emmap_sem being held, but activate_mm() doesn\u0027t hold it\n  um: embed -\u003estub_pages[] into mmu_context\n  gadgetfs: list_for_each_safe() misuse\n  ocfs2: fix leaks on failure exits in module_init\n  ecryptfs: make register_filesystem() the last potential failure exit\n  ntfs: forgets to unregister sysctls on register_filesystem() failure\n  logfs: missing cleanup on register_filesystem() failure\n  jfs: mising cleanup on register_filesystem() failure\n  make configfs_pin_fs() return root dentry on success\n  configfs: configfs_create_dir() has parent dentry in dentry-\u003ed_parent\n  configfs: sanitize configfs_create()\n  ...\n"
    },
    {
      "commit": "9f3938346a5c1fa504647670edb5fea5756cfb00",
      "tree": "7cf6d24d6b076c8db8571494984924cac03703a2",
      "parents": [
        "69a7aebcf019ab3ff5764525ad6858fbe23bb86d",
        "317b6e128247f75976b0fc2b9fd8d2c20ef13b3a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 09:40:26 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 09:40:26 2012 -0700"
      },
      "message": "Merge branch \u0027kmap_atomic\u0027 of git://github.com/congwang/linux\n\nPull kmap_atomic cleanup from Cong Wang.\n\nIt\u0027s been in -next for a long time, and it gets rid of the (no longer\nused) second argument to k[un]map_atomic().\n\nFix up a few trivial conflicts in various drivers, and do an \"evil\nmerge\" to catch some new uses that have come in since Cong\u0027s tree.\n\n* \u0027kmap_atomic\u0027 of git://github.com/congwang/linux: (59 commits)\n  feature-removal-schedule.txt: schedule the deprecated form of kmap_atomic() for removal\n  highmem: kill all __kmap_atomic() [swarren@nvidia.com: highmem: Fix ARM build break due to __kmap_atomic rename]\n  drbd: remove the second argument of k[un]map_atomic()\n  zcache: remove the second argument of k[un]map_atomic()\n  gma500: remove the second argument of k[un]map_atomic()\n  dm: remove the second argument of k[un]map_atomic()\n  tomoyo: remove the second argument of k[un]map_atomic()\n  sunrpc: remove the second argument of k[un]map_atomic()\n  rds: remove the second argument of k[un]map_atomic()\n  net: remove the second argument of k[un]map_atomic()\n  mm: remove the second argument of k[un]map_atomic()\n  lib: remove the second argument of k[un]map_atomic()\n  power: remove the second argument of k[un]map_atomic()\n  kdb: remove the second argument of k[un]map_atomic()\n  udf: remove the second argument of k[un]map_atomic()\n  ubifs: remove the second argument of k[un]map_atomic()\n  squashfs: remove the second argument of k[un]map_atomic()\n  reiserfs: remove the second argument of k[un]map_atomic()\n  ocfs2: remove the second argument of k[un]map_atomic()\n  ntfs: remove the second argument of k[un]map_atomic()\n  ...\n"
    },
    {
      "commit": "68ac1234fb949b66941d94dce4157742799fc581",
      "tree": "04059b7dbaed92d672b8ceef1fcf25c6185e06f8",
      "parents": [
        "40ffe67d2e89c7a475421d007becc11a2f88ea3d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 15 08:21:57 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 20 21:29:41 2012 -0400"
      },
      "message": "switch touch_atime to struct path\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "8de52778798fe39660a8d6b26f290e0c93202761",
      "tree": "56384beb7863c1f338f2b66b509bf58eea5a99c2",
      "parents": [
        "c16fa4f2ad19908a47c63d8fa436a1178438c7e7"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Feb 06 12:45:27 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 20 21:29:32 2012 -0400"
      },
      "message": "vfs: check i_nlink limits in vfs_{mkdir,rename_dir,link}\n\nNew field of struct super_block - -\u003es_max_links.  Maximal allowed\nvalue of -\u003ei_nlink or 0; in the latter case all checks still need\nto be done in -\u003elink/-\u003emkdir/-\u003erename instances.  Note that this\nlimit applies both to directoris and to non-directories.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "e8e3c3d66fd9d1ee2250f68d778cc48c1346d228",
      "tree": "2d69e1bb0cefe36bbfc4b75ddfa6cec8e72bcb98",
      "parents": [
        "c6daa7ffa834c850b3dbb38af6980415caef680d"
      ],
      "author": {
        "name": "Cong Wang",
        "email": "amwang@redhat.com",
        "time": "Fri Nov 25 23:14:27 2011 +0800"
      },
      "committer": {
        "name": "Cong Wang",
        "email": "xiyou.wangcong@gmail.com",
        "time": "Tue Mar 20 21:48:21 2012 +0800"
      },
      "message": "fs: remove the second argument of k[un]map_atomic()\n\nAcked-by: Benjamin LaHaise \u003cbcrl@kvack.org\u003e\nSigned-off-by: Cong Wang \u003camwang@redhat.com\u003e\n"
    },
    {
      "commit": "b0e37d7ac6ba937c3776ff5111ff6a7fa832fb4f",
      "tree": "fdb86783c464825a77223e49cc24f632e319d2df",
      "parents": [
        "6d7d1a0dc735ea8412769edae7154885021107a9",
        "bfcfaa77bdf0f775263e906015982a608df01c76"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 19 16:37:28 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 19 16:37:28 2012 -0700"
      },
      "message": "Merge branch \u0027dcache-word-accesses\u0027\n\n* branch \u0027dcache-word-accesses\u0027:\n  vfs: use \u0027unsigned long\u0027 accesses for dcache name comparison and hashing\n\nThis does the name hashing and lookup using word-sized accesses when\nthat is efficient, namely on x86 (although any little-endian machine\nwith good unaligned accesses would do).\n\nIt does very much depend on little-endian logic, but it\u0027s a very hot\ncouple of functions under some real loads, and this patch improves the\nperformance of __d_lookup_rcu() and link_path_walk() by up to about 30%.\nGiving a 10% improvement on some very pathname-heavy benchmarks.\n\nBecause we do make unaligned accesses past the filename, the\noptimization is disabled when CONFIG_DEBUG_PAGEALLOC is active, and we\neffectively depend on the fact that on x86 we don\u0027t really ever have the\nlast page of usable RAM followed immediately by any IO memory (due to\nACPI tables, BIOS buffer areas etc).\n\nSome of the bit operations we do are a bit \"subtle\".  It\u0027s commented,\nbut you do need to really think about the code.  Or just consider it\nblack magic.\n\nThanks to people on G+ for some of the optimized bit tricks.\n"
    },
    {
      "commit": "7f6c7e62fcc123e6bd9206da99a2163fe3facc31",
      "tree": "1ab20c92d09849bee893a80baefa0057bbc072ed",
      "parents": [
        "097b180ca09b581ef0dc24fbcfc1b227de3875df"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Mar 06 13:56:34 2012 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Mar 10 17:05:30 2012 -0500"
      },
      "message": "vfs: fix return value from do_last()\n\ncomplete_walk() returns either ECHILD or ESTALE.  do_last() turns this into\nECHILD unconditionally.  If not in RCU mode, this error will reach userspace\nwhich is complete nonsense.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCC: stable@vger.kernel.org\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "097b180ca09b581ef0dc24fbcfc1b227de3875df",
      "tree": "880d5b5a0dfa28df3b4cec83bc557f2d47a459b0",
      "parents": [
        "f6940fe9092e796119af691c7f722c252f4fc524"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Mar 06 13:56:33 2012 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Mar 10 17:05:30 2012 -0500"
      },
      "message": "vfs: fix double put after complete_walk()\n\ncomplete_walk() already puts nd-\u003epath, no need to do it again at cleanup time.\n\nThis would result in Oopses if triggered, apparently the codepath is not too\nwell exercised.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCC: stable@vger.kernel.org\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "bfcfaa77bdf0f775263e906015982a608df01c76",
      "tree": "6671137d4af157b851d953b7e2809abbfa809e81",
      "parents": [
        "9f8050c4f99789d03ca96d4e625bd6637241828f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 06 11:16:17 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 08 18:08:44 2012 -0800"
      },
      "message": "vfs: use \u0027unsigned long\u0027 accesses for dcache name comparison and hashing\n\nOk, this is hacky, and only works on little-endian machines with goo\nunaligned handling.  And even then only with CONFIG_DEBUG_PAGEALLOC\ndisabled, since it can access up to 7 bytes after the pathname.\n\nBut it runs like a bat out of hell.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ae942ae71934fddd0639160c24f6efa703d5784e",
      "tree": "eb5ee13ffa5e56805733c46299fbbac804bb5542",
      "parents": [
        "62d222b8c8ee0ddd3dd6921ce9c1a5667616dc1c"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 02 19:40:57 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 02 19:40:57 2012 -0800"
      },
      "message": "vfs: export full_name_hash() function to modules\n\nCommit 5707c87f \"vfs: uninline full_name_hash()\" broke the modular\nbuild, because it needs exporting now that it isn\u0027t inlined any more.\n\nReported-by: Tetsuo Handa \u003cpenguin-kernel@i-love.sakura.ne.jp\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "200e9ef7ab51f3dce4f35f90ea458cf43ea83bb8",
      "tree": "0fb908e21482546aef9c9fff5580ca79fec1cd56",
      "parents": [
        "5707c87f20bca9e76969bb4096149de6ef74cbb9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 02 14:49:24 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 02 14:49:24 2012 -0800"
      },
      "message": "vfs: split up name hashing in link_path_walk() into helper function\n\nThe code in link_path_walk() that finds out the length and the hash of\nthe next path component is some of the hottest code in the kernel.  And\nI have a version of it that does things at the full width of the CPU\nwordsize at a time, but that means that we *really* want to split it up\ninto a separate helper function.\n\nSo this re-organizes the code a bit and splits the hashing part into a\nhelper function called \"hash_name()\".  It returns the length of the\npathname component, while at the same time computing and writing the\nhash to the appropriate location.\n\nThe code generation is slightly changed by this patch, but generally for\nthe better - and the added abstraction actually makes the code easier to\nread too.  And the new interface is well suited for replacing just the\n\"hash_name()\" function with alternative implementations.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0145acc202ca613b23b5383e55df3c32a92ad1bf",
      "tree": "779292f953fb9845252295679fb712faf7f52624",
      "parents": [
        "8966be90304b394fd6a2c5af7b6b3abe2df3889c"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 02 14:32:59 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 02 14:32:59 2012 -0800"
      },
      "message": "vfs: uninline full_name_hash()\n\n.. and also use it in lookup_one_len() rather than open-coding it.\n\nThere aren\u0027t any performance-critical users, so inlining it is silly.\nBut it wouldn\u0027t matter if it wasn\u0027t for the fact that the word-at-a-time\ndentry name patches want to conditionally replace the function, and\nuninlining it sets the stage for that.\n\nSo again, this is a preparatory patch that doesn\u0027t change any semantics,\nand only prepares for a much cleaner and testable word-at-a-time dentry\nname accessor patch.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "630d9c47274aa89bfa77fe6556d7818bdcb12992",
      "tree": "501b418c3c89d4c80113aa2fdbbc917eedacd2d4",
      "parents": [
        "13ae246db4a02971ef4f557af1f6d3e21d64b710"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Wed Nov 16 23:57:37 2011 -0500"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Tue Feb 28 19:31:58 2012 -0500"
      },
      "message": "fs: reduce the use of module.h wherever possible\n\nFor files only using THIS_MODULE and/or EXPORT_SYMBOL, map\nthem onto including export.h -- or if the file isn\u0027t even\nusing those, then just delete the include.  Fix up any implicit\ninclude dependencies that were being masked by module.h along\nthe way.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "e188dc02d3a9c911be56eca5aa114fe7e9822d53",
      "tree": "8b2ad2bff8dd125b5d809b943620ade2842abb4a",
      "parents": [
        "3b582f393150c72b18339bc00d7ed4fb22445ed1"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Fri Feb 03 14:25:18 2012 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Feb 13 20:45:37 2012 -0500"
      },
      "message": "vfs: fix d_inode_lookup() dentry ref leak\n\nd_inode_lookup() leaks a dentry reference on IS_DEADDIR().\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCC: stable@vger.kernel.org\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4043cde8ecf7f7d880eb1133c201a3d392fd68c3",
      "tree": "d740c60e6b56565a7e996c3d0308e66f7c8651f8",
      "parents": [
        "633b45454503489209b0d9a45f9e3cd1b852c614"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Jan 03 14:23:08 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 17 16:17:01 2012 -0500"
      },
      "message": "audit: do not call audit_getname on error\n\nJust a code cleanup really.  We don\u0027t need to make a function call just for\nit to return on error.  This also makes the VFS function even easier to follow\nand removes a conditional on a hot path.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "ece2ccb668046610189d88d6aaf05aeb09c988a1",
      "tree": "a0349945f7537de2aca420b47ced23b6294f8b65",
      "parents": [
        "d10577a8d86a0c735488d66d32289a6d66bcfa20",
        "a218d0fdc5f9004164ff151d274487f6799907d0",
        "ff01bb4832651c6d25ac509a06a10fcbd75c461c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jan 06 23:15:54 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jan 06 23:15:54 2012 -0500"
      },
      "message": "Merge branches \u0027vfsmount-guts\u0027, \u0027umode_t\u0027 and \u0027partitions\u0027 into Z\n"
    },
    {
      "commit": "a73324da7af4052e1d1ddec6a5980f552420e58b",
      "tree": "65c119bf3bb852c4298aeb24b906dc3a5be7520a",
      "parents": [
        "0714a533805a0f8ebfc6fdb6bda9f129b8c7c6d7"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 22:25:07 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:05 2012 -0500"
      },
      "message": "vfs: move mnt_mountpoint to struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "0714a533805a0f8ebfc6fdb6bda9f129b8c7c6d7",
      "tree": "7f34ceedc12c4a680ca3509562b09ec441a0954f",
      "parents": [
        "3376f34fff5be9954fd9a9c4fd68f4a0a36d480e"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 22:19:58 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:05 2012 -0500"
      },
      "message": "vfs: now it can be done - make mnt_parent point to struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "3376f34fff5be9954fd9a9c4fd68f4a0a36d480e",
      "tree": "22a5995e66efd92cc394186c56deb082e4521440",
      "parents": [
        "643822b41e5e0f133438883b0be574cdaf168a2a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 22:05:19 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:04 2012 -0500"
      },
      "message": "vfs: mnt_parent moved to struct mount\n\nthe second victim...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c71053659e3bb27d44b79da0bb4abf5838c2060a",
      "tree": "59e86cc1602db35ffc2c3991953161f1619706b1",
      "parents": [
        "7d6fec45a5131918b51dcd76da52f2ec86a85be6"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 18:22:03 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:56:58 2012 -0500"
      },
      "message": "vfs: spread struct mount - __lookup_mnt() result\n\nswitch __lookup_mnt() to returning struct mount *; callers adjusted.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a218d0fdc5f9004164ff151d274487f6799907d0",
      "tree": "24ea22ffb4aadb1fedff50c4a7fcb17af1981459",
      "parents": [
        "04fc66e789a896e684bfdca30208e57eb832dd96"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Nov 21 14:59:34 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:55:19 2012 -0500"
      },
      "message": "switch open and mkdir syscalls to umode_t\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f69aac0006c303a98da9d2db04b71fd1c600d503",
      "tree": "4771957c3c6b661611cdc2548ee967011ace6b8b",
      "parents": [
        "649fc7b1b046eb98bf9e3fe20c9d11f629293140"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jul 26 04:31:40 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:55:14 2012 -0500"
      },
      "message": "switch may_mknod() to umode_t\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1a67aafb5f72a436ca044293309fa7e6351d6a35",
      "tree": "d9e58600148de9d41b478cf815773b746647d15b",
      "parents": [
        "4acdaf27ebe2034c342f3be57ef49aed1ad885ef"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jul 26 01:52:52 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:54:54 2012 -0500"
      },
      "message": "switch -\u003emknod() to umode_t\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4acdaf27ebe2034c342f3be57ef49aed1ad885ef",
      "tree": "d89a876ee19cd88609a587f8aa6c464a52ee6d98",
      "parents": [
        "18bb1db3e7607e4a997d50991a6f9fa5b0f8722c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jul 26 01:42:34 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:54:53 2012 -0500"
      },
      "message": "switch -\u003ecreate() to umode_t\n\nvfs_create() ignores everything outside of 16bit subset of its\nmode argument; switching it to umode_t is obviously equivalent\nand it\u0027s the only caller of the method\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "18bb1db3e7607e4a997d50991a6f9fa5b0f8722c",
      "tree": "4ee4e584bc9a67f3ec14ce159d2d7d4a27e68d4a",
      "parents": [
        "8208a22bb8bd3c52ef634b4ff194f14892ab1713"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jul 26 01:41:39 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:54:53 2012 -0500"
      },
      "message": "switch vfs_mkdir() and -\u003emkdir() to umode_t\n\nvfs_mkdir() gets int, but immediately drops everything that might not\nfit into umode_t and that\u0027s the only caller of -\u003emkdir()...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "8208a22bb8bd3c52ef634b4ff194f14892ab1713",
      "tree": "1ebcac8fb2b747b1da894df8cfbb42bd0f742b06",
      "parents": [
        "dabe0dc194d5d56d379a8994fff47392744b6491"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jul 25 17:32:17 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:54:52 2012 -0500"
      },
      "message": "switch sys_mknodat(2) to umode_t\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "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"
    }
  ],
  "next": "d594e7ec4da6c1a527dea4965eee37cd785792b8"
}
