)]}'
{
  "log": [
    {
      "commit": "422e6c4bc4b48c15b3cb57a1ca71431abfc57e54",
      "tree": "81ceb21f84a79e796ee33b5d17e17406f096abcb",
      "parents": [
        "c83ce989cb5ff86575821992ea82c4df5c388ebc",
        "574197e0de46a8a4db5c54ef7b65e43ffa8873a7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 15 15:48:13 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 15 15:48:13 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (57 commits)\n  tidy the trailing symlinks traversal up\n  Turn resolution of trailing symlinks iterative everywhere\n  simplify link_path_walk() tail\n  Make trailing symlink resolution in path_lookupat() iterative\n  update nd-\u003einode in __do_follow_link() instead of after do_follow_link()\n  pull handling of one pathname component into a helper\n  fs: allow AT_EMPTY_PATH in linkat(), limit that to CAP_DAC_READ_SEARCH\n  Allow passing O_PATH descriptors via SCM_RIGHTS datagrams\n  readlinkat(), fchownat() and fstatat() with empty relative pathnames\n  Allow O_PATH for symlinks\n  New kind of open files - \"location only\".\n  ext4: Copy fs UUID to superblock\n  ext3: Copy fs UUID to superblock.\n  vfs: Export file system uuid via /proc/\u003cpid\u003e/mountinfo\n  unistd.h: Add new syscalls numbers to asm-generic\n  x86: Add new syscalls for x86_64\n  x86: Add new syscalls for x86_32\n  fs: Remove i_nlink check from file system link callback\n  fs: Don\u0027t allow to create hardlink for deleted file\n  vfs: Add open by file handle support\n  ...\n"
    },
    {
      "commit": "c83ce989cb5ff86575821992ea82c4df5c388ebc",
      "tree": "29741017daffb074fbe09c3aec6d937f2f0c140d",
      "parents": [
        "c826cb7dfce80512c26c984350077a25046bd215"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Mar 15 13:36:43 2011 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 15 15:46:11 2011 -0700"
      },
      "message": "VFS: Fix the nfs sillyrename regression in kernel 2.6.38\n\nThe new vfs locking scheme introduced in 2.6.38 breaks NFS sillyrename\nbecause the latter relies on being able to determine the parent\ndirectory of the dentry in the -\u003eiput() callback in order to send the\nappropriate unlink rpc call.\n\nLooking at the code that cares about races with dput(), there doesn\u0027t\nseem to be anything that specifically uses d_parent as a test for\nwhether or not there is a race:\n  - __d_lookup_rcu(), __d_lookup() all test for d_hashed() after d_parent\n  - shrink_dcache_for_umount() is safe since nothing else can rearrange\n    the dentries in that super block.\n  - have_submount(), select_parent() and d_genocide() can test for a\n    deletion if we set the DCACHE_DISCONNECTED flag when the dentry\n    is removed from the parent\u0027s d_subdirs list.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: stable@kernel.org (2.6.38, needs commit c826cb7dfce8 \"dcache.c:\n\tcreate helper function for duplicated functionality\" )\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c826cb7dfce80512c26c984350077a25046bd215",
      "tree": "6230dc7babebfa008d67bd309de7562a0292ab8b",
      "parents": [
        "76ca07832842100b14a31ad8996dab7b0c28aa42"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 15 15:29:21 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 15 15:29:21 2011 -0700"
      },
      "message": "dcache.c: create helper function for duplicated functionality\n\nThis creates a helper function for he \"try to ascend into the parent\ndirectory\" case, which was written out in triplicate before.  With all\nthe locking and subtle sequence number stuff, we really don\u0027t want to\nduplicate that kind of code.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "574197e0de46a8a4db5c54ef7b65e43ffa8873a7",
      "tree": "c7669dd50705785f4632ff9b054bcd2e4614ea46",
      "parents": [
        "b356379a020bb7197603118bb1cbc903963aa198"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 22:20:34 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 17:16:25 2011 -0400"
      },
      "message": "tidy the trailing symlinks traversal up\n\n* pull the handling of current-\u003etotal_link_count into\n__do_follow_link()\n* put the common \"do -\u003eput_link() if needed and path_put() the link\"\n  stuff into a helper (put_link(nd, link, cookie))\n* rename __do_follow_link() to follow_link(), while we are at it\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b356379a020bb7197603118bb1cbc903963aa198",
      "tree": "834722d850b2f6a82a07464680244847ed477755",
      "parents": [
        "ce0525449da56444948c368f52e10f3db0465338"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 21:54:55 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 17:16:25 2011 -0400"
      },
      "message": "Turn resolution of trailing symlinks iterative everywhere\n\nThe last remaining place (resolution of nested symlink) converted\nto the loop of the same kind we have in path_lookupat() and\npath_openat().\n\nNote that we still *do* have a recursion in pathname resolution;\ncan\u0027t avoid it, really.  However, it\u0027s strictly for nested symlinks\nnow - i.e. ones in the middle of a pathname.\n\nlink_path_walk() has lost the tail now - it always walks everything\nexcept the last component.\n\ndo_follow_link() renamed to nested_symlink() and moved down.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ce0525449da56444948c368f52e10f3db0465338",
      "tree": "df50f16b0af733738b39c9430145d94e35a2abdb",
      "parents": [
        "bd92d7fed877ed1e6997e4f3f13dbcd872947653"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 21:28:04 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 17:16:25 2011 -0400"
      },
      "message": "simplify link_path_walk() tail\n\nNow that link_path_walk() is called without LOOKUP_PARENT\nonly from do_follow_link(), we can simplify the checks in\nlast component handling.  First of all, checking if we\u0027d\narrived to a directory is not needed - the caller will check\nit anyway.  And LOOKUP_FOLLOW is guaranteed to be there,\nsince we only get to that place with nd-\u003edepth \u003e 0.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "bd92d7fed877ed1e6997e4f3f13dbcd872947653",
      "tree": "184223c18695fd1b543850dc186e89faf71bb461",
      "parents": [
        "b21041d0f72899ed815bd2cbf7275339c74737b6"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 19:54:59 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 17:16:25 2011 -0400"
      },
      "message": "Make trailing symlink resolution in path_lookupat() iterative\n\nNow the only caller of link_path_walk() that does *not* pass\nLOOKUP_PARENT is do_follow_link()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b21041d0f72899ed815bd2cbf7275339c74737b6",
      "tree": "e9dddabedc599175926ea29603ca366cdc50dbaa",
      "parents": [
        "ce57dfc1791221ef58b6d6b8f5437fccefc4e187"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 20:01:51 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 17:16:25 2011 -0400"
      },
      "message": "update nd-\u003einode in __do_follow_link() instead of after do_follow_link()\n\n... and note that we only need to do it for LAST_BIND symlinks\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ce57dfc1791221ef58b6d6b8f5437fccefc4e187",
      "tree": "f4745174c126231bbd2c4a652d37f086ad035e3c",
      "parents": [
        "11a7b371b64ef39fc5fb1b6f2218eef7c4d035e3"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 13 19:58:58 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 17:16:20 2011 -0400"
      },
      "message": "pull handling of one pathname component into a helper\n\nnew helper: walk_component().  Handles everything except symlinks;\nreturns negative on error, 0 on success and 1 on symlinks we decided\nto follow.  Drops out of RCU mode on such symlinks.\n\nlink_path_walk() and do_last() switched to using that.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "11a7b371b64ef39fc5fb1b6f2218eef7c4d035e3",
      "tree": "7d2059c9570e24c7d742eedfeedf19743d05a744",
      "parents": [
        "326be7b484843988afe57566b627fb7a70beac56"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sat Jan 29 18:43:42 2011 +0530"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 17:16:05 2011 -0400"
      },
      "message": "fs: allow AT_EMPTY_PATH in linkat(), limit that to CAP_DAC_READ_SEARCH\n\nWe don\u0027t want to allow creation of private hardlinks by different application\nusing the fd passed to them via SCM_RIGHTS. So limit the null relative name\nusage in linkat syscall to CAP_DAC_READ_SEARCH\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "326be7b484843988afe57566b627fb7a70beac56",
      "tree": "04a15bfdb681ad09444cf2f3d72ae0d38fb0432b",
      "parents": [
        "65cfc6722361570bfe255698d9cd4dccaf47570d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 13 17:08:22 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 02:21:45 2011 -0400"
      },
      "message": "Allow passing O_PATH descriptors via SCM_RIGHTS datagrams\n\nJust need to make sure that AF_UNIX garbage collector won\u0027t\nconfuse O_PATHed socket on filesystem for real AF_UNIX opened\nsocket.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "65cfc6722361570bfe255698d9cd4dccaf47570d",
      "tree": "d98ac0a392cf9abc1bbc3363448c8e072504c6a4",
      "parents": [
        "bcda76524cd1fa32af748536f27f674a13e56700"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 13 15:56:26 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 02:21:45 2011 -0400"
      },
      "message": "readlinkat(), fchownat() and fstatat() with empty relative pathnames\n\nFor readlinkat() we simply allow empty pathname; it will fail unless\nwe have dfd equal to O_PATH-opened symlink, so we are outside of\nPOSIX scope here.  For fchownat() and fstatat() we allow AT_EMPTY_PATH;\nlet the caller explicitly ask for such behaviour.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "bcda76524cd1fa32af748536f27f674a13e56700",
      "tree": "37dbc7fb50b515f3dff820e14d92e768fb1cda31",
      "parents": [
        "1abf0c718f15a56a0a435588d1b104c7a37dc9bd"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 13 16:42:14 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 02:21:45 2011 -0400"
      },
      "message": "Allow O_PATH for symlinks\n\nAt that point we can\u0027t do almost nothing with them.  They can be opened\nwith O_PATH, we can manipulate such descriptors with dup(), etc. and\nwe can see them in /proc/*/{fd,fdinfo}/*.\n\nWe can\u0027t (and won\u0027t be able to) follow /proc/*/fd/* symlinks for those;\nthere\u0027s simply not enough information for pathname resolution to go on\nfrom such point - to resolve a symlink we need to know which directory\ndoes it live in.\n\nWe will be able to do useful things with them after the next commit, though -\nreadlinkat() and fchownat() will be possible to use with dfd being an\nO_PATH-opened symlink and empty relative pathname.  Combined with\nopen_by_handle() it\u0027ll give us a way to do realink-by-handle and\nlchown-by-handle without messing with more redundant syscalls.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1abf0c718f15a56a0a435588d1b104c7a37dc9bd",
      "tree": "91a6fae3218686b9a945569a7fa7fad120f64e94",
      "parents": [
        "f2fa2ffc2046fdc35f96366d1ec8675f4d578522"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 13 03:51:11 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 02:21:45 2011 -0400"
      },
      "message": "New kind of open files - \"location only\".\n\nNew flag for open(2) - O_PATH.  Semantics:\n\t* pathname is resolved, but the file itself is _NOT_ opened\nas far as filesystem is concerned.\n\t* almost all operations on the resulting descriptors shall\nfail with -EBADF.  Exceptions are:\n\t1) operations on descriptors themselves (i.e.\n\t\tclose(), dup(), dup2(), dup3(), fcntl(fd, F_DUPFD),\n\t\tfcntl(fd, F_DUPFD_CLOEXEC, ...), fcntl(fd, F_GETFD),\n\t\tfcntl(fd, F_SETFD, ...))\n\t2) fcntl(fd, F_GETFL), for a common non-destructive way to\n\t\tcheck if descriptor is open\n\t3) \"dfd\" arguments of ...at(2) syscalls, i.e. the starting\n\t\tpoints of pathname resolution\n\t* closing such descriptor does *NOT* affect dnotify or\nposix locks.\n\t* permissions are checked as usual along the way to file;\nno permission checks are applied to the file itself.  Of course,\ngiving such thing to syscall will result in permission checks (at\nthe moment it means checking that starting point of ....at() is\na directory and caller has exec permissions on it).\n\nfget() and fget_light() return NULL on such descriptors; use of\nfget_raw() and fget_raw_light() is needed to get them.  That protects\nexisting code from dealing with those things.\n\nThere are two things still missing (they come in the next commits):\none is handling of symlinks (right now we refuse to open them that\nway; see the next commit for semantics related to those) and another\nis descriptor passing via SCM_RIGHTS datagrams.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f2fa2ffc2046fdc35f96366d1ec8675f4d578522",
      "tree": "b1215682f5fbb99cf975cee3fb827909ee4a1c97",
      "parents": [
        "03cb5f03dcb26846fcad345d8c15aae91579a53d"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sat Jan 29 18:43:40 2011 +0530"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 02:21:45 2011 -0400"
      },
      "message": "ext4: Copy fs UUID to superblock\n\nFile system UUID is made available to application\nvia  /proc/\u003cpid\u003e/mountinfo\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "03cb5f03dcb26846fcad345d8c15aae91579a53d",
      "tree": "cf95badfa17be432388dd75d975339954b7bcf50",
      "parents": [
        "93f1c20bc8cdb757be50566eff88d65c3b26881f"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sat Jan 29 18:43:39 2011 +0530"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 02:21:45 2011 -0400"
      },
      "message": "ext3: Copy fs UUID to superblock.\n\nFile system UUID is made available to application\nvia  /proc/\u003cpid\u003e/mountinfo\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "93f1c20bc8cdb757be50566eff88d65c3b26881f",
      "tree": "15e812c8127ddd795b8112f76832f6411953be62",
      "parents": [
        "a51571ccb8be1b88aea502ebba8350519682c16d"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sat Jan 29 18:43:38 2011 +0530"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 02:21:45 2011 -0400"
      },
      "message": "vfs: Export file system uuid via /proc/\u003cpid\u003e/mountinfo\n\nWe add a per superblock uuid field. File systems should\nupdate the uuid in the fill_super callback\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f17b6042073e7000a90063f7edbca59a5bd1caa2",
      "tree": "e893485df882c770da602030c6c1098b11ea3d56",
      "parents": [
        "aae8a97d3ec30788790d1720b71d76fd8eb44b73"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sat Jan 29 18:43:30 2011 +0530"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 02:21:44 2011 -0400"
      },
      "message": "fs: Remove i_nlink check from file system link callback\n\nNow that VFS check for inode-\u003ei_nlink \u003d\u003d 0 and returns proper\nerror, remove similar check from file system\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "aae8a97d3ec30788790d1720b71d76fd8eb44b73",
      "tree": "12dbe7afc10da3eee7ce5dfcf389b655634737e0",
      "parents": [
        "becfd1f37544798cbdfd788f32c827160fab98c1"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sat Jan 29 18:43:27 2011 +0530"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 02:21:44 2011 -0400"
      },
      "message": "fs: Don\u0027t allow to create hardlink for deleted file\n\nAdd inode-\u003ei_nlink \u003d\u003d 0 check in VFS. Some of the file systems\ndo this internally. A followup patch will remove those instance.\nThis is needed to ensure that with link by handle we don\u0027t allow\nto create hardlink of an unlinked file. The check also prevent a race\nbetween unlink and link\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "becfd1f37544798cbdfd788f32c827160fab98c1",
      "tree": "80353bdc7e59c661e841d2d0029bb308c0ed4da0",
      "parents": [
        "990d6c2d7aee921e3bce22b2d6a750fd552262be"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sat Jan 29 18:43:26 2011 +0530"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 02:21:44 2011 -0400"
      },
      "message": "vfs: Add open by file handle support\n\n[AV: duplicate of open() guts removed; file_open_root() used instead]\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "990d6c2d7aee921e3bce22b2d6a750fd552262be",
      "tree": "af273c4bfbfd0342d39d05d5a017382eb32a7538",
      "parents": [
        "f52e0c11305aa09ed56cad97ffc8f0cdc3d78b5d"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sat Jan 29 18:43:26 2011 +0530"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 02:21:37 2011 -0400"
      },
      "message": "vfs: Add name to file handle conversion support\n\nThe syscall also return mount id which can be used\nto lookup file system specific information such as uuid\nin /proc/\u003cpid\u003e/mountinfo\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f52e0c11305aa09ed56cad97ffc8f0cdc3d78b5d",
      "tree": "b04070034f8a941fe5d7e9e1b335a02784686bd5",
      "parents": [
        "5fe0c2378884e68beb532f5890cc0e3539ac747b"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 18:56:51 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 19:12:20 2011 -0400"
      },
      "message": "New AT_... flag: AT_EMPTY_PATH\n\nFor name_to_handle_at(2) we\u0027ll want both ...at()-style syscall that\nwould be usable for non-directory descriptors (with empty relative\npathname).  Introduce new flag (AT_EMPTY_PATH) to deal with that and\ncorresponding LOOKUP_EMPTY; teach user_path_at() and path_init() to\ndeal with the latter.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "5f40d4209461f23a15d88c6b55993bb8b0fa2670",
      "tree": "2261f8576d1317c5810edc326be0dfff964c254f",
      "parents": [
        "215fd2fa8879247ac6e3af1dc44af7cae8c06f1e",
        "53d4737580535e073963b91ce87d4216e434fab5"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 14 11:19:50 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 14 11:19:50 2011 -0700"
      },
      "message": "Merge branch \u0027bugfixes\u0027 of git://git.linux-nfs.org/projects/trondmy/nfs-2.6\n\n* \u0027bugfixes\u0027 of git://git.linux-nfs.org/projects/trondmy/nfs-2.6:\n  NFS: NFSROOT should default to \"proto\u003dudp\"\n  nfs4: remove duplicated #include\n  NFSv4: nfs4_state_mark_reclaim_nograce() should be static\n  NFSv4: Fix the setlk error handler\n  NFSv4.1: Fix the handling of the SEQUENCE status bits\n  NFSv4/4.1: Fix nfs4_schedule_state_recovery abuses\n  NFSv4.1 reclaim complete must wait for completion\n  NFSv4: remove duplicate clientid in struct nfs_client\n  NFSv4.1: Retry CREATE_SESSION on NFS4ERR_DELAY\n  sunrpc: Propagate errors from xs_bind() through xs_create_sock()\n  (try3-resend) Fix nfs_compat_user_ino64 so it doesn\u0027t cause problems if bit 31 or 63 are set in fileid\n  nfs: fix compilation warning\n  nfs: add kmalloc return value check in decode_and_add_ds\n  SUNRPC: Remove resource leak in svc_rdma_send_error()\n  nfs: close NFSv4 COMMIT vs. CLOSE race\n  SUNRPC: Close a race in __rpc_wait_for_completion_task()\n"
    },
    {
      "commit": "1eafbfeb7bdf59cfe173304c76188f3fd5f1fd05",
      "tree": "eae0a7cdf358b1b0396e9c3ec935d0e6be72bdb2",
      "parents": [
        "2fbfac4e053861925fa3fffcdc327649b09af54c"
      ],
      "author": {
        "name": "Timo Warns",
        "email": "Warns@pre-sense.de",
        "time": "Mon Mar 14 14:59:33 2011 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 14 10:14:28 2011 -0700"
      },
      "message": "Fix corrupted OSF partition table parsing\n\nThe kernel automatically evaluates partition tables of storage devices.\nThe code for evaluating OSF partitions contains a bug that leaks data\nfrom kernel heap memory to userspace for certain corrupted OSF\npartitions.\n\nIn more detail:\n\n  for (i \u003d 0 ; i \u003c le16_to_cpu(label-\u003ed_npartitions); i++, partition++) {\n\niterates from 0 to d_npartitions - 1, where d_npartitions is read from\nthe partition table without validation and partition is a pointer to an\narray of at most 8 d_partitions.\n\nAdd the proper and obvious validation.\n\nSigned-off-by: Timo Warns \u003cwarns@pre-sense.de\u003e\nCc: stable@kernel.org\n[ Changed the patch trivially to not repeat the whole le16_to_cpu()\n  thing, and to use an explicit constant for the magic value \u00278\u0027 ]\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5fe0c2378884e68beb532f5890cc0e3539ac747b",
      "tree": "be25414052184e146049ea6466854366559d5528",
      "parents": [
        "c8b91accfa1059d5565443193d89572eca2f5dd6"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sat Jan 29 18:43:25 2011 +0530"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:28 2011 -0400"
      },
      "message": "exportfs: Return the minimum required handle size\n\nThe exportfs encode handle function should return the minimum required\nhandle size. This helps user to find out the handle size by passing 0\nhandle size in the first step and then redoing to the call again with\nthe returned handle size value.\n\nAcked-by: Serge Hallyn \u003cserue@us.ibm.com\u003e\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c8b91accfa1059d5565443193d89572eca2f5dd6",
      "tree": "74f6061a20accac87a5f349ae8a34c4815cde88d",
      "parents": [
        "73d049a40fc6269189c4e2ba6792cb5dd054883c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Mar 12 10:41:39 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:28 2011 -0400"
      },
      "message": "clean statfs-like syscalls up\n\nNew helpers: user_statfs() and fd_statfs(), taking userland pathname and\ndescriptor resp. and filling struct kstatfs.  Syscalls of statfs family\n(native, compat and foreign - osf and hpux on alpha and parisc resp.)\nswitched to those.  Removes some boilerplate code, simplifies cleanup\non errors...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "73d049a40fc6269189c4e2ba6792cb5dd054883c",
      "tree": "a713747cd06926ad89bfa9b36ea13dd20bbc507f",
      "parents": [
        "5b6ca027d85b7438c84b78a54ccdc2e53f2909cd"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 11 12:08:24 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:28 2011 -0400"
      },
      "message": "open-style analog of vfs_path_lookup()\n\nnew function: file_open_root(dentry, mnt, name, flags) opens the file\nvfs_path_lookup would arrive to.\n\nNote that name can be empty; in that case the usual requirement that\ndentry should be a directory is lifted.\n\nopen-coded equivalents switched to it, may_open() got down exactly\none caller and became static.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "5b6ca027d85b7438c84b78a54ccdc2e53f2909cd",
      "tree": "e35b870101fbc6a2ea6e0399429d9c23707697f3",
      "parents": [
        "5a18fff2090c3af830d699c8ccb230498a1e37e5"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 09 23:04:47 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:27 2011 -0400"
      },
      "message": "reduce vfs_path_lookup() to do_path_lookup()\n\nNew lookup flag: LOOKUP_ROOT.  nd-\u003eroot is set (and held) by caller,\npath_init() starts walking from that place and all pathname resolution\nmachinery never drops nd-\u003eroot if that flag is set.  That turns\nvfs_path_lookup() into a special case of do_path_lookup() *and*\ngets us down to 3 callers of link_path_walk(), making it finally\nfeasible to rip the handling of trailing symlink out of link_path_walk().\nThat will not only simply the living hell out of it, but make life\nmuch simpler for unionfs merge.  Trailing symlink handling will\nbecome iterative, which is a good thing for stack footprint in\na lot of situations as well.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "5a18fff2090c3af830d699c8ccb230498a1e37e5",
      "tree": "388675113818a8d14e7cd7dc25185e1be55354f9",
      "parents": [
        "40b39136f07279fdc868a36cba050f4e84ce0ace"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 11 04:44:53 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:27 2011 -0400"
      },
      "message": "untangle do_lookup()\n\nThat thing has devolved into rats nest of gotos; sane use of unlikely()\ngets rid of that horror and gives much more readable structure:\n\t* make a fast attempt to find a dentry; false negatives are OK.\nIn RCU mode if everything went fine, we are done, otherwise just drop\nout of RCU.  If we\u0027d done (RCU) -\u003ed_revalidate() and it had not refused\noutright (i.e. didn\u0027t give us -ECHILD), remember its result.\n\t* now we are not in RCU mode and hopefully have a dentry.  If we\ndo not, lock parent, do full d_lookup() and if that has not found anything,\nallocate and call -\u003elookup().  If we\u0027d done that -\u003elookup(), remember that\ndentry is good and we don\u0027t need to revalidate it.\n\t* now we have a dentry.  If it has -\u003ed_revalidate() and we can\u0027t\nskip it, call it.\n\t* hopefully dentry is good; if not, either fail (in case of error)\nor try to invalidate it.  If d_invalidate() has succeeded, drop it and\nretry everything as if original attempt had not found a dentry.\n\t* now we can finish it up - deal with mountpoint crossing and\nautomount.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "40b39136f07279fdc868a36cba050f4e84ce0ace",
      "tree": "cd68e514f1b410d034c3b49678d15c352a38d6da",
      "parents": [
        "f374ed5fa8afed8590deaae5dc147422e0e1a6d9"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 09 16:22:18 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:27 2011 -0400"
      },
      "message": "path_openat: clean ELOOP handling a bit\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f374ed5fa8afed8590deaae5dc147422e0e1a6d9",
      "tree": "76bf116e7a8c75be60734527dd804632dee8a95b",
      "parents": [
        "6c0d46c493217cf48999b3f8808910ae534aa085"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 09 01:34:45 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:27 2011 -0400"
      },
      "message": "do_last: kill a rudiment of old -\u003ed_revalidate() workaround\n\nThere used to be time when -\u003ed_revalidate() couldn\u0027t return an error.\nSo intents code had lookup_instantiate_filp() stash ERR_PTR(error)\nin nd-\u003eintent.open.filp and had it checked after lookup_hash(), to\ncatch the otherwise silent failures.  That had been introduced by\ncommit 4af4c52f34606bdaab6930a845550c6fb02078a4.  These days\n-\u003ed_revalidate() can and does propagate errors back to callers\nexplicitly, so this check isn\u0027t needed anymore.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6c0d46c493217cf48999b3f8808910ae534aa085",
      "tree": "4c36a27f499ce8a8fb70807c78187c247e79dc65",
      "parents": [
        "ca344a894b41a133dab07dfbbdf652c053f6658c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 09 00:59:59 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:27 2011 -0400"
      },
      "message": "fold __open_namei_create() and open_will_truncate() into do_last()\n\n... and clean up a bit more\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ca344a894b41a133dab07dfbbdf652c053f6658c",
      "tree": "2ff61ce7ff0595b3200fa2d9b69e93a87e6c8427",
      "parents": [
        "9b44f1b3928b6f41532c9a1dc9a6fc665989ad5b"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 09 00:36:45 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:27 2011 -0400"
      },
      "message": "do_last: unify may_open() call and everyting after it\n\nWe have a bunch of diverging codepaths in do_last(); some of\nthem converge, but the case of having to create a new file\nduplicates large part of common tail of the rest and exits\nseparately.  Massage them so that they could be merged.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9b44f1b3928b6f41532c9a1dc9a6fc665989ad5b",
      "tree": "ffa1a492cc767c3c3e561c206131fa1762747833",
      "parents": [
        "0f9d1a10c341020617e5b1c7f9c16f6a070438ec"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 09 00:17:27 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:26 2011 -0400"
      },
      "message": "move may_open() from __open_name_create() to do_last()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "0f9d1a10c341020617e5b1c7f9c16f6a070438ec",
      "tree": "f5bbdf21986394cfe96e3965e75f633fd1331410",
      "parents": [
        "5a202bcd75bbd2397136397961babbd8463416af"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 09 00:13:14 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:26 2011 -0400"
      },
      "message": "expand finish_open() in its only caller\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "5a202bcd75bbd2397136397961babbd8463416af",
      "tree": "4a973df44ef169e66ee2aa5eb6c6b7ed69059509",
      "parents": [
        "6a96ba54418be740303765c0f52be028573cb99a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 08 14:17:44 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:26 2011 -0400"
      },
      "message": "sanitize pathname component hash calculation\n\nLift it to lookup_one_len() and link_path_walk() resp. into the\nsame place where we calculated default hash function of the same\nname.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6a96ba54418be740303765c0f52be028573cb99a",
      "tree": "1766b39499c1e0b18ed42f0ef31f64357fa8c8ab",
      "parents": [
        "fe2d35ff0d18a2c93993b0d7d46f846ff4331b72"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 07 23:49:20 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:26 2011 -0400"
      },
      "message": "kill __lookup_one_len()\n\nonly one caller left\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "fe2d35ff0d18a2c93993b0d7d46f846ff4331b72",
      "tree": "0a60fd245b1aff56a0b1470cadd6e242bfd4a2de",
      "parents": [
        "70e9b3571107b88674cd55ae4bed33f76261e7d3"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Mar 05 22:58:25 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:26 2011 -0400"
      },
      "message": "switch non-create side of open() to use of do_last()\n\nInstead of path_lookupat() doing trailing symlink resolution,\nuse the same scheme as on the O_CREAT side.  Walk with\nLOOKUP_PARENT, then (in do_last()) look the final component\nup, then either open it or return error or, if it\u0027s a symlink,\ngive the symlink back to path_openat() to be resolved there.\n\nThe really messy complication here is RCU.  We don\u0027t want to drop\nout of RCU mode before the final lookup, since we don\u0027t want to\nbounce parent directory -\u003ed_count without a good reason.\n\nResult is _not_ pretty; later in the series we\u0027ll clean it up.\nFor now we are roughly back where we\u0027d been before the revert\ndone by Nick\u0027s series - top-level logics of path_openat() is\ncleaned up, do_last() does actual opening, symlink resolution is\ndone uniformly.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "70e9b3571107b88674cd55ae4bed33f76261e7d3",
      "tree": "a22a2cd29b3075ddb9fed4305fd0ff88c07d5963",
      "parents": [
        "951361f954596bd134d4270df834f47d151f98a6"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Mar 05 21:12:22 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:26 2011 -0400"
      },
      "message": "get rid of nd-\u003efile\n\nDon\u0027t stash the struct file * used as starting point of walk in nameidata;\npass file ** to path_init() instead.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "951361f954596bd134d4270df834f47d151f98a6",
      "tree": "719622960d2ec96473636333ddc8b85ab8151505",
      "parents": [
        "a7472baba22dd5d68580f528374f93421b33667e"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 04 14:44:37 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:26 2011 -0400"
      },
      "message": "get rid of the last LOOKUP_RCU dependencies in link_path_walk()\n\nNew helper: terminate_walk().  An error has happened during pathname\nresolution and we either drop nd-\u003epath or terminate RCU, depending\nthe mode we had been in.  After that, nd is essentially empty.\nSwitch link_path_walk() to using that for cleanup.\n\nNow the top-level logics in link_path_walk() is back to sanity.  RCU\ndependencies are in the lower-level functions.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a7472baba22dd5d68580f528374f93421b33667e",
      "tree": "a7919a0dea2c58fa498e17d6c7be19fb0b9b571f",
      "parents": [
        "ef7562d5283a91da3ba5c14de3221f47b7f08823"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 04 14:39:30 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:25 2011 -0400"
      },
      "message": "make nameidata_dentry_drop_rcu_maybe() always leave RCU mode\n\nNow we have do_follow_link() guaranteed to leave without dangling RCU\nand the next step will get LOOKUP_RCU logics completely out of\nlink_path_walk().\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ef7562d5283a91da3ba5c14de3221f47b7f08823",
      "tree": "bf517d1a2c205ad475480c958449b2bc25de61b4",
      "parents": [
        "4455ca6223cc59cbc0a75f4be8bce9e84cc0d6b8"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 04 14:35:59 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:25 2011 -0400"
      },
      "message": "make handle_dots() leave RCU mode on error\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4455ca6223cc59cbc0a75f4be8bce9e84cc0d6b8",
      "tree": "5fb5966330b9dff9a364da07e85c224b89ca9dd2",
      "parents": [
        "9856fa1b281eccdc9f8d94d716e96818c675e78e"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 04 14:28:10 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:25 2011 -0400"
      },
      "message": "clear RCU on all failure exits from link_path_walk()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9856fa1b281eccdc9f8d94d716e96818c675e78e",
      "tree": "a66b72a6b0c143a29684b177771248c0881733ff",
      "parents": [
        "7bc055d1d524f209bf49d8b9cb220712dd7df4ed"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 04 14:22:06 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:25 2011 -0400"
      },
      "message": "pull handling of . and .. into inlined helper\n\ngetting LOOKUP_RCU checks out of link_path_walk()...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7bc055d1d524f209bf49d8b9cb220712dd7df4ed",
      "tree": "29971abb7728cb684a29d78b7c9482518d7c46d1",
      "parents": [
        "13aab428a73d3200b9283b61b7fdf5713181ac66"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Feb 23 19:41:31 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:25 2011 -0400"
      },
      "message": "kill out_dput: in link_path_walk()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "13aab428a73d3200b9283b61b7fdf5713181ac66",
      "tree": "b7350283378b60366609dca7b02c412b4632879e",
      "parents": [
        "47c805dc2d2dff686962f5f0baa6bac2d703ba19"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Feb 23 17:54:08 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:25 2011 -0400"
      },
      "message": "separate -ESTALE/-ECHILD retries in do_filp_open() from real work\n\nnew helper: path_openat().  Does what do_filp_open() does, except\nthat it tries only the walk mode (RCU/normal/force revalidation)\nit had been told to.\n\nBoth create and non-create branches are using path_lookupat() now.\nFixed the double audit_inode() in non-create branch.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "47c805dc2d2dff686962f5f0baa6bac2d703ba19",
      "tree": "b596e0a1aadb1550ef2099df95832196cd0eeda1",
      "parents": [
        "c3e380b0b3cfa613189fb91513efd88a65e1d9d8"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Feb 23 17:44:09 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:25 2011 -0400"
      },
      "message": "switch do_filp_open() to struct open_flags\n\ntake calculation of open_flags by open(2) arguments into new helper\nin fs/open.c, move filp_open() over there, have it and do_sys_open()\nuse that helper, switch exec.c callers of do_filp_open() to explicit\n(and constant) struct open_flags.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c3e380b0b3cfa613189fb91513efd88a65e1d9d8",
      "tree": "fd5f7d393beecb20d61cceb49b85c80f380790c2",
      "parents": [
        "f1afe9efc84476ca42fbb7301a441021063eead7"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Feb 23 13:39:45 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:25 2011 -0400"
      },
      "message": "Collect \"operation mode\" arguments of do_last() into a structure\n\nNo point messing with passing shitloads of \"operation mode\" arguments\nto do_open() one by one, especially since they are not going to change\nduring do_filp_open().  Collect them into a struct, fill it and pass\nto do_last() by reference.\n\nMake sure that lookup intent flags are correctly set and removed - we\nwant them for do_last(), but they make no sense for __do_follow_link().\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f1afe9efc84476ca42fbb7301a441021063eead7",
      "tree": "5bf606519f5192d97e8da59c989d89c78a62bf27",
      "parents": [
        "36f3b4f69070fee7c647bab5dc4408990bb3606c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Feb 22 22:27:28 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:24 2011 -0400"
      },
      "message": "clean up the failure exits after __do_follow_link() in do_filp_open()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "36f3b4f69070fee7c647bab5dc4408990bb3606c",
      "tree": "47431f3ae87bd5c81a157287d2d433386e9bbf6f",
      "parents": [
        "086e183a641109033420e0b26ddecb6f4abb4c89"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Feb 22 21:24:38 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:24 2011 -0400"
      },
      "message": "pull security_inode_follow_link() into __do_follow_link()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "086e183a641109033420e0b26ddecb6f4abb4c89",
      "tree": "c8b0c197c042c51140fc9b8bb8bfcf816fe29448",
      "parents": [
        "16c2cd7179881d5dd87779512ca5a0d657c64f62"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Feb 22 20:56:27 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:24 2011 -0400"
      },
      "message": "pull dropping RCU on success of link_path_walk() into path_lookupat()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "16c2cd7179881d5dd87779512ca5a0d657c64f62",
      "tree": "822d14ecf505cb3f53e2afe3e1e7867bb32ca346",
      "parents": [
        "fe479a580dc9c737c4eb49ff7fdb31d41d2c7003"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Feb 22 15:50:10 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:24 2011 -0400"
      },
      "message": "untangle the \"need_reval_dot\" mess\n\ninstead of ad-hackery around need_reval_dot(), do the following:\nset a flag (LOOKUP_JUMPED) in the beginning of path, on absolute\nsymlink traversal, on \"..\" and on procfs-style symlinks.  Clear on\nnormal components, leave unchanged on \".\".  Non-nested callers of\nlink_path_walk() call handle_reval_path(), which checks that flag\nis set and that fs does want the final revalidate thing, then does\n-\u003ed_revalidate().  In link_path_walk() all the return_reval stuff\nis gone.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "fe479a580dc9c737c4eb49ff7fdb31d41d2c7003",
      "tree": "cf15923f305d8c4298a44baf2359d2d9e3e2c7c6",
      "parents": [
        "e41f7d4ee5bdb00da7d327a00b0ab9c4a2e9eaa3"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Feb 22 15:10:03 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:24 2011 -0400"
      },
      "message": "merge component type recognition\n\nno need to do it in three places...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "e41f7d4ee5bdb00da7d327a00b0ab9c4a2e9eaa3",
      "tree": "d75350ba135d66f13a59864923f9a68c51f741e7",
      "parents": [
        "ee0827cd6b42b0385dc1a116cd853ac1b739f711"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Feb 22 14:02:58 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:24 2011 -0400"
      },
      "message": "merge path_init and path_init_rcu\n\nActual dependency on whether we want RCU or not is in 3 small areas\n(as it ought to be) and everything around those is the same in both\nversions.  Since each function has only one caller and those callers\nare on two sides of if (flags \u0026 LOOKUP_RCU), it\u0027s easier and cleaner\nto merge them and pull the checks inside.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ee0827cd6b42b0385dc1a116cd853ac1b739f711",
      "tree": "2b96985f7c87c4333d740d991fbdcb3f49a1a67e",
      "parents": [
        "52094c8a0610cf57920ad4c6c57470ae2ccbbd25"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Feb 21 23:38:09 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:24 2011 -0400"
      },
      "message": "sanitize path_walk() mess\n\nNew helper: path_lookupat().  Basically, what do_path_lookup() boils to\nmodulo -ECHILD/-ESTALE handler.  path_walk* family is gone; vfs_path_lookup()\nis using link_path_walk() directly, do_path_lookup() and do_filp_open()\nare using path_lookupat().\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "52094c8a0610cf57920ad4c6c57470ae2ccbbd25",
      "tree": "1601d55c395248a429eb1c0fddc1c23094694024",
      "parents": [
        "c9c6cac0c2bdbda42e7b804838648d0bc60ddb13"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Feb 21 21:34:47 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:23 2011 -0400"
      },
      "message": "take RCU-dependent stuff around exec_permission() into a new helper\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c9c6cac0c2bdbda42e7b804838648d0bc60ddb13",
      "tree": "c2d9b41eb24026d6769175e9ba3c17c8093b6aad",
      "parents": [
        "15a9155fe3e8215c02b80df51ec2cac7c0d726ad"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Feb 16 15:15:47 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:23 2011 -0400"
      },
      "message": "kill path_lookup()\n\nall remaining callers pass LOOKUP_PARENT to it, so\nflags argument can die; renamed to kern_path_parent()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c44ed965be7a84afaa07543c04eb97a5dfe93422",
      "tree": "df96d439962f923eee668e46dbff574b3603ca3f",
      "parents": [
        "c9a816c0ecb8cef8e6573a8eab47fc48c765e0a1"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@ZenIV.linux.org.uk",
        "time": "Sun Mar 13 23:24:46 2011 +0000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Mar 13 16:29:07 2011 -0700"
      },
      "message": "compat breakage in preadv() and pwritev()\n\nFix for a dumb preadv()/pwritev() compat bug - unlike the native\nvariants, the compat_...  ones forget to check FMODE_P{READ,WRITE}, so\ne.g.  on pipe the native preadv() will fail with -ESPIPE and compat one\nwill act as readv() and succeed.\n\nNot critical, but it\u0027s a clear bug with trivial fix, so IMO it\u0027s OK for\n-final.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "586ce098a23b6ab7383df853a84ae3d48dc889aa",
      "tree": "14092479a77973596686554b3159d4630df6a6a4",
      "parents": [
        "9179746652faf0aba07b8b7f770dcf29892a24c6"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 13 01:50:58 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 13 19:21:26 2011 -0400"
      },
      "message": "compat breakage in preadv() and pwritev()\n\nFix for a dumb preadv()/pwritev() compat bug - unlike the native\nvariants, compat_... ones forget to check FMODE_P{READ,WRITE}, so e.g.\non pipe the native preadv() will fail with -ESPIPE and compat one will\nact as readv() and succeed.  Not critical, but it\u0027s a clear bug with trivial\nfix.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "0e5b88cd9975dca6c191cc9bd11f233fac4ca882",
      "tree": "6302317acfb24d6b5ad7924aceaa0dd1c4a7a371",
      "parents": [
        "eebea5d13d391981061d6ef069a841002eba4a7a",
        "36e39c40b3facc9b489a13f1d301fc53ff6960a3"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Mar 13 16:00:49 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Mar 13 16:00:49 2011 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:\n  Btrfs: break out of shrink_delalloc earlier\n  btrfs: fix not enough reserved space\n  btrfs: fix dip leak\n  Btrfs: make sure not to return overlapping extents to fiemap\n  Btrfs: deal with short returns from copy_from_user\n  Btrfs: fix regressions in copy_from_user handling\n"
    },
    {
      "commit": "36e39c40b3facc9b489a13f1d301fc53ff6960a3",
      "tree": "e009d85998f89ef06d1d96515e3856fa074c4f4f",
      "parents": [
        "7e6b6465e6efbca3985258996be9c189da96c8bf"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sat Mar 12 07:08:42 2011 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Sat Mar 12 07:08:42 2011 -0500"
      },
      "message": "Btrfs: break out of shrink_delalloc earlier\n\nJosef had changed shrink_delalloc to exit after three shrink\nattempts, which wasn\u0027t quite enough because new writers could\nrace in and steal free space.\n\nBut it also fixed deadlocks and stalls as we tried to recover\ndelalloc reservations.  The code was tweaked to loop 1024\ntimes, and would reset the counter any time a small amount\nof progress was made.  This was too drastic, and with a\nlot of writers we can end up stuck in shrink_delalloc forever.\n\nThe shrink_delalloc loop is fairly complex because the caller is looping\ntoo, and the caller will go ahead and force a transaction commit to make\nsure we reclaim space.\n\nThis reworks things to exit shrink_delalloc when we\u0027ve forced some\nwriteback and the delalloc reservations have gone down.  This means\nthe writeback has not just started but has also finished at\nleast some of the metadata changes required to reclaim delalloc\nspace.\n\nIf we\u0027ve got this wrong, we\u0027re returning ENOSPC too early, which\nis a big improvement over the current behavior of hanging the machine.\n\nTest 224 in xfstests hammers on this nicely, and with 1000 writers\ntrying to fill a 1GB drive we get our first ENOSPC at 93% full.  The\nother writers are able to continue until we get 100%.\n\nThis is a worst case test for btrfs because the 1000 writers are doing\nsmall IO, and the small FS size means we don\u0027t have a lot of room\nfor metadata chunks.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "53d4737580535e073963b91ce87d4216e434fab5",
      "tree": "5dcecfe07d5f9ea1ec3a4b5678d8710c155ca340",
      "parents": [
        "57df216bd8c8813a79a6a618e3d2ec937d532b86"
      ],
      "author": {
        "name": "Chuck Lever",
        "email": "chuck.lever@oracle.com",
        "time": "Fri Mar 11 15:31:06 2011 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Mar 11 15:38:07 2011 -0500"
      },
      "message": "NFS: NFSROOT should default to \"proto\u003dudp\"\n\nThere have been a number of recent reports that NFSROOT is no longer\nworking with default mount options, but fails only with certain NICs.\n\nBrian Downing \u003cbdowning@lavos.net\u003e bisected to commit 56463e50 \"NFS:\nUse super.c for NFSROOT mount option parsing\".  Among other things,\nthis commit changes the default mount options for NFSROOT to use TCP\ninstead of UDP as the underlying transport.\n\nTCP seems less able to deal with NICs that are slow to initialize.\nThe system logs that have accompanied reports of problems all show\nthat NFSROOT attempts to establish a TCP connection before the NIC is\nfully initialized, and thus the TCP connection attempt fails.\n\nWhen a TCP connection attempt fails during a mount operation, the\nNFS stack needs to fail the operation.  Usually user space knows how\nand when to retry it.  The network layer does not report a distinct\nerror code for this particular failure mode.  Thus, there isn\u0027t a\nclean way for the RPC client to see that it needs to retry in this\ncase, but not in others.\n\nBecause NFSROOT is used in some environments where it is not possible\nto update the kernel command line to specify \"udp\", the proper thing\nto do is change NFSROOT to use UDP by default, as it did before commit\n56463e50.\n\nTo make it easier to see how to change default mount options for\nNFSROOT and to distinguish default settings from mandatory settings,\nI\u0027ve adjusted a couple of areas to document the specifics.\n\nroot_nfs_cat() is also modified to deal with commas properly when\nconcatenating strings containing mount option lists.  This keeps\nroot_nfs_cat() call sites simpler, now that we may be concatenating\nmultiple mount option strings.\n\nTested-by: Brian Downing \u003cbdowning@lavos.net\u003e\nTested-by: Mark Brown \u003cbroonie@opensource.wolfsonmicro.com\u003e\nSigned-off-by: Chuck Lever \u003cchuck.lever@oracle.com\u003e\nCc: \u003cstable@kernel.org\u003e # 2.6.37\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "57df216bd8c8813a79a6a618e3d2ec937d532b86",
      "tree": "ee3eddc164a7a1942a3239883336f90eeab6ee62",
      "parents": [
        "f9feab1e180d1392f2f59d692826c6da2e57adf4"
      ],
      "author": {
        "name": "Huang Weiyi",
        "email": "weiyi.huang@gmail.com",
        "time": "Tue Mar 08 23:11:30 2011 +0000"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Mar 11 15:18:37 2011 -0500"
      },
      "message": "nfs4: remove duplicated #include\n\nRemove duplicated #include(\u0027s) in\n  fs/nfs/nfs4proc.c\n\nSigned-off-by: Huang Weiyi \u003cweiyi.huang@gmail.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "f9feab1e180d1392f2f59d692826c6da2e57adf4",
      "tree": "1af4e0012ddb1d74b0cd44fc4461bd5b78f5adf5",
      "parents": [
        "ecac799a5ecc364006f0db6f2db15e77ed4d63e2"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Wed Mar 09 16:12:46 2011 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Mar 11 15:18:36 2011 -0500"
      },
      "message": "NFSv4: nfs4_state_mark_reclaim_nograce() should be static\n\nThere are no more external users of nfs4_state_mark_reclaim_nograce() or\nnfs4_state_mark_reclaim_reboot(), so mark them as static.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "ecac799a5ecc364006f0db6f2db15e77ed4d63e2",
      "tree": "200a71e8c3d564bb26e31cda2c4283142c380ee7",
      "parents": [
        "b4410c2f7f775b03da31566c05bb8d2383c7dc27"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Wed Mar 09 16:00:56 2011 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Mar 11 15:18:36 2011 -0500"
      },
      "message": "NFSv4: Fix the setlk error handler\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "b4410c2f7f775b03da31566c05bb8d2383c7dc27",
      "tree": "7d16c41557c7aa17489a222a660ad71bd7fb370b",
      "parents": [
        "0400a6b0cb756f976bae32ae8db47bfa9853897c"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Wed Mar 09 16:00:55 2011 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Mar 11 15:18:35 2011 -0500"
      },
      "message": "NFSv4.1: Fix the handling of the SEQUENCE status bits\n\nWe want SEQUENCE status bits to be handled by the state manager in order\nto avoid threading issues.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "0400a6b0cb756f976bae32ae8db47bfa9853897c",
      "tree": "ec1393f7e5eeec02a0cc4504d98a138ae458f443",
      "parents": [
        "c34c32ea97718bb24fc06158733580003ba89211"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Wed Mar 09 16:00:53 2011 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Mar 11 15:18:22 2011 -0500"
      },
      "message": "NFSv4/4.1: Fix nfs4_schedule_state_recovery abuses\n\nnfs4_schedule_state_recovery() should only be used when we need to force\nthe state manager to check the lease. If we just want to start the\nstate manager in order to handle a state recovery situation, we should be\nusing nfs4_schedule_state_manager().\n\nThis patch fixes the abuses of nfs4_schedule_state_recovery() by replacing\nits use with a set of helper functions that do the right thing.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "c34c32ea97718bb24fc06158733580003ba89211",
      "tree": "e11ca3f95ecc237499cd5d06f2377cc327c208b1",
      "parents": [
        "114f64b5f24abac33a42f4f1856eb3a9766d497e"
      ],
      "author": {
        "name": "Andy Adamson",
        "email": "andros@netapp.com",
        "time": "Wed Mar 09 13:13:46 2011 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Mar 10 15:05:01 2011 -0500"
      },
      "message": "NFSv4.1 reclaim complete must wait for completion\n\nSigned-off-by: Andy Adamson \u003candros@netapp.com\u003e\n[Trond: fix whitespace errors]\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "114f64b5f24abac33a42f4f1856eb3a9766d497e",
      "tree": "a3f5129bec4e2d7cf2afa0848798a5e74f422a3e",
      "parents": [
        "7d6d63d6427090cbb1d282364b65b12634ca59bd"
      ],
      "author": {
        "name": "Andy Adamson",
        "email": "andros@netapp.com",
        "time": "Wed Mar 09 13:13:45 2011 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Mar 10 15:05:00 2011 -0500"
      },
      "message": "NFSv4: remove duplicate clientid in struct nfs_client\n\nSigned-off-by: Andy Adamson \u003candros@netapp.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "7d6d63d6427090cbb1d282364b65b12634ca59bd",
      "tree": "b75f3278469f86453e8b90ced1a5c3698a9c4a93",
      "parents": [
        "4cea288aaf0e11647880cc487350b1dc45d9febc"
      ],
      "author": {
        "name": "Ricardo Labiaga",
        "email": "Ricardo.Labiaga@netapp.com",
        "time": "Wed Mar 09 13:13:44 2011 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Mar 10 15:04:59 2011 -0500"
      },
      "message": "NFSv4.1: Retry CREATE_SESSION on NFS4ERR_DELAY\n\nFix bug where we currently retry the EXCHANGEID call again, eventhough\nwe already have a valid clientid.  Instead, delay and retry the CREATE_SESSION\ncall.\n\nSigned-off-by: Ricardo Labiaga \u003cRicardo.Labiaga@netapp.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "3fa0b4e201d254b52a251fa348bd53e53000cff6",
      "tree": "ad5e41b45d5c8603901b34631b688ae5e3793942",
      "parents": [
        "43b7c3f051dea504afccc39bcb56d8e26c2e0b77"
      ],
      "author": {
        "name": "Frank Filz",
        "email": "ffilzlnx@us.ibm.com",
        "time": "Thu Dec 02 19:31:23 2010 +0000"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Mar 10 15:04:58 2011 -0500"
      },
      "message": "(try3-resend) Fix nfs_compat_user_ino64 so it doesn\u0027t cause problems if bit 31 or 63 are set in fileid\n\nThe problem was use of an int32, which when converted to a uint64\nis sign extended resulting in a fileid that doesn\u0027t fit in 32 bits\neven though the intent of the function is to fit the fileid into\n32 bits.\n\nSigned-off-by: Frank Filz \u003cffilzlnx@us.ibm.com\u003e\nReviewed-by: Jeff Layton \u003cjlayton@redhat.com\u003e\n[Trond: Added an include for compat.h]\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "43b7c3f051dea504afccc39bcb56d8e26c2e0b77",
      "tree": "6d031d1804acf9a5abeeb6b1597cb6821f96e493",
      "parents": [
        "b9f810570d9cc13177128e11a74e22d37aa68a1a"
      ],
      "author": {
        "name": "Jovi Zhang",
        "email": "bookjovi@gmail.com",
        "time": "Wed Mar 02 23:19:37 2011 +0000"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Mar 10 15:04:56 2011 -0500"
      },
      "message": "nfs: fix compilation warning\n\nthis commit fix compilation warning as following:\nlinux-2.6/fs/nfs/nfs4proc.c:3265: warning: comparison of distinct pointer types lacks a cast\n\nSigned-off-by: Jovi Zhang \u003cbookjovi@gmail.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "b9f810570d9cc13177128e11a74e22d37aa68a1a",
      "tree": "91c120b297c357695ae4be5dcd373ce220d0dedd",
      "parents": [
        "a5e502681007779d4762fb3ef7e80a3ecd1cfe6b"
      ],
      "author": {
        "name": "Stanislav Fomichev",
        "email": "kernel@fomichev.me",
        "time": "Sat Feb 05 23:13:01 2011 +0000"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Mar 10 15:04:55 2011 -0500"
      },
      "message": "nfs: add kmalloc return value check in decode_and_add_ds\n\nadd kmalloc return value check in decode_and_add_ds\n\nSigned-off-by: Stanislav Fomichev \u003ckernel@fomichev.me\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "d2224e7afbf2a6556f4f8f25bc0e96d99ec4d2bd",
      "tree": "e8eea0db32178870bee34073547b982216035e45",
      "parents": [
        "bf294b41cefcb22fc3139e0f42c5b3f06728bd5e"
      ],
      "author": {
        "name": "Jeff Layton",
        "email": "jlayton@redhat.com",
        "time": "Sun Mar 06 17:14:13 2011 +0000"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Mar 10 15:04:53 2011 -0500"
      },
      "message": "nfs: close NFSv4 COMMIT vs. CLOSE race\n\nI\u0027ve been adding in more artificial delays in the NFSv4 commit and close\ncodepaths to uncover races. The kernel I\u0027m testing has the patch to\nclose the race in __rpc_wait_for_completion_task that\u0027s in Trond\u0027s\ncthon2011 branch. The reproducer I\u0027ve been using does this in a loop:\n\n\tmkdir(\"DIR\");\n\tfd \u003d open(\"DIR/FILE\", O_WRONLY|O_CREAT|O_EXCL, 0644);\n\twrite(fd, \"abcdefg\", 7);\n\tclose(fd);\n\tunlink(\"DIR/FILE\");\n\trmdir(\"DIR\");\n\nThe above reproducer shouldn\u0027t result in any silly-renaming. However,\nwhen I add a \"msleep(100)\" just after the nfs_commit_clear_lock call in\nnfs_commit_release, I can almost always force one to occur. If I can\nforce it to occur with that, then it can happen without that delay\ngiven the right timing.\n\nnfs_commit_inode waits for the NFS_INO_COMMIT bit to clear when called\nwith FLUSH_SYNC set. nfs_commit_rpcsetup on the other hand does not wait\nfor the task to complete before putting its reference to it, so the last\nreference get put in rpc_release task and gets queued to a workqueue.\n\nIn this situation, the last open context reference may be put by the\nCOMMIT release instead of the close() syscall. The close() syscall\nreturns too quickly and the unlink runs while the d_count is still\nhigh since the COMMIT release hasn\u0027t put its dentry reference yet.\n\nFix this by having rpc_commit_rpcsetup wait for the RPC call to complete\nbefore putting the task reference when FLUSH_SYNC is set. With this, the\nlast reference is put by the process that\u0027s initiating the FLUSH_SYNC\ncommit and the race is closed.\n\nSigned-off-by: Jeff Layton \u003cjlayton@redhat.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "bf294b41cefcb22fc3139e0f42c5b3f06728bd5e",
      "tree": "250251c040a2d2e278b5a2ddd03c8d20a27be129",
      "parents": [
        "214d93b02c4fe93638ad268613c9702a81ed9192"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Feb 21 11:05:41 2011 -0800"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Mar 10 15:04:52 2011 -0500"
      },
      "message": "SUNRPC: Close a race in __rpc_wait_for_completion_task()\n\nAlthough they run as rpciod background tasks, under normal operation\n(i.e. no SIGKILL), functions like nfs_sillyrename(), nfs4_proc_unlck()\nand nfs4_do_close() want to be fully synchronous. This means that when we\nexit, we want all references to the rpc_task to be gone, and we want\nany dentry references etc. held by that task to be released.\n\nFor this reason these functions call __rpc_wait_for_completion_task(),\nfollowed by rpc_put_task() in the expectation that the latter will be\nreleasing the last reference to the rpc_task, and thus ensuring that the\ncallback_ops-\u003erpc_release() has been called synchronously.\n\nThis patch fixes a race which exists due to the fact that\nrpciod calls rpc_complete_task() (in order to wake up the callers of\n__rpc_wait_for_completion_task()) and then subsequently calls\nrpc_put_task() without ensuring that these two steps are done atomically.\n\nIn order to avoid adding new spin locks, the patch uses the existing\nwaitqueue spin lock to order the rpc_task reference count releases between\nthe waiting process and rpciod.\nThe common case where nobody is waiting for completion is optimised for by\nchecking if the RPC_TASK_ASYNC flag is cleared and/or if the rpc_task\nreference count is 1: in those cases we drop trying to grab the spin lock,\nand immediately free up the rpc_task.\n\nThose few processes that need to put the rpc_task from inside an\nasynchronous context and that do not care about ordering are given a new\nhelper: rpc_put_task_async().\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "7e6b6465e6efbca3985258996be9c189da96c8bf",
      "tree": "d4cde91d45865effa20fca9a789813321808c129",
      "parents": [
        "b4966b7770349deb05e3dd2bd2c65d2d044abbbb"
      ],
      "author": {
        "name": "Miao Xie",
        "email": "miaox@cn.fujitsu.com",
        "time": "Fri Feb 18 09:21:17 2011 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Mar 10 11:21:49 2011 -0500"
      },
      "message": "btrfs: fix not enough reserved space\n\nbtrfs_link() will insert 3 items(inode ref, dir name item and dir index item)\ninto the b+ tree and update 2 items(its inode, and parent\u0027s inode) in the b+\ntree. So we should reserve space for these 5 items, not 3 items.\n\nReported-by: Tsutomu Itoh \u003ct-itoh@jp.fujitsu.com\u003e\nSigned-off-by: Miao Xie \u003cmiaox@cn.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "b4966b7770349deb05e3dd2bd2c65d2d044abbbb",
      "tree": "79e281fde97b792eb732b5bde167c56939a6c67f",
      "parents": [
        "ea8efc74bd0402b4d5f663d007b4e25fa29ea778"
      ],
      "author": {
        "name": "Daniel J Blueman",
        "email": "daniel.blueman@gmail.com",
        "time": "Wed Mar 09 16:46:42 2011 +0000"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Mar 10 11:21:49 2011 -0500"
      },
      "message": "btrfs: fix dip leak\n\nThe btrfs DIO code leaks dip structs when dip-\u003ecsums allocation\nfails; bio-\u003ebi_end_io isn\u0027t set at the point where the free_ordered\nbranch is consequently taken, thus bio_endio doesn\u0027t call the function\nwhich would free it in the normal case. Fix.\n\nSigned-off-by: Daniel J Blueman \u003cdaniel.blueman@gmail.com\u003e\nAcked-by: Miao Xie \u003cmiaox@cn.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "d891eedbc3b1b0fade8a9ce60cc0eba1cccb59e5",
      "tree": "55dd6aa9e17cd763efda6291d740bafd7f05d802",
      "parents": [
        "1ca551c6caae7b52178555cdedea6ca26444be46"
      ],
      "author": {
        "name": "J. Bruce Fields",
        "email": "bfields@fieldses.org",
        "time": "Tue Jan 18 15:45:09 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 05:18:54 2011 -0500"
      },
      "message": "fs/dcache: allow d_obtain_alias() to return unhashed dentries\n\nWithout this patch, inodes are not promptly freed on last close of an\nunlinked file by an nfs client:\n\n\tclient$ mount -tnfs4 server:/export/ /mnt/\n\tclient$ tail -f /mnt/FOO\n\t...\n\tserver$ df -i /export\n\tserver$ rm /export/FOO\n\t(^C the tail -f)\n\tserver$ df -i /export\n\tserver$ echo 2 \u003e/proc/sys/vm/drop_caches\n\tserver$ df -i /export\n\nthe df\u0027s will show that the inode is not freed on the filesystem until\nthe last step, when it could have been freed after killing the client\u0027s\ntail -f. On-disk data won\u0027t be deallocated either, leading to possible\nspurious ENOSPC.\n\nThis occurs because when the client does the close, it arrives in a\ncompound with a putfh and a close, processed like:\n\n\t- putfh: look up the filehandle.  The only alias found for the\n\t  inode will be DCACHE_UNHASHED alias referenced by the filp\n\t  this, so it creates a new DCACHE_DISCONECTED dentry and\n\t  returns that instead.\n\t- close: closes the existing filp, which is destroyed\n\t  immediately by dput() since it\u0027s DCACHE_UNHASHED.\n\t- end of the compound: release the reference\n\t  to the current filehandle, and dput() the new\n\t  DCACHE_DISCONECTED dentry, which gets put on the\n\t  unused list instead of being destroyed immediately.\n\nNick Piggin suggested fixing this by allowing d_obtain_alias to return\nthe unhashed dentry that is referenced by the filp, instead of making it\ncreate a new dentry.\n\nLeave __d_find_alias() alone to avoid changing behavior of other\ncallers.\n\nAlso nfsd doesn\u0027t need all the checks of __d_find_alias(); any dentry,\nhashed or unhashed, disconnected or not, should work.\n\nSigned-off-by: J. Bruce Fields \u003cbfields@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1ca551c6caae7b52178555cdedea6ca26444be46",
      "tree": "cbe1a838712a092f7abe49920a09188ec2403578",
      "parents": [
        "991ac30d8b30ab6051dff5a7b07d84e6f5efa3a6"
      ],
      "author": {
        "name": "Marco Stornelli",
        "email": "marco.stornelli@gmail.com",
        "time": "Sat Mar 05 11:10:19 2011 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 04:22:15 2011 -0500"
      },
      "message": "Check for immutable/append flag in fallocate path\n\nIn the fallocate path the kernel doesn\u0027t check for the immutable/append\nflag. It\u0027s possible to have a race condition in this scenario: an\napplication open a file in read/write and it does something, meanwhile\nroot set the immutable flag on the file, the application at that point\ncan call fallocate with success. In addition, we don\u0027t allow to do any\nunreserve operation on an append only file but only the reserve one.\n\nSigned-off-by: Marco Stornelli \u003cmarco.stornelli@gmail.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9177ada99d5e69fe91950b3ef5c23f2bcd109987",
      "tree": "4de42636f1c2dd2f6a230d48c6c5ef507026ec7c",
      "parents": [
        "8ce84eeb5b40da21f20174dd25891a8409534237"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 03:45:49 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 03:45:49 2011 -0500"
      },
      "message": "fat: fix d_revalidate oopsen on NFS exports\n\ncan\u0027t blindly check nd-\u003eflags in -\u003ed_revalidate()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "8ce84eeb5b40da21f20174dd25891a8409534237",
      "tree": "a375dc92bc563655976d90ccfa6d794ab551f47a",
      "parents": [
        "4714e63731a8a641b5e0ed5e2e2191c13bf2d71a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 03:45:28 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 03:45:28 2011 -0500"
      },
      "message": "jfs: fix d_revalidate oopsen on NFS exports\n\ncan\u0027t blindly check nd-\u003eflags in -\u003ed_revalidate()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4714e63731a8a641b5e0ed5e2e2191c13bf2d71a",
      "tree": "b857a67b96e602835db64abd1e883c16691e5921",
      "parents": [
        "53fe924161ff18d24c5c1c256549e9c1b9874827"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 03:45:07 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 03:45:07 2011 -0500"
      },
      "message": "ocfs2: fix d_revalidate oopsen on NFS exports\n\ncan\u0027t blindly check nd-\u003eflags in -\u003ed_revalidate()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "53fe924161ff18d24c5c1c256549e9c1b9874827",
      "tree": "4447ddc370f8138952146e54c515675cc026a2ee",
      "parents": [
        "529c5f958f9e60abaa7407986034b17d17536bf2"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 03:44:48 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 03:44:48 2011 -0500"
      },
      "message": "gfs2: fix d_revalidate oopsen on NFS exports\n\ncan\u0027t blindly check nd-\u003eflags in -\u003ed_revalidate()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "529c5f958f9e60abaa7407986034b17d17536bf2",
      "tree": "3e946687f07c6738b9695224fd6492ceb8236e1e",
      "parents": [
        "0eb980e31770cfeff6e27760b4692d595b8dbf28"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 03:44:31 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 03:44:31 2011 -0500"
      },
      "message": "fuse: fix d_revalidate oopsen on NFS exports\n\ncan\u0027t blindly check nd-\u003eflags in -\u003ed_revalidate()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "0eb980e31770cfeff6e27760b4692d595b8dbf28",
      "tree": "62ce6d994beb41f1276169de643ebc9e343daeaa",
      "parents": [
        "c78f4cc5e7d642c7009089817c12d8984e7ba872"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 03:44:05 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 03:44:05 2011 -0500"
      },
      "message": "ceph: fix d_revalidate oopsen on NFS exports\n\ncan\u0027t blindly check nd-\u003eflags in -\u003ed_revalidate()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c78f4cc5e7d642c7009089817c12d8984e7ba872",
      "tree": "15fec47edc3e047865e98b5f8c233b1d8d2e063a",
      "parents": [
        "ae50adcb0ac4cde67a7aec8ae67249d1b2be2948"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Feb 16 10:14:56 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 03:42:01 2011 -0500"
      },
      "message": "reiserfs xattr -\u003ed_revalidate() shouldn\u0027t care about RCU\n\n... it returns an error unconditionally\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ae50adcb0ac4cde67a7aec8ae67249d1b2be2948",
      "tree": "757ea609da68ae08471bc2d0f689aa287ee89cbf",
      "parents": [
        "3979491701cfb2aa7477f5baf40553355391418b"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Feb 16 10:04:50 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 03:41:53 2011 -0500"
      },
      "message": "/proc/self is never going to be invalidated...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "3979491701cfb2aa7477f5baf40553355391418b",
      "tree": "4eafd59af4fd75e646598e581abb4d41e030fef2",
      "parents": [
        "6b684cd5799cd1e691024ca3a688d1cdec9d4824",
        "3ec07aa9522e3d5e9d5ede7bef946756e623a0a0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 09 14:52:09 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 09 14:52:09 2011 -0800"
      },
      "message": "Merge branch \u0027for-2.6.38\u0027 of git://linux-nfs.org/~bfields/linux\n\n* \u0027for-2.6.38\u0027 of git://linux-nfs.org/~bfields/linux:\n  nfsd: wrong index used in inner loop\n  nfsd4: fix bad pointer on failure to find delegation\n  NFSD: fix decode_cb_sequence4resok\n"
    },
    {
      "commit": "78833dd70602be6b71ef34225f708b1e500947dc",
      "tree": "807050f760ccc7305b194d7568ebf98737076a40",
      "parents": [
        "a5abba989deceb731047425812d268daf7536575",
        "b306419ae08d9def53f2142a37cc0a58622307a8"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 09 13:55:51 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 09 13:55:51 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6:\n  nd-\u003einode is not set on the second attempt in path_walk()\n  unfuck proc_sysctl -\u003ed_compare()\n  minimal fix for do_filp_open() race\n"
    },
    {
      "commit": "b306419ae08d9def53f2142a37cc0a58622307a8",
      "tree": "8d3e6a51b05f39230a968e0655162f560f6c3c42",
      "parents": [
        "dfef6dcd35cb4a251f6322ca9b2c06f0bb1aa1f4"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 08 21:16:28 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 08 21:16:28 2011 -0500"
      },
      "message": "nd-\u003einode is not set on the second attempt in path_walk()\n\nWe leave it at whatever it had been pointing to after the\nfirst link_path_walk() had failed with -ESTALE.  Things\ndo not work well after that...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "3ec07aa9522e3d5e9d5ede7bef946756e623a0a0",
      "tree": "40978798d31499caa6764ea408add9f50db9bf13",
      "parents": [
        "32b007b4e19b50ff4d27ea8b69cd6d744cfec86b"
      ],
      "author": {
        "name": "roel",
        "email": "roel.kluin@gmail.com",
        "time": "Tue Mar 08 22:32:26 2011 +0100"
      },
      "committer": {
        "name": "J. Bruce Fields",
        "email": "bfields@redhat.com",
        "time": "Tue Mar 08 19:46:10 2011 -0500"
      },
      "message": "nfsd: wrong index used in inner loop\n\nIndex i was already used in the outer loop\n\nCc: stable@kernel.org\nSigned-off-by: Roel Kluin \u003croel.kluin@gmail.com\u003e\nSigned-off-by: J. Bruce Fields \u003cbfields@redhat.com\u003e\n"
    },
    {
      "commit": "ea8efc74bd0402b4d5f663d007b4e25fa29ea778",
      "tree": "ad3f19c4281877767f6dce99f0e003284a159e71",
      "parents": [
        "31339acd07b4ba687906702085127895a56eb920"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 08 11:54:40 2011 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Mar 08 11:58:09 2011 -0500"
      },
      "message": "Btrfs: make sure not to return overlapping extents to fiemap\n\nThe btrfs fiemap code was incorrectly returning duplicate or overlapping\nextents in some cases.  cp was blindly trusting this result and we would\nend up with a destination file that was bigger than the original because\nsome bytes were copied twice.\n\nThe fix here adjusts our offsets to make sure we\u0027re always moving\nforward in the fiemap results.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "dfef6dcd35cb4a251f6322ca9b2c06f0bb1aa1f4",
      "tree": "65e8a25d4ed913658db35c4b97ab0a021c2124eb",
      "parents": [
        "1858efd471624ecb37e6b5462cab8076f47d1cee"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 08 01:25:28 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 08 02:22:27 2011 -0500"
      },
      "message": "unfuck proc_sysctl -\u003ed_compare()\n\na) struct inode is not going to be freed under -\u003ed_compare();\nhowever, the thing PROC_I(inode)-\u003esysctl points to just might.\nFortunately, it\u0027s enough to make freeing that sucker delayed,\nprovided that we don\u0027t step on its -\u003eunregistering, clear\nthe pointer to it in PROC_I(inode) before dropping the reference\nand check if it\u0027s NULL in -\u003ed_compare().\n\nb) I\u0027m not sure that we *can* walk into NULL inode here (we recheck\ndentry-\u003eseq between verifying that it\u0027s still hashed / fetching\ndentry-\u003ed_inode and passing it to -\u003ed_compare() and there\u0027s no\nnegative hashed dentries in /proc/sys/*), but if we can walk into\nthat, we really should not have -\u003ed_compare() return 0 on it!\nSaid that, I really suspect that this check can be simply killed.\nNick?\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "32b007b4e19b50ff4d27ea8b69cd6d744cfec86b",
      "tree": "ada73d6c52a6e9b37cbdc95d086485fdf338561a",
      "parents": [
        "2c9c8f36c34e1defcaa7e4c298651998b47f5282"
      ],
      "author": {
        "name": "J. Bruce Fields",
        "email": "bfields@redhat.com",
        "time": "Sun Mar 06 19:11:03 2011 -0500"
      },
      "committer": {
        "name": "J. Bruce Fields",
        "email": "bfields@redhat.com",
        "time": "Mon Mar 07 11:44:53 2011 -0500"
      },
      "message": "nfsd4: fix bad pointer on failure to find delegation\n\nIn case of a nonempty list, the return on error here is obviously bogus;\nit ends up being a pointer to the list head instead of to any valid\ndelegation on the list.\n\nIn particular, if nfsd4_delegreturn() hits this case, and you\u0027re quite unlucky,\nthen renew_client may oops, and it may take an embarassingly long time to\nfigure out why.  Facepalm.\n\nBUG: unable to handle kernel NULL pointer dereference at 0000000000000090\nIP: [\u003cffffffff81292965\u003e] nfsd4_delegreturn+0x125/0x200\n...\n\nCc: stable@kernel.org\nSigned-off-by: J. Bruce Fields \u003cbfields@redhat.com\u003e\n"
    },
    {
      "commit": "31339acd07b4ba687906702085127895a56eb920",
      "tree": "c1f2d464acfc97e8c5faecf57e644578cccce94d",
      "parents": [
        "b1bf862e9dad431175a1174379476299dbfdc017"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 07 11:10:24 2011 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 07 11:10:24 2011 -0500"
      },
      "message": "Btrfs: deal with short returns from copy_from_user\n\nWhen copy_from_user is only able to copy some of the bytes we requested,\nwe may end up creating a partially up to date page.  To avoid garbage in\nthe page, we need to treat a partial copy as a zero length copy.\n\nThis makes the rest of the file_write code drop the page and\nretry the whole copy instead of marking the partially up to\ndate page as dirty.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\ncc: stable@kernel.org\n"
    },
    {
      "commit": "b1bf862e9dad431175a1174379476299dbfdc017",
      "tree": "a53811b2112fbe2a0106e3ac051fffc63872d317",
      "parents": [
        "ec29ed5b407d618a8128f5942aade9e1758aa14b"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Feb 28 09:52:08 2011 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Mar 07 10:42:27 2011 -0500"
      },
      "message": "Btrfs: fix regressions in copy_from_user handling\n\nCommit 914ee295af418e936ec20a08c1663eaabe4cd07a fixed deadlocks in\nbtrfs_file_write where we would catch page faults on pages we had\nlocked.\n\nBut, there were a few problems:\n\n1) The x86-32 iov_iter_copy_from_user_atomic code always fails to copy\ndata when the amount to copy is more than 4K and the offset to start\ncopying from is not page aligned.  The result was btrfs_file_write\nlooping forever retrying the iov_iter_copy_from_user_atomic\n\nWe deal with this by changing btrfs_file_write to drop down to single\npage copies when iov_iter_copy_from_user_atomic starts returning failure.\n\n2) The btrfs_file_write code was leaking delalloc reservations when\niov_iter_copy_from_user_atomic returned zero.  The looping above would\nresult in the entire filesystem running out of delalloc reservations and\nconstantly trying to flush things to disk.\n\n3) btrfs_file_write will lock down page cache pages, make sure\nany writeback is finished, do the copy_from_user and then release them.\nBefore the loop runs we check the first and last pages in the write to\nsee if they are only being partially modified.  If the start or end of\nthe write isn\u0027t aligned, we make sure the corresponding pages are\nup to date so that we don\u0027t introduce garbage into the file.\n\nWith the copy_from_user changes, we\u0027re allowing the VM to reclaim the\npages after a partial update from copy_from_user, but we\u0027re not\nmaking sure the page cache page is up to date when we loop around to\nresume the write.\n\nWe deal with this by pushing the up to date checks down into the page\nprep code.  This fits better with how the rest of file_write works.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\nReported-by: Mitch Harder \u003cmitch.harder@sabayonlinux.org\u003e\ncc: stable@kernel.org\n"
    },
    {
      "commit": "fb62c00a6d8942775abc23d1621db1252e2d93d1",
      "tree": "ef8760123f5a2b692126ecb7a70f2689053885c1",
      "parents": [
        "5c4b4be3b6b937256103a5ae49177e0c3a17cb8f",
        "455cec0abff563574cca432ced49f734117ca113"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 05 10:43:22 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 05 10:43:22 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:\n  ceph: no .snap inside of snapped namespace\n  libceph: fix msgr standby handling\n  libceph: fix msgr keepalive flag\n  libceph: fix msgr backoff\n  libceph: retry after authorization failure\n  libceph: fix handling of short returns from get_user_pages\n  ceph: do not clear I_COMPLETE from d_release\n  ceph: do not set I_COMPLETE\n  Revert \"ceph: keep reference to parent inode on ceph_dentry\"\n"
    },
    {
      "commit": "e9e3d724e2145f5039b423c290ce2b2c3d8f94bc",
      "tree": "9b0ff4de361fe358a5a2400b35a48206688b5f71",
      "parents": [
        "3256f80fbbc25bd2504bd564844c615227621e56"
      ],
      "author": {
        "name": "Neil Horman",
        "email": "nhorman@tuxdriver.com",
        "time": "Fri Mar 04 19:26:03 2011 -0500"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 04 17:28:52 2011 -0800"
      },
      "message": "nfs4: Ensure that ACL pages sent over NFS were not allocated from the slab (v3)\n\nThe \"bad_page()\" page allocator sanity check was reported recently (call\nchain as follows):\n\n  bad_page+0x69/0x91\n  free_hot_cold_page+0x81/0x144\n  skb_release_data+0x5f/0x98\n  __kfree_skb+0x11/0x1a\n  tcp_ack+0x6a3/0x1868\n  tcp_rcv_established+0x7a6/0x8b9\n  tcp_v4_do_rcv+0x2a/0x2fa\n  tcp_v4_rcv+0x9a2/0x9f6\n  do_timer+0x2df/0x52c\n  ip_local_deliver+0x19d/0x263\n  ip_rcv+0x539/0x57c\n  netif_receive_skb+0x470/0x49f\n  :virtio_net:virtnet_poll+0x46b/0x5c5\n  net_rx_action+0xac/0x1b3\n  __do_softirq+0x89/0x133\n  call_softirq+0x1c/0x28\n  do_softirq+0x2c/0x7d\n  do_IRQ+0xec/0xf5\n  default_idle+0x0/0x50\n  ret_from_intr+0x0/0xa\n  default_idle+0x29/0x50\n  cpu_idle+0x95/0xb8\n  start_kernel+0x220/0x225\n  _sinittext+0x22f/0x236\n\nIt occurs because an skb with a fraglist was freed from the tcp\nretransmit queue when it was acked, but a page on that fraglist had\nPG_Slab set (indicating it was allocated from the Slab allocator (which\nmeans the free path above can\u0027t safely free it via put_page.\n\nWe tracked this back to an nfsv4 setacl operation, in which the nfs code\nattempted to fill convert the passed in buffer to an array of pages in\n__nfs4_proc_set_acl, which gets used by the skb-\u003efrags list in\nxs_sendpages.  __nfs4_proc_set_acl just converts each page in the buffer\nto a page struct via virt_to_page, but the vfs allocates the buffer via\nkmalloc, meaning the PG_slab bit is set.  We can\u0027t create a buffer with\nkmalloc and free it later in the tcp ack path with put_page, so we need\nto either:\n\n1) ensure that when we create the list of pages, no page struct has\n   PG_Slab set\n\n or\n\n2) not use a page list to send this data\n\nGiven that these buffers can be multiple pages and arbitrarily sized, I\nthink (1) is the right way to go.  I\u0027ve written the below patch to\nallocate a page from the buddy allocator directly and copy the data over\nto it.  This ensures that we have a put_page free-able page for every\nentry that winds up on an skb frag list, so it can be safely freed when\nthe frame is acked.  We do a put page on each entry after the\nrpc_call_sync call so as to drop our own reference count to the page,\nleaving only the ref count taken by tcp_sendpages.  This way the data\nwill be properly freed when the ack comes in\n\nSuccessfully tested by myself to solve the above oops.\n\nNote, as this is the result of a setacl operation that exceeded a page\nof data, I think this amounts to a local DOS triggerable by an\nuprivlidged user, so I\u0027m CCing security on this as well.\n\nSigned-off-by: Neil Horman \u003cnhorman@tuxdriver.com\u003e\nCC: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCC: security@kernel.org\nCC: Jeff Layton \u003cjlayton@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "455cec0abff563574cca432ced49f734117ca113",
      "tree": "594e8dd5ac6c48a97836e5ca1e6ce451e157f2a2",
      "parents": [
        "e00de341fdb76c955703b4438100f9933c452b7f"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Mar 03 13:44:35 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Mar 04 12:25:09 2011 -0800"
      },
      "message": "ceph: no .snap inside of snapped namespace\n\nOtherwise you can do things like\n\n# mkdir .snap/foo\n# cd .snap/foo/.snap\n# ls\n\u003cbadness\u003e\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "1858efd471624ecb37e6b5462cab8076f47d1cee",
      "tree": "29d1e5d2aad63b798e880011fc527bb4bab63e40",
      "parents": [
        "b65a0e0c84cf489bfa00d6aa6c48abc5a237100f"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 04 13:14:21 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 04 13:14:21 2011 -0500"
      },
      "message": "minimal fix for do_filp_open() race\n\nfailure exits on the no-O_CREAT side of do_filp_open() merge with\nthose of O_CREAT one; unfortunately, if do_path_lookup() returns\n-ESTALE, we\u0027ll get out_filp:, notice that we are about to return\n-ESTALE without having trying to create the sucker with LOOKUP_REVAL\nand jump right into the O_CREAT side of code.  And proceed to try\nand create a file.  Usually that\u0027ll fail with -ESTALE again, but\nwe can race and get that attempt of pathname resolution to succeed.\n\nopen() without O_CREAT really shouldn\u0027t end up creating files, races\nor not.  The real fix is to rearchitect the whole do_filp_open(),\nbut for now splitting the failure exits will do.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    }
  ],
  "next": "8336026942fdf6a96a45057a2fe6d7f7946979d5"
}
