)]}'
{
  "log": [
    {
      "commit": "1a52bb0b686844021597d190e562ab55d1210104",
      "tree": "7edf13509869a6a7f1f488a679f15ff6c3057c54",
      "parents": [
        "8638094e956a47dbb9a25166705a91e9a0981d52",
        "83eb26af0db71f2dfe551405c55d982288fa6178"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 13 10:29:21 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 13 10:29:21 2012 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:\n  ceph: ensure prealloc_blob is in place when removing xattr\n  rbd: initialize snap_rwsem in rbd_add()\n  ceph: enable/disable dentry complete flags via mount option\n  vfs: export symbol d_find_any_alias()\n  ceph: always initialize the dentry in open_root_dentry()\n  libceph: remove useless return value for osd_client __send_request()\n  ceph: avoid iput() while holding spinlock in ceph_dir_fsync\n  ceph: avoid useless dget/dput in encode_fh\n  ceph: dereference pointer after checking for NULL\n  crush: fix force for non-root TAKE\n  ceph: remove unnecessary d_fsdata conditional checks\n  ceph: Use kmemdup rather than duplicating its implementation\n\nFix up conflicts in fs/ceph/super.c (d_alloc_root() failure handling vs\nalways initialize the dentry in open_root_dentry)\n"
    },
    {
      "commit": "46f72b349290d2bd7aecea38f02609d814332df6",
      "tree": "4d9adf3578e3cc526c6756b1e5165a65ba285648",
      "parents": [
        "d46cfba5363a163851dc768f717f34185527a472"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 10 09:04:37 2012 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Jan 12 11:00:28 2012 -0800"
      },
      "message": "vfs: export symbol d_find_any_alias()\n\nCeph needs this.\n\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "eaf5f9073533cde21c7121c136f1c3f072d9cf59",
      "tree": "db9cb9424fbae04decf7a8281a5180f65e5124b9",
      "parents": [
        "f4947fbce208990266920d51837e4e7ba9779db1"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "miklos@szeredi.hu",
        "time": "Tue Jan 10 18:22:25 2012 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 10 13:06:32 2012 -0500"
      },
      "message": "fix shrink_dcache_parent() livelock\n\nTwo (or more) concurrent calls of shrink_dcache_parent() on the same dentry may\ncause shrink_dcache_parent() to loop forever.\n\nHere\u0027s what appears to happen:\n\n1 - CPU0: select_parent(P) finds C and puts it on dispose list, returns 1\n\n2 - CPU1: select_parent(P) locks P-\u003ed_lock\n\n3 - CPU0: shrink_dentry_list() locks C-\u003ed_lock\n   dentry_kill(C) tries to lock P-\u003ed_lock but fails, unlocks C-\u003ed_lock\n\n4 - CPU1: select_parent(P) locks C-\u003ed_lock,\n         moves C from dispose list being processed on CPU0 to the new\ndispose list, returns 1\n\n5 - CPU0: shrink_dentry_list() finds dispose list empty, returns\n\n6 - Goto 2 with CPU0 and CPU1 switched\n\nBasically select_parent() steals the dentry from shrink_dentry_list() and thinks\nit found a new one, causing shrink_dentry_list() to think it\u0027s making progress\nand loop over and over.\n\nOne way to trigger this is to make udev calls stat() on the sysfs file while it\nis going away.\n\nHaving a file in /lib/udev/rules.d/ with only this one rule seems to the trick:\n\nATTR{vendor}\u003d\u003d\"0x8086\", ATTR{device}\u003d\u003d\"0x10ca\", ENV{PCI_SLOT_NAME}\u003d\"%k\", ENV{MATCHADDR}\u003d\"$attr{address}\", RUN+\u003d\"/bin/true\"\n\nThen execute the following loop:\n\nwhile true; do\n        echo -bond0 \u003e /sys/class/net/bonding_masters\n        echo +bond0 \u003e /sys/class/net/bonding_masters\n        echo -bond1 \u003e /sys/class/net/bonding_masters\n        echo +bond1 \u003e /sys/class/net/bonding_masters\ndone\n\nOne fix would be to check all callers and prevent concurrent calls to\nshrink_dcache_parent().  But I think a better solution is to stop the\nstealing behavior.\n\nThis patch adds a new dentry flag that is set when the dentry is added to the\ndispose list.  The flag is cleared in dentry_lru_del() in case the dentry gets a\nnew reference just before being pruned.\n\nIf the dentry has this flag, select_parent() will skip it and let\nshrink_dentry_list() retry pruning it.  With select_parent() skipping those\ndentries there will not be the appearance of progress (new dentries found) when\nthere is none, hence shrink_dcache_parent() will not loop forever.\n\nSet the flag is also set in prune_dcache_sb() for consistency as suggested by\nLinus.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCC: stable@vger.kernel.org\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "adc0e91ab142abe93f5b0d7980ada8a7676231fe",
      "tree": "27ee89f960b7e2d6cd5179d914bc252324122c26",
      "parents": [
        "b48f03b319ba78f3abf9a7044d1f436d8d90f4f9"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jan 08 16:49:21 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 09 19:23:45 2012 -0500"
      },
      "message": "vfs: new helper - d_make_root()\n\nd_alloc_root() with iput() in case of allocation failure...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b48f03b319ba78f3abf9a7044d1f436d8d90f4f9",
      "tree": "7ddc8f545787d28825413946519ed88ea19edb24",
      "parents": [
        "3c5184ef1216dd476c9c67f22a199d90ac4d5892"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Aug 23 18:56:24 2011 +1000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 09 19:22:52 2012 -0500"
      },
      "message": "dcache: use a dispose list in select_parent\n\nselect_parent currently abuses the dentry cache LRU to provide\ncleanup features for child dentries that need to be freed. It moves\nthem to the tail of the LRU, then tells shrink_dcache_parent() to\ncalls __shrink_dcache_sb to unconditionally move them to a dispose\nlist (as DCACHE_REFERENCED is ignored). __shrink_dcache_sb() has to\nrelock the dentries to move them off the LRU onto the dispose list,\nbut otherwise does not touch the dentries that select_parent() moved\nto the tail of the LRU. It then passses the dispose list to\nshrink_dentry_list() which tries to free the dentries.\n\nIOWs, the use of __shrink_dcache_sb() is superfluous - we can build\nexactly the same list of dentries for disposal directly in\nselect_parent() and call shrink_dentry_list() instead of calling\n__shrink_dcache_sb() to do that. This means that we avoid long holds\non the lru lock walking the LRU moving dentries to the dispose list\nWe also avoid the need to relock each dentry just to move it off the\nLRU, reducing the numebr of times we lock each dentry to dispose of\nthem in shrink_dcache_parent() from 3 to 2 times.\n\nFurther, we remove one of the two callers of __shrink_dcache_sb().\nThis also means that __shrink_dcache_sb can be moved into back into\nprune_dcache_sb() and we no longer have to handle referenced\ndentries conditionally, simplifying the code.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "143c8c91cee7efdd732ec5f61b3471fc46192f20",
      "tree": "dd3e9a9b8b88f1876a258fe1bf274532aeb72a62",
      "parents": [
        "900148dcac6bc93ca688d64a7f9a9f8d706e0d1c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Nov 25 00:46:35 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:09 2012 -0500"
      },
      "message": "vfs: mnt_ns moved to struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a73324da7af4052e1d1ddec6a5980f552420e58b",
      "tree": "65c119bf3bb852c4298aeb24b906dc3a5be7520a",
      "parents": [
        "0714a533805a0f8ebfc6fdb6bda9f129b8c7c6d7"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 22:25:07 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:05 2012 -0500"
      },
      "message": "vfs: move mnt_mountpoint to struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "0714a533805a0f8ebfc6fdb6bda9f129b8c7c6d7",
      "tree": "7f34ceedc12c4a680ca3509562b09ec441a0954f",
      "parents": [
        "3376f34fff5be9954fd9a9c4fd68f4a0a36d480e"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 22:19:58 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:05 2012 -0500"
      },
      "message": "vfs: now it can be done - make mnt_parent point to struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "3376f34fff5be9954fd9a9c4fd68f4a0a36d480e",
      "tree": "22a5995e66efd92cc394186c56deb082e4521440",
      "parents": [
        "643822b41e5e0f133438883b0be574cdaf168a2a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 22:05:19 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:04 2012 -0500"
      },
      "message": "vfs: mnt_parent moved to struct mount\n\nthe second victim...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "676da58df740f325034b8641311413c2393588e1",
      "tree": "88d1e385d368d73c7b1284da2fc46516879a867d",
      "parents": [
        "1ab597386205f8dc757cf8750465502aeae65154"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 21:47:05 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:04 2012 -0500"
      },
      "message": "vfs: spread struct mount - mnt_has_parent\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "afac7cba7ed31968a95e181dc25e204e45009ea8",
      "tree": "282cf7da6bc3915093df622ebfcd39f44f6fd1cd",
      "parents": [
        "b2dba1af3c4157040303a76d25216b1713d333d0"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Nov 23 19:34:49 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:52:36 2012 -0500"
      },
      "message": "vfs: more mnt_parent cleanups\n\na) mount --move is checking that -\u003emnt_parent is non-NULL before\nlooking if that parent happens to be shared; -\u003emnt_parent is never\nNULL and it\u0027s not even an misspelled !mnt_has_parent()\n\nb) pivot_root open-codes is_path_reachable(), poorly.\n\nc) so does path_is_under(), while we are at it.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b2dba1af3c4157040303a76d25216b1713d333d0",
      "tree": "c846b1c8074d29b9fc02ef3eeda98631dfd6ee94",
      "parents": [
        "aa9c0e07bb90589186f3b5a0ca97660c2cb50806"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Nov 23 19:26:23 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:52:36 2012 -0500"
      },
      "message": "vfs: new internal helper: mnt_has_parent(mnt)\n\nvfsmounts have -\u003emnt_parent pointing either to a different vfsmount\nor to itself; it\u0027s never NULL and termination condition in loops\ntraversing the tree towards root is mnt \u003d\u003d mnt-\u003emnt_parent.  At least\none place (see the next patch) is confused about what\u0027s going on;\nlet\u0027s add an explicit helper checking it right way and use it in\nall places where we need it.  Not that there had been too many,\nbut...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "02125a826459a6ad142f8d91c5b6357562f96615",
      "tree": "8c9d9860aef93917d9b8cc6d471fe68b58ce7a9d",
      "parents": [
        "5611cc4572e889b62a7b4c72a413536bf6a9c416"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Dec 05 08:43:34 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Dec 06 23:57:18 2011 -0500"
      },
      "message": "fix apparmor dereferencing potentially freed dentry, sanitize __d_path() API\n\n__d_path() API is asking for trouble and in case of apparmor d_namespace_path()\ngetting just that.  The root cause is that when __d_path() misses the root\nit had been told to look for, it stores the location of the most remote ancestor\nin *root.  Without grabbing references.  Sure, at the moment of call it had\nbeen pinned down by what we have in *path.  And if we raced with umount -l, we\ncould have very well stopped at vfsmount/dentry that got freed as soon as\nprepend_path() dropped vfsmount_lock.\n\nIt is safe to compare these pointers with pre-existing (and known to be still\nalive) vfsmount and dentry, as long as all we are asking is \"is it the same\naddress?\".  Dereferencing is not safe and apparmor ended up stepping into\nthat.  d_namespace_path() really wants to examine the place where we stopped,\neven if it\u0027s not connected to our namespace.  As the result, it looked\nat -\u003ed_sb-\u003es_magic of a dentry that might\u0027ve been already freed by that point.\nAll other callers had been careful enough to avoid that, but it\u0027s really\na bad interface - it invites that kind of trouble.\n\nThe fix is fairly straightforward, even though it\u0027s bigger than I\u0027d like:\n\t* prepend_path() root argument becomes const.\n\t* __d_path() is never called with NULL/NULL root.  It was a kludge\nto start with.  Instead, we have an explicit function - d_absolute_root().\nSame as __d_path(), except that it doesn\u0027t get root passed and stops where\nit stops.  apparmor and tomoyo are using it.\n\t* __d_path() returns NULL on path outside of root.  The main\ncaller is show_mountinfo() and that\u0027s precisely what we pass root for - to\nskip those outside chroot jail.  Those who don\u0027t want that can (and do)\nuse d_path().\n\t* __d_path() root argument becomes const.  Everyone agrees, I hope.\n\t* apparmor does *NOT* try to use __d_path() or any of its variants\nwhen it sees that path-\u003emnt is an internal vfsmount.  In that case it\u0027s\ndefinitely not mounted anywhere and dentry_path() is exactly what we want\nthere.  Handling of sysctl()-triggered weirdness is moved to that place.\n\t* if apparmor is asked to do pathname relative to chroot jail\nand __d_path() tells it we it\u0027s not in that jail, the sucker just calls\nd_absolute_path() instead.  That\u0027s the other remaining caller of __d_path(),\nBTW.\n        * seq_path_root() does _NOT_ return -ENAMETOOLONG (it\u0027s stupid anyway -\nthe normal seq_file logics will take care of growing the buffer and redoing\nthe call of -\u003eshow() just fine).  However, if it gets path not reachable\nfrom root, it returns SEQ_SKIP.  The only caller adjusted (i.e. stopped\nignoring the return value as it used to do).\n\nReviewed-by: John Johansen \u003cjohn.johansen@canonical.com\u003e\nACKed-by: John Johansen \u003cjohn.johansen@canonical.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "dd179946db2493646955efc112d73c85b3cafcb1",
      "tree": "59203e419cf14e4a28e3ede7cb32a00d34bd0f8e",
      "parents": [
        "f1fd306a91f875e65af0e04855b23adda6831ac9"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Aug 16 15:31:30 2011 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Nov 20 23:04:27 2011 -0500"
      },
      "message": "VFS: Log the fact that we\u0027ve given ELOOP rather than creating a loop\n\nTo prevent an NFS server from being used to create a directory loop in an NFS\nsuperblock on the client, the following patch was committed:\n\n\tcommit 1836750115f20b774e55c032a3893e8c5bdf41ed\n\tAuthor: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n\tDate:   Tue Jul 12 21:42:24 2011 -0400\n\tSubject: fix loop checks in d_materialise_unique()\n\nThis causes ELOOP to be reported to anyone trying to access the dentry that\nwould otherwise cause the kernel to complete the loop.\n\nHowever, no indication is given to the caller as to why an operation that ought\nto work doesn\u0027t.  The fault is with the kernel, which doesn\u0027t want to try and\nsolve the problem as it gets horrendously messy if there\u0027s another mountpoint\nsomewhere in the trees being spliced that can\u0027t be moved[*].\n\n[*] The real problem is that we don\u0027t handle the excision of a subtree that\ngets moved _out_ of what we can see.  This can happen on the server where a\ndirectory is merely moved between two other dirs on the same filesystem, but\nwhere destination dir is not accessible by the client.\n\nSo, given the choice to return ELOOP rather than trying to reconfigure the\ndentry tree, we should give the caller some indication of why they aren\u0027t being\nallowed to make what should be a legitimate request and log a message.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Sachin Prabhu \u003csprabhu@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "50e696308c3fb18a4a0dae7b3a4d47469149c919",
      "tree": "16ff458026c1551803b86d9e0f9f02c7a64182fa",
      "parents": [
        "a84450604d0fe08b6a2335efbedede18d3d7cc75"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@ZenIV.linux.org.uk",
        "time": "Mon Nov 07 16:39:57 2011 +0000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Nov 07 10:54:10 2011 -0800"
      },
      "message": "vfs: d_invalidate() should leave mountpoints alone\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f0023bc617ba600956b9226f1806033d7486c8ba",
      "tree": "7a5ad7481b160e1d40cdc95626bfdb5e8577c88e",
      "parents": [
        "a78ef704a8dd430225955f0709b22d4a6ba21deb"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Oct 28 10:02:42 2011 -0700"
      },
      "committer": {
        "name": "Christoph Hellwig",
        "email": "hch@serles.lst.de",
        "time": "Wed Nov 02 12:53:43 2011 +0100"
      },
      "message": "vfs: add d_prune dentry operation\n\nThis adds a d_prune dentry operation that is called by the VFS prior to\npruning (i.e. unhashing and killing) a hashed dentry from the dcache.\nWrap dentry_lru_del() and use the new _prune() helper in the cases where we\nare about to unhash and kill the dentry.\n\nThis will be used by Ceph to maintain a flag indicating whether the\ncomplete contents of a directory are contained in the dcache, allowing it\nto satisfy lookups and readdir without addition server communication.\n\nRenumber a few DCACHE_* #defines to group DCACHE_OP_PRUNE with the other\nDCACHE_OP_ bits.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "830c0f0edca67403d361fe976a25b17356c11f19",
      "tree": "b4bfc71ab9aaff0e8b65403c319dde519dd6f9ef",
      "parents": [
        "7cd4767e696123cdb7447fbd7c281eb8c610c8e4"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 06 22:41:50 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 06 22:52:40 2011 -0700"
      },
      "message": "vfs: renumber DCACHE_xyz flags, remove some stale ones\n\nGcc tends to generate better code with small integers, including the\nDCACHE_xyz flag tests - so move the common ones to be first in the list.\nAlso just remove the unused DCACHE_INOTIFY_PARENT_WATCHED and\nDCACHE_AUTOFS_PENDING values, their users no longer exists in the source\ntree.\n\nAnd add a \"unlikely()\" to the DCACHE_OP_COMPARE test, since we want the\ncommon case to be a nice straight-line fall-through.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2af14162656b81bea9e03e76d7c5f1787cc86ea6",
      "tree": "12906ff5b3f372606f2822ba8aef2989c76d284c",
      "parents": [
        "88eca0207cf1574328c3ce8c3be537a9317261bb"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "rdunlap@xenotime.net",
        "time": "Wed Aug 03 16:21:07 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:21 2011 -1000"
      },
      "message": "fs/dcache.c: fix new kernel-doc warning\n\nFix new kernel-doc warning in fs/dcache.c:\n\n  Warning(fs/dcache.c:797): No description found for parameter \u0027sb\u0027\n\nSigned-off-by: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "43c1c9cd244098012441b90c32304f11f1258d43",
      "tree": "f6d924936b376cfa3bb7bc1eec5716900a61a2cf",
      "parents": [
        "c6627c60c07c43b51ef88e352627fa786d1e1592"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Jun 07 14:09:30 2011 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 01 02:27:57 2011 -0400"
      },
      "message": "VFS: Reorganise shrink_dcache_for_umount_subtree() after demise of dcache_lock\n\nReorganise shrink_dcache_for_umount_subtree() in light of the demise of\ndcache_lock.  Without that dcache_lock, there is no need for the batching of\nremoval of dentries from the system under it (we wanted to make intensive use\nof the locked data whilst we held it, but didn\u0027t want to hold it for long at a\ntime).\n\nThis works, provided the preceding patch is correct in its removal of locking\non dentry-\u003ed_lock on the basis that no one should be locking these dentries any\nmore as the whole superblock is defunct.\n\nWith this patch, the calls to dentry_lru_del() and __d_shrink() are placed at\nthe point where each dentry is detached handled.\n\nIt is possible that, as an alternative, the batching should still be done -\nbut only for dentry_lru_del() of all a dentry\u0027s children in one go.  In such a\ncase, the batching would be done under dcache_lru_lock.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c6627c60c07c43b51ef88e352627fa786d1e1592",
      "tree": "2d0924acf0c6fa37d0fc7277a9f17940496b6461",
      "parents": [
        "35f40ef00204c456f5c181c0e7f54e25bb93cd49"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Jun 07 14:09:20 2011 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 01 02:27:57 2011 -0400"
      },
      "message": "VFS: Remove dentry-\u003ed_lock locking from shrink_dcache_for_umount_subtree()\n\nLocks of the dcache_lock were replaced by locks of dentry-\u003ed_lock in commits\nsuch as:\n\n\t2304450783dfde7b0b94ae234edd0dbffa865073\n\t2fd6b7f50797f2e993eea59e0a0b8c6399c811dc\n\nas part of the RCU-based pathwalk changes, despite the fact that the caller\n(shrink_dcache_for_umount()) notes in the banner comment the reasons that\nd_lock is not necessary in these functions:\n\n/*\n * destroy the dentries attached to a superblock on unmounting\n * - we don\u0027t need to use dentry-\u003ed_lock because:\n *   - the superblock is detached from all mountings and open files, so the\n *     dentry trees will not be rearranged by the VFS\n *   - s_umount is write-locked, so the memory pressure shrinker will ignore\n *     any dentries belonging to this superblock that it comes across\n *   - the filesystem itself is no longer permitted to rearrange the dentries\n *     in this superblock\n */\n\nSo remove these locks.  If the locks are actually necessary, then this banner\ncomment should be altered instead.\n\nThe hash table chains are protected by 1-bit locks in the hash table heads, so\nthose shouldn\u0027t be a problem.\n\nNote that to make this work, __d_drop() has to be split so that the RCUwalk\nbarrier can be avoided.  This causes problems otherwise as it has an assertion\nthat dentry-\u003ed_lock is locked - but there is no need for that as no one else\ncan be trying to access this dentry, except to step over it (and that should\nbe handled by d_free(), I think).\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nCc: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "35f40ef00204c456f5c181c0e7f54e25bb93cd49",
      "tree": "dca61042039ba374b79491ce5b3227759c214f49",
      "parents": [
        "86bc704db0ab7e69230f79bc7d124e063259abc6"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Jun 07 14:09:10 2011 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 01 02:27:57 2011 -0400"
      },
      "message": "VFS: Remove detached-dentry counter from shrink_dcache_for_umount_subtree()\n\nRemove the detached-dentry counter from shrink_dcache_for_umount_subtree() as\nthe value it computes is no longer used as of commit\n312d3ca856d369bb04d0443846b85b4cdde6fa8a which made the nr_dentry counters\nsummed per-CPU rather than global atomic.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c46c887744b330795eba55fdb96343c36d481765",
      "tree": "3e4608981b87d8b5d2b23827988312d7c35778b2",
      "parents": [
        "41c96486f238e6a545f52215f95fe69748abf603"
      ],
      "author": {
        "name": "Jeff Layton",
        "email": "jlayton@redhat.com",
        "time": "Tue Jul 26 13:33:16 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jul 26 13:41:14 2011 -0400"
      },
      "message": "vfs: document locking requirements for d_move, __d_move and d_materialise_unique\n\nAdding a comment to d_materialise_unique per Al\u0027s request...\n\nd_move and __d_move have some pretty substantial locking requirements,\nbut they are not clearly documented. Add some comments spelling them\nout. Also, document the requirement for the i_mutex of the parent in\nd_materialise_unique.\n\nCc: Al Viro \u003cviro@ZenIV.linux.org.uk\u003e\nSigned-off-by: Jeff Layton \u003cjlayton@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "bbd9d6f7fbb0305c9a592bf05a32e87eb364a4ff",
      "tree": "12b2bb4202b05f6ae6a43c6ce830a0472043dbe5",
      "parents": [
        "8e204874db000928e37199c2db82b7eb8966cc3c",
        "5a9a43646cf709312d71eca71cef90ad802f28f9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 19:02:39 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 19:02:39 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (107 commits)\n  vfs: use ERR_CAST for err-ptr tossing in lookup_instantiate_filp\n  isofs: Remove global fs lock\n  jffs2: fix IN_DELETE_SELF on overwriting rename() killing a directory\n  fix IN_DELETE_SELF on overwriting rename() on ramfs et.al.\n  mm/truncate.c: fix build for CONFIG_BLOCK not enabled\n  fs:update the NOTE of the file_operations structure\n  Remove dead code in dget_parent()\n  AFS: Fix silly characters in a comment\n  switch d_add_ci() to d_splice_alias() in \"found negative\" case as well\n  simplify gfs2_lookup()\n  jfs_lookup(): don\u0027t bother with . or ..\n  get rid of useless dget_parent() in btrfs rename() and link()\n  get rid of useless dget_parent() in fs/btrfs/ioctl.c\n  fs: push i_mutex and filemap_write_and_wait down into -\u003efsync() handlers\n  drivers: fix up various -\u003ellseek() implementations\n  fs: handle SEEK_HOLE/SEEK_DATA properly in all fs\u0027s that define their own llseek\n  Ext4: handle SEEK_HOLE/SEEK_DATA generically\n  Btrfs: implement our own -\u003ellseek\n  fs: add SEEK_HOLE and SEEK_DATA flags\n  reiserfs: make reiserfs default to barrier\u003dflush\n  ...\n\nFix up trivial conflicts in fs/xfs/linux-2.6/xfs_super.c due to the new\nshrinker callout for the inode cache, that clashed with the xfs code to\nstart the periodic workers later.\n"
    },
    {
      "commit": "b91da88fed84843313a1b6fd1b1c834a24bbcf9e",
      "tree": "0c9456266a09f247a875fd3b55073ad42dc7445d",
      "parents": [
        "b307d4655a71749ac3f91c6dbe33d28cc026ceeb"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 21 11:01:42 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 21 11:01:42 2011 -0700"
      },
      "message": "vfs: drop conditional inode prefetch in __do_lookup_rcu\n\nIt seems to hurt performance in real life.  Yes, the inode will be used\nlater, but the conditional doesn\u0027t seem to predict all that well\n(negative dentries are not uncommon) and it looks like the cost of\nprefetching is simply higher than depending on the cache doing the right\nthing.\n\nAs usual.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "86c98e8cdb21ff4628f4d48559ab6e006380fa4b",
      "tree": "fb4038d37fc073c7b858c0a15f20cc7c627ac9a7",
      "parents": [
        "e4b9f0058145a3bed4199eacee62a9969c163401"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jul 18 23:39:07 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:48:04 2011 -0400"
      },
      "message": "Remove dead code in dget_parent()\n\n-\u003ed_parent is never NULL...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4513d899c418ff69052420e29e354e4c64b3ef76",
      "tree": "ffe11084d28c4a3d7b4eaa745748539c2eff2fb4",
      "parents": [
        "6c673ab393bc18e8bff729cd04cf384d15e72a04"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jul 17 10:52:14 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:48:02 2011 -0400"
      },
      "message": "switch d_add_ci() to d_splice_alias() in \"found negative\" case as well\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b0d40c92adafde7c2d81203ce7c1c69275f41140",
      "tree": "f75a19dcd1a37aff23dc43323b58f014b1297c6b",
      "parents": [
        "12ad3ab66103e6582ca69c0c9de18b13487eaaef"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Jul 08 14:14:42 2011 +1000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:47:10 2011 -0400"
      },
      "message": "superblock: introduce per-sb cache shrinker infrastructure\n\nWith context based shrinkers, we can implement a per-superblock\nshrinker that shrinks the caches attached to the superblock. We\ncurrently have global shrinkers for the inode and dentry caches that\nsplit up into per-superblock operations via a coarse proportioning\nmethod that does not batch very well.  The global shrinkers also\nhave a dependency - dentries pin inodes - so we have to be very\ncareful about how we register the global shrinkers so that the\nimplicit call order is always correct.\n\nWith a per-sb shrinker callout, we can encode this dependency\ndirectly into the per-sb shrinker, hence avoiding the need for\nstrictly ordering shrinker registrations. We also have no need for\nany proportioning code for the shrinker subsystem already provides\nthis functionality across all shrinkers. Allowing the shrinker to\noperate on a single superblock at a time means that we do less\nsuperblock list traversals and locking and reclaim should batch more\neffectively. This should result in less CPU overhead for reclaim and\npotentially faster reclaim of items from each filesystem.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a9049376ee05bf966bfe2b081b5071326856890a",
      "tree": "efb3cbfc7760537f201bb28dacbb0d39ec39f04c",
      "parents": [
        "0c1aa9a952c3608eb17bf990466f1491d1ee8b6c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jul 08 21:20:11 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:44:26 2011 -0400"
      },
      "message": "make d_splice_alias(ERR_PTR(err), dentry) \u003d ERR_PTR(err)\n\n... and simplify the living hell out of callers\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a4464dbc0ca6a3ab8e9d1206bc05059dae2a559d",
      "tree": "d3c9332ab72cf5a4eba483ba1ff83c54ca4c42a0",
      "parents": [
        "e3c3d9c838d48c0341c40ea45ee087e3d8c8ea39"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jul 07 15:03:58 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:44:17 2011 -0400"
      },
      "message": "Make -\u003ed_sb assign-once and always non-NULL\n\nNew helper (non-exported, fs/internal.h-only): __d_alloc(sb, name).\nAllocates dentry, sets its -\u003ed_sb to given superblock and sets\n-\u003ed_op accordingly.  Old d_alloc(NULL, name) callers are converted\nto that (all of them know what superblock they want).  d_alloc()\nitself is left only for parent !\u003d NULl case; uses __d_alloc(),\ninserts result into the list of parent\u0027s children.\n\nNote that now -\u003ed_sb is assign-once and never NULL *and*\n-\u003ed_parent is never NULL either.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "44396f4b5cb8566f7118aec55eeac99be7ad94cb",
      "tree": "dc2fd0d01c634ee9a5f5cfb8ca0d660f060ce188",
      "parents": [
        "e6625fa48e6580a74b7e700efd7e6463e282810b"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Tue May 31 11:58:49 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:03 2011 -0400"
      },
      "message": "fs: add a DCACHE_NEED_LOOKUP flag for d_flags\n\nBtrfs (and I\u0027d venture most other fs\u0027s) stores its indexes in nice disk order\nfor readdir, but unfortunately in the case of anything that stats the files in\norder that readdir spits back (like oh say ls) that means we still have to do\nthe normal lookup of the file, which means looking up our other index and then\nlooking up the inode.  What I want is a way to create dummy dentries when we\nfind them in readdir so that when ls or anything else subsequently does a\nstat(), we already have the location information in the dentry and can go\nstraight to the inode itself.  The lookup stuff just assumes that if it finds a\ndentry it is done, it doesn\u0027t perform a lookup.  So add a DCACHE_NEED_LOOKUP\nflag so that the lookup code knows it still needs to run i_op-\u003elookup() on the\nparent to get the inode for the dentry.  I have tested this with btrfs and I\nwent from something that looks like this\n\nhttp://people.redhat.com/jwhiter/ls-noreada.png\n\nTo this\n\nhttp://people.redhat.com/jwhiter/ls-good.png\n\nThats a savings of 1300 seconds, or 22 minutes.  That is a significant savings.\nThanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1836750115f20b774e55c032a3893e8c5bdf41ed",
      "tree": "3c0cb24361ccfb460b93b0fd6385650df80a26e6",
      "parents": [
        "94c0d4ecbe7f9fe56e052b26b2ab484e246c07b4"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jul 12 21:42:24 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jul 14 21:33:41 2011 -0400"
      },
      "message": "fix loop checks in d_materialise_unique()\n\nBoth __d_unalias() and __d_materialise_dentry() need loop prevention.\nGrab rename_lock in caller, check for loops there...\n\nAs a side benefit, we have dentry_lock_for_move() called only under\nrename_lock, which seriously reduces deadlock potential of the\nexecrable \"locking order\" used for -\u003ed_lock.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1495f230fa7750479c79e3656286b9183d662077",
      "tree": "e5e233bb9fe1916ccc7281e7dcc71b1572fb22c5",
      "parents": [
        "a09ed5e00084448453c8bada4dcd31e5fbfc2f21"
      ],
      "author": {
        "name": "Ying Han",
        "email": "yinghan@google.com",
        "time": "Tue May 24 17:12:27 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 25 08:39:26 2011 -0700"
      },
      "message": "vmscan: change shrinker API by passing shrink_control struct\n\nChange each shrinker\u0027s API by consolidating the existing parameters into\nshrink_control struct.  This will simplify any further features added w/o\ntouching each file of shrinker.\n\n[akpm@linux-foundation.org: fix build]\n[akpm@linux-foundation.org: fix warning]\n[kosaki.motohiro@jp.fujitsu.com: fix up new shrinker API]\n[akpm@linux-foundation.org: fix xfs warning]\n[akpm@linux-foundation.org: update gfs2]\nSigned-off-by: Ying Han \u003cyinghan@google.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "268bb0ce3e87872cb9290c322b0d35bce230d88f",
      "tree": "c8331ade4a3e24fc589c4eb62731bc2312d35333",
      "parents": [
        "257313b2a87795e07a0bdf58d0fffbdba8b31051"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 20 12:50:29 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 20 12:50:29 2011 -0700"
      },
      "message": "sanitize \u003clinux/prefetch.h\u003e usage\n\nCommit e66eed651fd1 (\"list: remove prefetching from regular list\niterators\") removed the include of prefetch.h from list.h, which\nuncovered several cases that had apparently relied on that rather\nobscure header file dependency.\n\nSo this fixes things up a bit, using\n\n   grep -L linux/prefetch.h $(git grep -l \u0027[^a-z_]prefetchw*(\u0027 -- \u0027*.[ch]\u0027)\n   grep -L \u0027prefetchw*(\u0027 $(git grep -l \u0027linux/prefetch.h\u0027 -- \u0027*.[ch]\u0027)\n\nto guide us in finding files that either need \u003clinux/prefetch.h\u003e\ninclusion, or have it despite not needing it.\n\nThere are more of them around (mostly network drivers), but this gets\nmany core ones.\n\nReported-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1879fd6a26571fd4e8e1f4bb3e7537bc936b1fe7",
      "tree": "5fb41fdaef01d462ff9c7ecfe688760a44e89b6a",
      "parents": [
        "3dd2ee4824b668a635d6d2bb6bc73f33708cab9f"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Apr 25 14:01:36 2011 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 25 18:14:10 2011 -0700"
      },
      "message": "add hlist_bl_lock/unlock helpers\n\nNow that the whole dcache_hash_bucket crap is gone, go all the way and\nalso remove the weird locking layering violations for locking the hash\nbuckets.  Add hlist_bl_lock/unlock helpers to move the locking into the\nlist abstraction instead of requiring each caller to open code it.\nAfter all allowing for the bit locks is the whole point of these helpers\nover the plain hlist variant.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dea3667bc3c2a0521e8d8855e407a49d9d70028c",
      "tree": "bda1a624616f2e1bf9d3ec38b30ab002379a8e6a",
      "parents": [
        "b07ad9967f40b164af77205027352ba53729cf5a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Apr 24 07:58:46 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Apr 24 07:58:46 2011 -0700"
      },
      "message": "vfs: get rid of insane dentry hashing rules\n\nThe dentry hashing rules have been really quite complicated for a long\nwhile, in odd ways.  That made functions like __d_drop() very fragile\nand non-obvious.\n\nIn particular, whether a dentry was hashed or not was indicated with an\nexplicit DCACHE_UNHASHED bit.  That\u0027s despite the fact that the hash\nabstraction that the dentries use actually have a \u0027is this entry hashed\nor not\u0027 model (which is a simple test of the \u0027pprev\u0027 pointer).\n\nThe reason that was done is because we used the normal \u0027is this entry\nunhashed\u0027 model to mark whether the dentry had _ever_ been hashed in the\ndentry hash tables, and that logic goes back many years (commit\nb3423415fbc2: \"dcache: avoid RCU for never-hashed dentries\").\n\nThat, in turn, meant that __d_drop had totally different unhashing logic\nfor the dentry hash table case and for the anonymous dcache case,\nbecause in order to use the \"is this dentry hashed\" logic as a flag for\nwhether it had ever been on the RCU hash table, we had to unhash such a\ndentry differently so that we\u0027d never think that it wasn\u0027t \u0027unhashed\u0027\nand wouldn\u0027t be free\u0027d correctly.\n\nThat\u0027s just insane.  It made the logic really hard to follow, when there\nwere two different kinds of \"unhashed\" states, and one of them (the one\nthat used \"list_bl_unhashed()\") really had nothing at all to do with\nbeing unhashed per se, but with a very subtle lifetime rule instead.\n\nSo turn all of it around, and make it logical.\n\nInstead of having a DENTRY_UNHASHED bit in d_flags to indicate whether\nthe dentry is on the hash chains or not, use the hash chain unhashed\nlogic for that.  Suddenly \"d_unhashed()\" just uses \"list_bl_unhashed()\",\nand everything makes sense.\n\nAnd for the lifetime rule, just use an explicit DENTRY_RCUACCEES bit.\nIf we ever insert the dentry into the dentry hash table so that it is\nvisible to RCU lookup, we mark it DENTRY_RCUACCESS to show that it now\nneeds the RCU lifetime rules.  Now suddently that test at dentry free\ntime makes sense too.\n\nAnd because unhashing now is sane and doesn\u0027t depend on where the dentry\ngot unhashed from (because the dentry hash chain details doesn\u0027t have\nsome subtle side effects), we can re-unify the __d_drop() logic and use\ncommon code for the unhashing.\n\nAlso fix one more open-coded hash chain bit_spin_lock() that I missed in\nthe previous chain locking cleanup commit.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b07ad9967f40b164af77205027352ba53729cf5a",
      "tree": "33ce9c53602f1983cff5dd5f209bb668fb7ffca5",
      "parents": [
        "0f1d9f78ce41a8874d30271ef8480e6f8f7f1fce"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Apr 23 22:32:03 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Apr 23 22:32:03 2011 -0700"
      },
      "message": "vfs: get rid of \u0027struct dcache_hash_bucket\u0027 abstraction\n\nIt\u0027s a useless abstraction for \u0027hlist_bl_head\u0027, and it doesn\u0027t actually\nhelp anything - quite the reverse.  All the users end up having to know\nabout the hlist_bl_head details anyway, using \u0027struct hlist_bl_node *\u0027\netc. So it just makes the code look confusing.\n\nAnd the cost of it is extra \u0027\u0026b-\u003ehead\u0027 syntactic noise, but more\nimportantly it spuriously makes the hash table dentry list look\ndifferent from the per-superblock DCACHE_DISCONNECTED dentry list.\n\nAs a result, the code ended up using ad-hoc locking for one case and\nspecial helper functions for what is really another totally identical\ncase in the very same function.\n\nMake it all look and work the same.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7ebfa57f6d307b66bb88600145afccde31016ab5",
      "tree": "f2f3574549fa2de097db2b8bb8fc4c35c744fa6a",
      "parents": [
        "e38f5b745075828ac51b12c8c95c85a7be4a3ec7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 15 07:34:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 15 07:34:26 2011 -0700"
      },
      "message": "vfs: fix incorrect dentry_update_name_case() BUG_ON() test\n\nThe case we should be verifying when updating the dentry name is that\nthe _parent_ inode (the directory) semaphore is held, not the semaphore\nfor the dentry itself.  It\u0027s the directory locking that rename and\nreaddir() etc all care about.\n\nThe comment just above even says so - but then the BUG_ON() still\nchecked the dentry inode itself.\n\nVery few people noticed, because this helper function really isn\u0027t used\nfor very much, so you had to be using ncpfs to ever hit it.\n\nI think I should just remove the BUG_ON (the function really has just\none user), but let\u0027s run with it fixed for a while before getting rid of\nit entirely.\n\nReported-and-tested-by: Bongani Hlope \u003cbonganih@bankservafrica.com\u003e\nReported-and-tested-by: Bernd Feige \u003cbernd.feige@uniklinik-freiburg.de\u003e\nCc: Petr Vandrovec \u003cpetr@vandrovec.name\u003e,\nCc: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f539abece1b7e36fae6add4f9ea29203d40badcb",
      "tree": "786c08f3131a1871ece13343c3fa3832930c1408",
      "parents": [
        "3f6f7e6d57b8a0ae2810ae7aac70c51b6f2a6304",
        "24ff6663ccfdaf088dfa7acae489cb11ed4f43c4"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 18 10:51:11 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 18 10:51:11 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6:\n  fs: call security_d_instantiate in d_obtain_alias V2\n  lose \u0027mounting_here\u0027 argument in -\u003ed_manage()\n  don\u0027t pass \u0027mounting_here\u0027 flag to follow_down()\n  change the locking order for namespace_sem\n  fix deadlock in pivot_root()\n  vfs: split off vfsmount-related parts of vfs_kern_mount()\n  Some fixes for pstore\n  kill simple_set_mnt()\n"
    },
    {
      "commit": "e16b396ce314b2bcdfe6c173fe075bf8e3432368",
      "tree": "640f0f56f2ea676647af4eb42d32fa56be2ee549",
      "parents": [
        "7fd23a24717a327a66f3c32d11a20a2f169c824f",
        "e6e8dd5055a974935af1398c8648d4a9359b0ecb"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 18 10:37:40 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 18 10:37:40 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (47 commits)\n  doc: CONFIG_UNEVICTABLE_LRU doesn\u0027t exist anymore\n  Update cpuset info \u0026 webiste for cgroups\n  dcdbas: force SMI to happen when expected\n  arch/arm/Kconfig: remove one to many l\u0027s in the word.\n  asm-generic/user.h: Fix spelling in comment\n  drm: fix printk typo \u0027sracth\u0027\n  Remove one to many n\u0027s in a word\n  Documentation/filesystems/romfs.txt: fixing link to genromfs\n  drivers:scsi Change printk typo initate -\u003e initiate\n  serial, pch uart: Remove duplicate inclusion of linux/pci.h header\n  fs/eventpoll.c: fix spelling\n  mm: Fix out-of-date comments which refers non-existent functions\n  drm: Fix printk typo \u0027failled\u0027\n  coh901318.c: Change initate to initiate.\n  mbox-db5500.c Change initate to initiate.\n  edac: correct i82975x error-info reported\n  edac: correct i82975x mci initialisation\n  edac: correct commented info\n  fs: update comments to point correct document\n  target: remove duplicate include of target/target_core_device.h from drivers/target/target_core_hba.c\n  ...\n\nTrivial conflict in fs/eventpoll.c (spelling vs addition)\n"
    },
    {
      "commit": "24ff6663ccfdaf088dfa7acae489cb11ed4f43c4",
      "tree": "beb9039caed8082054e17922d33181f2dedae8b8",
      "parents": [
        "1aed3e4204dd787d53b3cd6363eb63bb4900c38e"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Thu Nov 18 20:52:55 2010 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 18 10:02:09 2011 -0400"
      },
      "message": "fs: call security_d_instantiate in d_obtain_alias V2\n\nWhile trying to track down some NFS problems with BTRFS, I kept noticing I was\ngetting -EACCESS for no apparent reason.  Eric Paris and printk() helped me\nfigure out that it was SELinux that was giving me grief, with the following\ndenial\n\ntype\u003dAVC msg\u003daudit(1290013638.413:95): avc:  denied  { 0x800000 } for  pid\u003d1772\ncomm\u003d\"nfsd\" name\u003d\"\" dev\u003dsda1 ino\u003d256 scontext\u003dsystem_u:system_r:kernel_t:s0\ntcontext\u003dsystem_u:object_r:unlabeled_t:s0 tclass\u003dfile\n\nTurns out this is because in d_obtain_alias if we can\u0027t find an alias we create\none and do all the normal instantiation stuff, but we don\u0027t do the\nsecurity_d_instantiate.\n\nUsually we are protected from getting a hashed dentry that hasn\u0027t yet run\nsecurity_d_instantiate() by the parent\u0027s i_mutex, but obviously this isn\u0027t an\noption there, so in order to deal with the case that a second thread comes in\nand finds our new dentry before we get to run security_d_instantiate(), we go\nahead and call it if we find a dentry already.  Eric assures me that this is ok\nas the code checks to see if the dentry has been initialized already so calling\nsecurity_d_instantiate() against the same dentry multiple times is ok.  With\nthis patch I\u0027m no longer getting errant -EACCESS values.\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c83ce989cb5ff86575821992ea82c4df5c388ebc",
      "tree": "29741017daffb074fbe09c3aec6d937f2f0c140d",
      "parents": [
        "c826cb7dfce80512c26c984350077a25046bd215"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Mar 15 13:36:43 2011 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 15 15:46:11 2011 -0700"
      },
      "message": "VFS: Fix the nfs sillyrename regression in kernel 2.6.38\n\nThe new vfs locking scheme introduced in 2.6.38 breaks NFS sillyrename\nbecause the latter relies on being able to determine the parent\ndirectory of the dentry in the -\u003eiput() callback in order to send the\nappropriate unlink rpc call.\n\nLooking at the code that cares about races with dput(), there doesn\u0027t\nseem to be anything that specifically uses d_parent as a test for\nwhether or not there is a race:\n  - __d_lookup_rcu(), __d_lookup() all test for d_hashed() after d_parent\n  - shrink_dcache_for_umount() is safe since nothing else can rearrange\n    the dentries in that super block.\n  - have_submount(), select_parent() and d_genocide() can test for a\n    deletion if we set the DCACHE_DISCONNECTED flag when the dentry\n    is removed from the parent\u0027s d_subdirs list.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: stable@kernel.org (2.6.38, needs commit c826cb7dfce8 \"dcache.c:\n\tcreate helper function for duplicated functionality\" )\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c826cb7dfce80512c26c984350077a25046bd215",
      "tree": "6230dc7babebfa008d67bd309de7562a0292ab8b",
      "parents": [
        "76ca07832842100b14a31ad8996dab7b0c28aa42"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 15 15:29:21 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 15 15:29:21 2011 -0700"
      },
      "message": "dcache.c: create helper function for duplicated functionality\n\nThis creates a helper function for he \"try to ascend into the parent\ndirectory\" case, which was written out in triplicate before.  With all\nthe locking and subtle sequence number stuff, we really don\u0027t want to\nduplicate that kind of code.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d891eedbc3b1b0fade8a9ce60cc0eba1cccb59e5",
      "tree": "55dd6aa9e17cd763efda6291d740bafd7f05d802",
      "parents": [
        "1ca551c6caae7b52178555cdedea6ca26444be46"
      ],
      "author": {
        "name": "J. Bruce Fields",
        "email": "bfields@fieldses.org",
        "time": "Tue Jan 18 15:45:09 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 05:18:54 2011 -0500"
      },
      "message": "fs/dcache: allow d_obtain_alias() to return unhashed dentries\n\nWithout this patch, inodes are not promptly freed on last close of an\nunlinked file by an nfs client:\n\n\tclient$ mount -tnfs4 server:/export/ /mnt/\n\tclient$ tail -f /mnt/FOO\n\t...\n\tserver$ df -i /export\n\tserver$ rm /export/FOO\n\t(^C the tail -f)\n\tserver$ df -i /export\n\tserver$ echo 2 \u003e/proc/sys/vm/drop_caches\n\tserver$ df -i /export\n\nthe df\u0027s will show that the inode is not freed on the filesystem until\nthe last step, when it could have been freed after killing the client\u0027s\ntail -f. On-disk data won\u0027t be deallocated either, leading to possible\nspurious ENOSPC.\n\nThis occurs because when the client does the close, it arrives in a\ncompound with a putfh and a close, processed like:\n\n\t- putfh: look up the filehandle.  The only alias found for the\n\t  inode will be DCACHE_UNHASHED alias referenced by the filp\n\t  this, so it creates a new DCACHE_DISCONECTED dentry and\n\t  returns that instead.\n\t- close: closes the existing filp, which is destroyed\n\t  immediately by dput() since it\u0027s DCACHE_UNHASHED.\n\t- end of the compound: release the reference\n\t  to the current filehandle, and dput() the new\n\t  DCACHE_DISCONECTED dentry, which gets put on the\n\t  unused list instead of being destroyed immediately.\n\nNick Piggin suggested fixing this by allowing d_obtain_alias to return\nthe unhashed dentry that is referenced by the filp, instead of making it\ncreate a new dentry.\n\nLeave __d_find_alias() alone to avoid changing behavior of other\ncallers.\n\nAlso nfsd doesn\u0027t need all the checks of __d_find_alias(); any dentry,\nhashed or unhashed, disconnected or not, should work.\n\nSigned-off-by: J. Bruce Fields \u003cbfields@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b0a4bb830e099a31bec79452268639a7d8c2c1e4",
      "tree": "ef6a4e8215f0eb236d78b9d25c1ed48546312648",
      "parents": [
        "5629f8a7fa391e40e61d528d4f5d7850dbfdf7ae"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Sat Jan 22 15:31:32 2011 +0900"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Thu Feb 17 16:41:32 2011 +0100"
      },
      "message": "fs: update comments to point correct document\n\ndcache-locking.txt is not exist any more, and the path was not\ncorrect anyway. Fix it.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "ff5fdb61493d95332945630fcae249f896098652",
      "tree": "7a0ba7c65bbecaa5c5d98004d5c52cfb83d1ed77",
      "parents": [
        "9b310acc335cb0da7d743e2b60f999587beb6496"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Sat Jan 22 20:16:06 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jan 22 20:32:38 2011 -0800"
      },
      "message": "fs: fix new dcache.c kernel-doc warnings\n\nFix new fs/dcache.c kernel-doc warnings:\n\n  Warning(fs/dcache.c:184): No description found for parameter \u0027dentry\u0027\n  Warning(fs/dcache.c:296): No description found for parameter \u0027parent\u0027\n  Warning(fs/dcache.c:1985): No description found for parameter \u0027dparent\u0027\n  Warning(fs/dcache.c:1985): Excess function parameter \u0027parent\u0027 description in \u0027d_validate\u0027\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc:\tAlexander Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc:\tNick Piggin \u003cnpiggin@kernel.dk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f8206b925fb0eba3a11839419be118b09105d7b1",
      "tree": "5d41b356a043da09c816ed80bd79d1ea8b2b47e5",
      "parents": [
        "1b59be2a6cdcb5a12e18d8315c07c94a624de48f",
        "f03c65993b98eeb909a4012ce7833c5857d74755"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 16 11:31:50 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 16 11:31:50 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (23 commits)\n  sanitize vfsmount refcounting changes\n  fix old umount_tree() breakage\n  autofs4: Merge the remaining dentry ops tables\n  Unexport do_add_mount() and add in follow_automount(), not -\u003ed_automount()\n  Allow d_manage() to be used in RCU-walk mode\n  Remove a further kludge from __do_follow_link()\n  autofs4: Bump version\n  autofs4: Add v4 pseudo direct mount support\n  autofs4: Fix wait validation\n  autofs4: Clean up autofs4_free_ino()\n  autofs4: Clean up dentry operations\n  autofs4: Clean up inode operations\n  autofs4: Remove unused code\n  autofs4: Add d_manage() dentry operation\n  autofs4: Add d_automount() dentry operation\n  Remove the automount through follow_link() kludge code from pathwalk\n  CIFS: Use d_automount() rather than abusing follow_link()\n  NFS: Use d_automount() rather than abusing follow_link()\n  AFS: Use d_automount() rather than abusing follow_link()\n  Add an AT_NO_AUTOMOUNT flag to suppress terminal automount\n  ...\n"
    },
    {
      "commit": "9875cf806403fae66b2410a3c2cc820d97731e04",
      "tree": "6f9546b400716766af95e0f78e3d600e765b2b51",
      "parents": [
        "1a8edf40e7c3eee955e0dd0316a7c9d85e36f597"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Jan 14 18:45:21 2011 +0000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jan 15 20:05:03 2011 -0500"
      },
      "message": "Add a dentry op to handle automounting rather than abusing follow_link()\n\nAdd a dentry op (d_automount) to handle automounting directories rather than\nabusing the follow_link() inode operation.  The operation is keyed off a new\ndentry flag (DCACHE_NEED_AUTOMOUNT).\n\nThis also makes it easier to add an AT_ flag to suppress terminal segment\nautomount during pathwalk and removes the need for the kludge code in the\npathwalk algorithm to handle directories with follow_link() semantics.\n\nThe -\u003ed_automount() dentry operation:\n\n\tstruct vfsmount *(*d_automount)(struct path *mountpoint);\n\ntakes a pointer to the directory to be mounted upon, which is expected to\nprovide sufficient data to determine what should be mounted.  If successful, it\nshould return the vfsmount struct it creates (which it should also have added\nto the namespace using do_add_mount() or similar).  If there\u0027s a collision with\nanother automount attempt, NULL should be returned.  If the directory specified\nby the parameter should be used directly rather than being mounted upon,\n-EISDIR should be returned.  In any other case, an error code should be\nreturned.\n\nThe -\u003ed_automount() operation is called with no locks held and may sleep.  At\nthis point the pathwalk algorithm will be in ref-walk mode.\n\nWithin fs/namei.c itself, a new pathwalk subroutine (follow_automount()) is\nadded to handle mountpoints.  It will return -EREMOTE if the automount flag was\nset, but no d_automount() op was supplied, -ELOOP if we\u0027ve encountered too many\nsymlinks or mountpoints, -EISDIR if the walk point should be used without\nmounting and 0 if successful.  The path will be updated to point to the mounted\nfilesystem if a successful automount took place.\n\n__follow_mount() is replaced by follow_managed() which is more generic\n(especially with the patch that adds -\u003ed_manage()).  This handles transits from\ndirectories during pathwalk, including automounting and skipping over\nmountpoints (and holding processes with the next patch).\n\n__follow_mount_rcu() will jump out of RCU-walk mode if it encounters an\nautomount point with nothing mounted on it.\n\nfollow_dotdot*() does not handle automounts as you don\u0027t want to trigger them\nwhilst following \"..\".\n\nI\u0027ve also extracted the mount/don\u0027t-mount logic from autofs4 and included it\nhere.  It makes the mount go ahead anyway if someone calls open() or creat(),\ntries to traverse the directory, tries to chdir/chroot/etc. into the directory,\nor sticks a \u0027/\u0027 on the end of the pathname.  If they do a stat(), however,\nthey\u0027ll only trigger the automount if they didn\u0027t also say O_NOFOLLOW.\n\nI\u0027ve also added an inode flag (S_AUTOMOUNT) so that filesystems can mark their\ninodes as automount points.  This flag is automatically propagated to the\ndentry as DCACHE_NEED_AUTOMOUNT by __d_instantiate().  This saves NFS and could\nsave AFS a private flag bit apiece, but is not strictly necessary.  It would be\npreferable to do the propagation in d_set_d_op(), but that doesn\u0027t normally\nhave access to the inode.\n\n[AV: fixed breakage in case if __follow_mount_rcu() fails and nameidata_drop_rcu()\nsucceeds in RCU case of do_lookup(); we need to fall through to non-RCU case after\nthat, rather than just returning with ungrabbed *path]\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nWas-Acked-by: Ian Kent \u003craven@themaw.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6f7f7caab259026234277b659485d22c1dcb1ab4",
      "tree": "db5515958f3cc27462b3c8324b1fb05677193d52",
      "parents": [
        "d018b6f4f1539f3679fbdc2d02d58d09e76be84a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 13:26:18 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 13:26:18 2011 -0800"
      },
      "message": "Turn d_set_d_op() BUG_ON() into WARN_ON_ONCE()\n\nIt\u0027s indicative of a real problem, and it actually triggers with\nautofs4, but the BUG_ON() is excessive.  The autofs4 case is being fixed\n(to only set d_op in the -\u003elookup method) but not merged yet.  In the\nmeantime this gets the code limping along.\n\nReported-by: Alex Elder \u003caelder@sgi.com\u003e\nCc: Ian Kent \u003craven@themaw.net\u003e\nCc: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "208898c17a97610ce1c01b1cc58e51802a1d52c3",
      "tree": "5f89b34b38d8911c197a00003ee5c5a6a19f18cc",
      "parents": [
        "1c977540fda4bf65ab467d110f5d840fc27e7608"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Thu Nov 18 15:02:49 2010 -0800"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jan 12 20:06:57 2011 -0500"
      },
      "message": "fs: fix kernel-doc for dcache::prepend_path\n\nFix function kernel-doc warning for prepend_path():\n\nWarning(fs/dcache.c:1924): missing initial short description on line:\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Alexander Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1c977540fda4bf65ab467d110f5d840fc27e7608",
      "tree": "25e4ebf271915709f12ff8274c57f3d2a561b08d",
      "parents": [
        "66cb76666d69502fe982990b2cff5b6d607fd3b1"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Thu Nov 18 15:02:45 2010 -0800"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jan 12 20:06:55 2011 -0500"
      },
      "message": "fs: fix kernel-doc for dcache::d_validate\n\nFix function parameter kernel-doc for d_validate():\n\nWarning(fs/dcache.c:1495): No description found for parameter \u0027parent\u0027\nWarning(fs/dcache.c:1495): Excess function parameter \u0027dparent\u0027 description in \u0027d_validate\u0027\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Alexander Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c8aebb0c9f8c7471643d5f8ba68328de8013005f",
      "tree": "fae492892b9eecaf9c42632dd1203102cc69365a",
      "parents": [
        "4162cf64973df51fc885825bc9ca4d055891c49f"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Dec 18 10:22:30 2010 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jan 12 20:02:34 2011 -0500"
      },
      "message": "per-superblock default -\u003ed_op\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9d55c369bb5e695e629bc35cba2ef607755b3bee",
      "tree": "d97cd498a67f1f7987d4403ef90e399516a3b8c9",
      "parents": [
        "e1bb57826381199cc79fbf44e9dfeee58fc7b339"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:09 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:32 2011 +1100"
      },
      "message": "fs: implement faster dentry memcmp\n\nThe standard memcmp function on a Westmere system shows up hot in\nprofiles in the `git diff` workload (both parallel and single threaded),\nand it is likely due to the costs associated with trapping into\nmicrocode, and little opportunity to improve memory access (dentry\nname is not likely to take up more than a cacheline).\n\nSo replace it with an open-coded byte comparison. This increases code\nsize by 8 bytes in the critical __d_lookup_rcu function, but the\nspeedup is huge, averaging 10 runs of each:\n\ngit diff st   user   sys   elapsed  CPU\nbefore        1.15   2.57  3.82      97.1\nafter         1.14   2.35  3.61      96.8\n\ngit diff mt   user   sys   elapsed  CPU\nbefore        1.27   3.85  1.46     349\nafter         1.26   3.54  1.43     333\n\nElapsed time for single threaded git diff at 95.0% confidence:\n        -0.21  +/- 0.01\n        -5.45% +/- 0.24%\n\nIt\u0027s -0.66% +/- 0.06% elapsed time on my Opteron, so rep cmp costs on the\nfam10h seem to be relatively smaller, but there is still a win.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "e1bb57826381199cc79fbf44e9dfeee58fc7b339",
      "tree": "b2f5edeebc568c3fff4afd799801e9e605b99efc",
      "parents": [
        "4b936885ab04dc6e0bb0ef35e0e23c1a7364d9e5"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:08 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:32 2011 +1100"
      },
      "message": "fs: prefetch inode data in dcache lookup\n\nThis makes single threaded git diff -1.25% +/- 0.05% elapsed time on my\n2s12c24t Westmere system, and -0.86% +/- 0.05% on my 2s8c Barcelona, by\nprefetching the important first cacheline of the inode in while we do the\nactual name compare and other operations on the dentry.\n\nThere was no measurable slowdown in the single file stat case, or the creat\ncase (where negative dentries would be common).\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "4b936885ab04dc6e0bb0ef35e0e23c1a7364d9e5",
      "tree": "a0173d27c1ce39f173be404d269c2f15144072ab",
      "parents": [
        "873feea09ebc980cbd3631b767356ce1eee65ec1"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:07 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:32 2011 +1100"
      },
      "message": "fs: improve scalability of pseudo filesystems\n\nRegardless of how much we possibly try to scale dcache, there is likely\nalways going to be some fundamental contention when adding or removing children\nunder the same parent. Pseudo filesystems do not seem need to have connected\ndentries because by definition they are disconnected.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "873feea09ebc980cbd3631b767356ce1eee65ec1",
      "tree": "59a8fce9b138086abee7cf845f62ff70a390cf81",
      "parents": [
        "ceb5bdc2d246f6d81cf61ed70f325308a11821d2"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:06 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:31 2011 +1100"
      },
      "message": "fs: dcache per-inode inode alias locking\n\ndcache_inode_lock can be replaced with per-inode locking. Use existing\ninode-\u003ei_lock for this. This is slightly non-trivial because we sometimes\nneed to find the inode from the dentry, which requires d_inode to be\nstabilised (either with refcount or d_lock).\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "ceb5bdc2d246f6d81cf61ed70f325308a11821d2",
      "tree": "65fc9e0227994d4ffc80530dd15bb5a9672a295e",
      "parents": [
        "626d607435617cc0f033522083e2bb195b81813c"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:05 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:31 2011 +1100"
      },
      "message": "fs: dcache per-bucket dcache hash locking\n\nWe can turn the dcache hash locking from a global dcache_hash_lock into\nper-bucket locking.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "44a7d7a878c9cbb74f236ea755b25b6b2e26a9a9",
      "tree": "d4630a38c0d683a7e1b8823d7971753719b8a54d",
      "parents": [
        "fb045adb99d9b7c562dc7fef834857f78249daa1"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:56 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:28 2011 +1100"
      },
      "message": "fs: cache optimise dentry and inode for rcu-walk\n\nPut dentry and inode fields into top of data structure.  This allows RCU path\ntraversal to perform an RCU dentry lookup in a path walk by touching only the\nfirst 56 bytes of the dentry.\n\nWe also fit in 8 bytes of inline name in the first 64 bytes, so for short\nnames, only 64 bytes needs to be touched to perform the lookup. We should\nget rid of the hash-\u003eprev pointer from the first 64 bytes, and fit 16 bytes\nof name in there, which will take care of 81% rather than 32% of the kernel\ntree.\n\ninode is also rearranged so that RCU lookup will only touch a single cacheline\nin the inode, plus one in the i_ops structure.\n\nThis is important for directory component lookups in RCU path walking. In the\nkernel source, directory names average is around 6 chars, so this works.\n\nWhen we reach the last element of the lookup, we need to lock it and take its\nrefcount which requires another cacheline access.\n\nAlign dentry and inode operations structs, so members will be at predictable\noffsets and we can group common operations into head of structure.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "fb045adb99d9b7c562dc7fef834857f78249daa1",
      "tree": "1fd6a4024fffeec568abe100d730589bfdb81c38",
      "parents": [
        "5f57cbcc02cf18f6b22ef4066bb10afeb8f930ff"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:55 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:28 2011 +1100"
      },
      "message": "fs: dcache reduce branches in lookup path\n\nReduce some branches and memory accesses in dcache lookup by adding dentry\nflags to indicate common d_ops are set, rather than having to check them.\nThis saves a pointer memory access (dentry-\u003ed_op) in common path lookup\nsituations, and saves another pointer load and branch in cases where we\nhave d_op but not the particular operation.\n\nPatched with:\n\ngit grep -E \u0027[.\u003e]([[:space:]])*d_op([[:space:]])*\u003d\u0027 | xargs sed -e \u0027s/\\([^\\t ]*\\)-\u003ed_op \u003d \\(.*\\);/d_set_d_op(\\1, \\2);/\u0027 -e \u0027s/\\([^\\t ]*\\)\\.d_op \u003d \\(.*\\);/d_set_d_op(\\\u0026\\1, \\2);/\u0027 -i\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "5f57cbcc02cf18f6b22ef4066bb10afeb8f930ff",
      "tree": "f02e7ee57e6060f0af1bcda281baf2972d2da72f",
      "parents": [
        "c28cc36469554dc55540f059fbdc7fa22a2c31fc"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:54 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:28 2011 +1100"
      },
      "message": "fs: dcache remove d_mounted\n\nRather than keep a d_mounted count in the dentry, set a dentry flag instead.\nThe flag can be cleared by checking the hash table to see if there are any\nmounts left, which is not time critical because it is performed at detach time.\n\nThe mounted state of a dentry is only used to speculatively take a look in the\nmount hash table if it is set -- before following the mount, vfsmount lock is\ntaken and mount re-checked without races.\n\nThis saves 4 bytes on 32-bit, nothing on 64-bit but it does provide a hole I\nmight use later (and some configs have larger than 32-bit spinlocks which might\nmake use of the hole).\n\nAutofs4 conversion and changelog by Ian Kent \u003craven@themaw.net\u003e:\nIn autofs4, when expring direct (or offset) mounts we need to ensure that we\nblock user path walks into the autofs mount, which is covered by another mount.\nTo do this we clear the mounted status so that follows stop before walking into\nthe mount and are essentially blocked until the expire is completed. The\nautomount daemon still finds the correct dentry for the umount due to the\nfollow mount logic in fs/autofs4/root.c:autofs4_follow_link(), which is set as\nan inode operation for direct and offset mounts only and is called following\nthe lookup that stopped at the covered mount.\n\nAt the end of the expire the covering mount probably has gone away so the\nmounted status need not be restored. But we need to check this and only restore\nthe mounted status if the expire failed.\n\nXXX: autofs may not work right if we have other mounts go over the top of it?\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "31e6b01f4183ff419a6d1f86177cbf4662347cec",
      "tree": "e215ec9af88352c55e024f784f3d9f8eb13fab85",
      "parents": [
        "3c22cd5709e8143444a6d08682a87f4c57902df3"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:52 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:27 2011 +1100"
      },
      "message": "fs: rcu-walk for path lookup\n\nPerform common cases of path lookups without any stores or locking in the\nancestor dentry elements. This is called rcu-walk, as opposed to the current\nalgorithm which is a refcount based walk, or ref-walk.\n\nThis results in far fewer atomic operations on every path element,\nsignificantly improving path lookup performance. It also avoids cacheline\nbouncing on common dentries, significantly improving scalability.\n\nThe overall design is like this:\n* LOOKUP_RCU is set in nd-\u003eflags, which distinguishes rcu-walk from ref-walk.\n* Take the RCU lock for the entire path walk, starting with the acquiring\n  of the starting path (eg. root/cwd/fd-path). So now dentry refcounts are\n  not required for dentry persistence.\n* synchronize_rcu is called when unregistering a filesystem, so we can\n  access d_ops and i_ops during rcu-walk.\n* Similarly take the vfsmount lock for the entire path walk. So now mnt\n  refcounts are not required for persistence. Also we are free to perform mount\n  lookups, and to assume dentry mount points and mount roots are stable up and\n  down the path.\n* Have a per-dentry seqlock to protect the dentry name, parent, and inode,\n  so we can load this tuple atomically, and also check whether any of its\n  members have changed.\n* Dentry lookups (based on parent, candidate string tuple) recheck the parent\n  sequence after the child is found in case anything changed in the parent\n  during the path walk.\n* inode is also RCU protected so we can load d_inode and use the inode for\n  limited things.\n* i_mode, i_uid, i_gid can be tested for exec permissions during path walk.\n* i_op can be loaded.\n\nWhen we reach the destination dentry, we lock it, recheck lookup sequence,\nand increment its refcount and mountpoint refcount. RCU and vfsmount locks\nare dropped. This is termed \"dropping rcu-walk\". If the dentry refcount does\nnot match, we can not drop rcu-walk gracefully at the current point in the\nlokup, so instead return -ECHILD (for want of a better errno). This signals the\npath walking code to re-do the entire lookup with a ref-walk.\n\nAside from the final dentry, there are other situations that may be encounted\nwhere we cannot continue rcu-walk. In that case, we drop rcu-walk (ie. take\na reference on the last good dentry) and continue with a ref-walk. Again, if\nwe can drop rcu-walk gracefully, we return -ECHILD and do the whole lookup\nusing ref-walk. But it is very important that we can continue with ref-walk\nfor most cases, particularly to avoid the overhead of double lookups, and to\ngain the scalability advantages on common path elements (like cwd and root).\n\nThe cases where rcu-walk cannot continue are:\n* NULL dentry (ie. any uncached path element)\n* parent with d_inode-\u003ei_op-\u003epermission or ACLs\n* dentries with d_revalidate\n* Following links\n\nIn future patches, permission checks and d_revalidate become rcu-walk aware. It\nmay be possible eventually to make following links rcu-walk aware.\n\nUncached path elements will always require dropping to ref-walk mode, at the\nvery least because i_mutex needs to be grabbed, and objects allocated.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "77812a1ef139d84270d27faacc0630c887411013",
      "tree": "a051134c0d1c74425a5f60adc0ca252c5db15b35",
      "parents": [
        "ec33679d78f9d653a44ddba10b5fb824c06330a1"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:48 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:25 2011 +1100"
      },
      "message": "fs: consolidate dentry kill sequence\n\nThe tricky locking for disposing of a dentry is duplicated 3 times in the\ndcache (dput, pruning a dentry from the LRU, and pruning its ancestors).\nConsolidate them all into a single function dentry_kill.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "ec33679d78f9d653a44ddba10b5fb824c06330a1",
      "tree": "5d1530286d1348064020c466427576294def7191",
      "parents": [
        "be182bff72fae6a3eb25624b39170c40b72f0909"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:47 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:25 2011 +1100"
      },
      "message": "fs: use RCU in shrink_dentry_list to reduce lock nesting\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "be182bff72fae6a3eb25624b39170c40b72f0909",
      "tree": "b77ee014d7850c6e57dae7231a38c0c26cd96b38",
      "parents": [
        "89e6054836a7b1e7500cd70a14b5579e752c9250"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:46 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:25 2011 +1100"
      },
      "message": "fs: reduce dcache_inode_lock width in lru scanning\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "89e6054836a7b1e7500cd70a14b5579e752c9250",
      "tree": "b74d2ecd1ac2a571d289e5525a0dc067ec1f35eb",
      "parents": [
        "a734eb458ab2bd11479a27dd54f48e1b26a55845"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:45 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:25 2011 +1100"
      },
      "message": "fs: dcache reduce prune_one_dentry locking\n\nprune_one_dentry can avoid quite a bit of locking in the common case where\nancestors have an elevated refcount. Alternatively, we could have gone the\nother way and made fewer trylocks in the case where d_count goes to zero, but\nis probably less common.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "a734eb458ab2bd11479a27dd54f48e1b26a55845",
      "tree": "425f6173d63a58ec719147764300bb324e1d53e3",
      "parents": [
        "dc0474be3e27463d4d4a2793f82366eed906f223"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:44 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:24 2011 +1100"
      },
      "message": "fs: dcache reduce d_parent locking\n\nUse RCU to simplify locking in dget_parent.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "dc0474be3e27463d4d4a2793f82366eed906f223",
      "tree": "41f75e638442cb343bacdcfbabb17ffc3bd5b4ce",
      "parents": [
        "357f8e658bba8a085c4a5d4331e30894be8096b8"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:43 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:24 2011 +1100"
      },
      "message": "fs: dcache rationalise dget variants\n\ndget_locked was a shortcut to avoid the lazy lru manipulation when we already\nheld dcache_lock (lru manipulation was relatively cheap at that point).\nHowever, how that the lru lock is an innermost one, we never hold it at any\ncaller, so the lock cost can now be avoided. We already have well working lazy\ndcache LRU, so it should be fine to defer LRU manipulations to scan time.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "357f8e658bba8a085c4a5d4331e30894be8096b8",
      "tree": "2182f5cd42a1c142bd2780bdaa7cc7953d9ec924",
      "parents": [
        "89ad485f01fd83c47f17a128db3bd7b89c0f244f"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:42 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:24 2011 +1100"
      },
      "message": "fs: dcache reduce dcache_inode_lock\n\ndcache_inode_lock can be avoided in d_delete() and d_materialise_unique()\nin cases where it is not required.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "89ad485f01fd83c47f17a128db3bd7b89c0f244f",
      "tree": "1f9772e3f0dc8ac9392341e677217caf2d9ba36c",
      "parents": [
        "61f3dee4af09528997a970280da240577bf60721"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:41 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:24 2011 +1100"
      },
      "message": "fs: dcache reduce locking in d_alloc\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "61f3dee4af09528997a970280da240577bf60721",
      "tree": "8c916d7c1965303a37f1051aa5d42d8e2b7b115a",
      "parents": [
        "58db63d086790eec2ed433f9d8c4962239809cf8"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:40 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:23 2011 +1100"
      },
      "message": "fs: dcache reduce dput locking\n\nIt is possible to run dput without taking data structure locks up-front. In\nmany cases where we don\u0027t kill the dentry anyway, these locks are not required.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "58db63d086790eec2ed433f9d8c4962239809cf8",
      "tree": "e8fa4238167f92bb0dbded4d2df1498d8c4e9404",
      "parents": [
        "b5c84bf6f6fa3a7dfdcb556023a62953574b60ee"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:39 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:23 2011 +1100"
      },
      "message": "fs: dcache avoid starvation in dcache multi-step operations\n\nLong lived dcache \"multi-step\" operations which retry on rename seq can\nbe starved with a lot of rename activity. If they fail after the 1st pass,\ntake the rename_lock for writing to avoid further starvation.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "b5c84bf6f6fa3a7dfdcb556023a62953574b60ee",
      "tree": "7a2c299a180713e21d5cb653cb933121adf53c31",
      "parents": [
        "949854d02455080d20cd3e1db28a3a18daf7599d"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:38 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:23 2011 +1100"
      },
      "message": "fs: dcache remove dcache_lock\n\ndcache_lock no longer protects anything. remove it.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "949854d02455080d20cd3e1db28a3a18daf7599d",
      "tree": "9b13a6f86c1d0b91e462a471e53b0e717036b18e",
      "parents": [
        "9abca36087288fe28de4749c71ca003d4b9e3ed0"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:37 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:22 2011 +1100"
      },
      "message": "fs: Use rename lock and RCU for multi-step operations\n\nThe remaining usages for dcache_lock is to allow atomic, multi-step read-side\noperations over the directory tree by excluding modifications to the tree.\nAlso, to walk in the leaf-\u003eroot direction in the tree where we don\u0027t have\na natural d_lock ordering.\n\nThis could be accomplished by taking every d_lock, but this would mean a\nhuge number of locks and actually gets very tricky.\n\nSolve this instead by using the rename seqlock for multi-step read-side\noperations, retry in case of a rename so we don\u0027t walk up the wrong parent.\nConcurrent dentry insertions are not serialised against.  Concurrent deletes\nare tricky when walking up the directory: our parent might have been deleted\nwhen dropping locks so also need to check and retry for that.\n\nWe can also use the rename lock in cases where livelock is a worry (and it\nis introduced in subsequent patch).\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "9abca36087288fe28de4749c71ca003d4b9e3ed0",
      "tree": "1d1b08bdcffb8f8a7be217ee1c017f5154f64f6a",
      "parents": [
        "b23fb0a60379a95e10c671f646b259ea2558421e"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:36 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:22 2011 +1100"
      },
      "message": "fs: increase d_name lock coverage\n\nCover d_name with d_lock in more cases, where there may be concurrent\nmodification to it.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "b23fb0a60379a95e10c671f646b259ea2558421e",
      "tree": "7c3644b91241d32fda502a7be0b78e4c225f8091",
      "parents": [
        "2fd6b7f50797f2e993eea59e0a0b8c6399c811dc"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:35 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:22 2011 +1100"
      },
      "message": "fs: scale inode alias list\n\nAdd a new lock, dcache_inode_lock, to protect the inode\u0027s i_dentry list\nfrom concurrent modification. d_alias is also protected by d_lock.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "2fd6b7f50797f2e993eea59e0a0b8c6399c811dc",
      "tree": "ce33b94b34844c09103836cf4cfa4364b742f217",
      "parents": [
        "da5029563a0a026c64821b09e8e7b4fd81d3fe1b"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:34 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:21 2011 +1100"
      },
      "message": "fs: dcache scale subdirs\n\nProtect d_subdirs and d_child with d_lock, except in filesystems that aren\u0027t\nusing dcache_lock for these anyway (eg. using i_mutex).\n\nNote: if we change the locking rule in future so that -\u003ed_child protection is\nprovided only with -\u003ed_parent-\u003ed_lock, it may allow us to reduce some locking.\nBut it would be an exception to an otherwise regular locking scheme, so we\u0027d\nhave to see some good results. Probably not worthwhile.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "da5029563a0a026c64821b09e8e7b4fd81d3fe1b",
      "tree": "5d5618e0cb382390073377b1be7d0aa76879ac54",
      "parents": [
        "b7ab39f631f505edc2bbdb86620d5493f995c9da"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:33 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:21 2011 +1100"
      },
      "message": "fs: dcache scale d_unhashed\n\nProtect d_unhashed(dentry) condition with d_lock. This means keeping\nDCACHE_UNHASHED bit in synch with hash manipulations.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "b7ab39f631f505edc2bbdb86620d5493f995c9da",
      "tree": "62be97ebc7fc69ceb601f23312d335ebb8038ee7",
      "parents": [
        "2304450783dfde7b0b94ae234edd0dbffa865073"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:32 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:21 2011 +1100"
      },
      "message": "fs: dcache scale dentry refcount\n\nMake d_count non-atomic and protect it with d_lock. This allows us to ensure a\n0 refcount dentry remains 0 without dcache_lock. It is also fairly natural when\nwe start protecting many other dentry members with d_lock.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "2304450783dfde7b0b94ae234edd0dbffa865073",
      "tree": "b3435e65c24d69ccad9ef9492624f5b6081d86b8",
      "parents": [
        "789680d1ee9311cdf095241dc02bd9784d799cd1"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:31 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:20 2011 +1100"
      },
      "message": "fs: dcache scale lru\n\nAdd a new lock, dcache_lru_lock, to protect the dcache LRU list from concurrent\nmodification. d_lru is also protected by d_lock, which allows LRU lists to be\naccessed without the lru lock, using RCU in future patches.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "789680d1ee9311cdf095241dc02bd9784d799cd1",
      "tree": "e6a984b0aa4791918f1b665f45210c2ab762969c",
      "parents": [
        "ec2447c278ee973d35f38e53ca16ba7f965ae33d"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:30 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:20 2011 +1100"
      },
      "message": "fs: dcache scale hash\n\nAdd a new lock, dcache_hash_lock, to protect the dcache hash table from\nconcurrent modification. d_hash is also protected by d_lock.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "ec2447c278ee973d35f38e53ca16ba7f965ae33d",
      "tree": "5d17a0523c301b8c71c0f198ffe7782c5e9c0ea9",
      "parents": [
        "b1e6a015a580ad145689ad1d6b4aa0e03e6c868b"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:29 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:20 2011 +1100"
      },
      "message": "hostfs: simplify locking\n\nRemove dcache_lock locking from hostfs filesystem, and move it into dcache\nhelpers. All that is required is a coherent path name. Protection from\nconcurrent modification of the namespace after path name generation is not\nprovided in current code, because dcache_lock is dropped before the path is\nused.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "b1e6a015a580ad145689ad1d6b4aa0e03e6c868b",
      "tree": "57a10ef164e4d2f798d9b832dbeaf973aca2ab83",
      "parents": [
        "621e155a3591962420eacdd39f6f0aa29ceb221e"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:28 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:20 2011 +1100"
      },
      "message": "fs: change d_hash for rcu-walk\n\nChange d_hash so it may be called from lock-free RCU lookups. See similar\npatch for d_compare for details.\n\nFor in-tree filesystems, this is just a mechanical change.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "621e155a3591962420eacdd39f6f0aa29ceb221e",
      "tree": "387a9fb396f1bf24514b712c294182e36ba51076",
      "parents": [
        "fb2d5b86aff355a27ebfc132d3c99f4a940cc3fe"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:27 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:19 2011 +1100"
      },
      "message": "fs: change d_compare for rcu-walk\n\nChange d_compare so it may be called from lock-free RCU lookups. This\ndoes put significant restrictions on what may be done from the callback,\nhowever there don\u0027t seem to have been any problems with in-tree fses.\nIf some strange use case pops up that _really_ cannot cope with the\nrcu-walk rules, we can just add new rcu-unaware callbacks, which would\ncause name lookup to drop out of rcu-walk mode.\n\nFor in-tree filesystems, this is just a mechanical change.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "fb2d5b86aff355a27ebfc132d3c99f4a940cc3fe",
      "tree": "7fed12adf54473131e8b86c0c302c443b1d6a846",
      "parents": [
        "2bc334dcc7c77be3700dd443d92a78603f76976b"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:26 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:19 2011 +1100"
      },
      "message": "fs: name case update method\n\nsmpfs and ncpfs want to update a live dentry name in-place. Rather than\nhave them open code the locking, provide a documented dcache API.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "fe15ce446beb3a33583af81ffe6c9d01a75314ed",
      "tree": "bc8af66b6dd2d0f21a2a3f48a19975ae2cdbae4e",
      "parents": [
        "5eef7fa905c814826f518aca2d414ca77508ce30"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:23 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:18 2011 +1100"
      },
      "message": "fs: change d_delete semantics\n\nChange d_delete from a dentry deletion notification to a dentry caching\nadvise, more like -\u003edrop_inode. Require it to be constant and idempotent,\nand not take d_lock. This is how all existing filesystems use the callback\nanyway.\n\nThis makes fine grained dentry locking of dput and dentry lru scanning\nmuch simpler.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "3e880fb5e4bb6a012035e3edd0586ee2817c2e24",
      "tree": "665101c2c559c26e2dff2c7eca2c747fb736b524",
      "parents": [
        "86c8749ede0c59e590de9267066932a26f1ce796"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:19 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:17 2011 +1100"
      },
      "message": "fs: use fast counters for vfs caches\n\npercpu_counter library generates quite nasty code, so unless you need\nto dynamically allocate counters or take fast approximate value, a\nsimple per cpu set of counters is much better.\n\nThe percpu_counter can never be made to work as well, because it has an\nindirection from pointer to percpu memory, and it can\u0027t use direct\nthis_cpu_inc interfaces because it doesn\u0027t use static PER_CPU data, so\ncode will always be worse.\n\nIn the fastpath, it is the difference between this:\n\n        incl %gs:nr_dentry      # nr_dentry\n\nand this:\n\n        movl    percpu_counter_batch(%rip), %edx        # percpu_counter_batch,\n        movl    $1, %esi        #,\n        movq    $nr_dentry, %rdi        #,\n        call    __percpu_counter_add    # (plus I clobber registers)\n\n__percpu_counter_add:\n        pushq   %rbp    #\n        movq    %rsp, %rbp      #,\n        subq    $32, %rsp       #,\n        movq    %rbx, -24(%rbp) #,\n        movq    %r12, -16(%rbp) #,\n        movq    %r13, -8(%rbp)  #,\n        movq    %rdi, %rbx      # fbc, fbc\n#APP\n# 216 \"/home/npiggin/usr/src/linux-2.6/arch/x86/include/asm/thread_info.h\" 1\n        movq %gs:kernel_stack,%rax      #, pfo_ret__\n# 0 \"\" 2\n#NO_APP\n        incl    -8124(%rax)     # \u003cvariable\u003e.preempt_count\n        movq    32(%rdi), %r12  # \u003cvariable\u003e.counters, tcp_ptr__\n#APP\n# 78 \"lib/percpu_counter.c\" 1\n        add %gs:this_cpu_off, %r12      # this_cpu_off, tcp_ptr__\n# 0 \"\" 2\n#NO_APP\n        movslq  (%r12),%r13     #* tcp_ptr__, tmp73\n        movslq  %edx,%rax       # batch, batch\n        addq    %rsi, %r13      # amount, count\n        cmpq    %rax, %r13      # batch, count\n        jge     .L27    #,\n        negl    %edx    # tmp76\n        movslq  %edx,%rdx       # tmp76, tmp77\n        cmpq    %rdx, %r13      # tmp77, count\n        jg      .L28    #,\n.L27:\n        movq    %rbx, %rdi      # fbc,\n        call    _raw_spin_lock  #\n        addq    %r13, 8(%rbx)   # count, \u003cvariable\u003e.count\n        movq    %rbx, %rdi      # fbc,\n        movl    $0, (%r12)      #,* tcp_ptr__\n        call    _raw_spin_unlock        #\n.L29:\n#APP\n# 216 \"/home/npiggin/usr/src/linux-2.6/arch/x86/include/asm/thread_info.h\" 1\n        movq %gs:kernel_stack,%rax      #, pfo_ret__\n# 0 \"\" 2\n#NO_APP\n        decl    -8124(%rax)     # \u003cvariable\u003e.preempt_count\n        movq    -8136(%rax), %rax       #, D.14625\n        testb   $8, %al #, D.14625\n        jne     .L32    #,\n.L31:\n        movq    -24(%rbp), %rbx #,\n        movq    -16(%rbp), %r12 #,\n        movq    -8(%rbp), %r13  #,\n        leave\n        ret\n        .p2align 4,,10\n        .p2align 3\n.L28:\n        movl    %r13d, (%r12)   # count,*\n        jmp     .L29    #\n.L32:\n        call    preempt_schedule        #\n        .p2align 4,,6\n        jmp     .L31    #\n        .size   __percpu_counter_add, .-__percpu_counter_add\n        .p2align 4,,15\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "86c8749ede0c59e590de9267066932a26f1ce796",
      "tree": "316517d7c03d9caf0577acc517532ed2bc1801cc",
      "parents": [
        "ccd35fb9f4da856b105ea0f1e0cab3702e8ae6ba"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:18 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:17 2011 +1100"
      },
      "message": "vfs: revert per-cpu nr_unused counters for dentry and inodes\n\nThe nr_unused counters count the number of objects on an LRU, and as such they\nare synchronized with LRU object insertion and removal and scanning, and\nprotected under the LRU lock.\n\nMaking it per-cpu does not actually get any concurrency improvements because of\nthis lock, and summing the counter is much slower, and\nincrementing/decrementing it costs more code size and is slower too.\n\nThese counters should stay per-LRU, which currently means global.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "786a5e15b613a9cee4fc9139fc3113a5ab0fde79",
      "tree": "0c0100945f74ad1d68b9b546e1929cfcb67e9095",
      "parents": [
        "d3a23e1678a5827c38ed8a465ad91d65e59fa911"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:16 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:16 2011 +1100"
      },
      "message": "fs: d_validate fixes\n\nd_validate has been broken for a long time.\n\nkmem_ptr_validate does not guarantee that a pointer can be dereferenced\nif it can go away at any time. Even rcu_read_lock doesn\u0027t help, because\nthe pointer might be queued in RCU callbacks but not executed yet.\n\nSo the parent cannot be checked, nor the name hashed. The dentry pointer\ncan not be touched until it can be verified under lock. Hashing simply\ncannot be used.\n\nInstead, verify the parent/child relationship by traversing parent\u0027s\nd_child list. It\u0027s slow, but only ncpfs and the destaged smbfs care\nabout it, at this point.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "d3a23e1678a5827c38ed8a465ad91d65e59fa911",
      "tree": "44363edff14c1796a634825f07decc2324d7e6e0",
      "parents": [
        "3c0eee3fe6a3a1c745379547c7e7c904aa64f6d5"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Wed Jan 05 20:01:21 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Wed Jan 05 20:01:21 2011 +1100"
      },
      "message": "Revert \"fs: use RCU read side protection in d_validate\"\n\nThis reverts commit 3825bdb7ed920845961f32f364454bee5f469abb.\n\nYou cannot dget() a dentry without having a reference, or holding\na lock that guarantees it remains valid.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "3825bdb7ed920845961f32f364454bee5f469abb",
      "tree": "935f4d42ff568efd595700889a1839a604aa8cec",
      "parents": [
        "a4633357ac610cd2f8740e28a31fc148a7960421"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sun Oct 10 05:36:27 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:13 2010 -0400"
      },
      "message": "fs: use RCU read side protection in d_validate\n\nd_validate does a purely read lookup in the dentry hash, so use RCU read side\nlocking instead of dcache_lock.  Split out from a larget patch by\nNick Piggin \u003cnpiggin@suse.de\u003e.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a4633357ac610cd2f8740e28a31fc148a7960421",
      "tree": "5c28962f355c545f888ab7b8e95e8bce5c2de599",
      "parents": [
        "3049cfe24ef3872ba74f90630356722cf988b80d"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sun Oct 10 05:36:26 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:13 2010 -0400"
      },
      "message": "fs: clean up dentry lru modification\n\nAlways do a list_del_init on the LRU to make sure the list_empty invariant for\nnot beeing on the LRU always holds true, and fold dentry_lru_del_init into\ndentry_lru_del.  Replace the dentry_lru_add_tail primitive with a\ndentry_lru_move_tail operations that simpler when the dentry already is one\nthe list, which is always is.  Move the list_empty into dentry_lru_add to\nfit the scheme of the other lru helpers, and simplify locking once we\nmove to a separate LRU lock.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "3049cfe24ef3872ba74f90630356722cf988b80d",
      "tree": "18c7574640a8f95106facd56cb03a74b73d60f42",
      "parents": [
        "265ac90230257e9c035e4b0c63a0c11c5336e93c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sun Oct 10 05:36:25 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:13 2010 -0400"
      },
      "message": "fs: split __shrink_dcache_sb\n\nCurrently __shrink_dcache_sb has an extremly awkward calling convention\nbecause it tries to please very different callers.  Split out the\nmain loop into a shrink_dentry_list helper, which gets called directly\nfrom shrink_dcache_sb for the cases where all dentries need to be pruned,\nor from __shrink_dcache_sb for pruning only a certain number of dentries.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "265ac90230257e9c035e4b0c63a0c11c5336e93c",
      "tree": "7bb17007af9812137eb2060fd9ef979e049f7acd",
      "parents": [
        "312d3ca856d369bb04d0443846b85b4cdde6fa8a"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Sun Oct 10 05:36:24 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:12 2010 -0400"
      },
      "message": "fs: improve DCACHE_REFERENCED usage\n\ndentry referenced bit is only set when installing the dentry back\nonto the LRU. However with lazy LRU, the dentry can already be on\nthe LRU list at dput time, thus missing out on setting the referenced\nbit. Fix this.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "312d3ca856d369bb04d0443846b85b4cdde6fa8a",
      "tree": "cf95d01cffaf02bf53c2bb0f7c2c924279ec6eeb",
      "parents": [
        "9c82ab9c9e16cb9edf17bd0d31f3d6904afce04f"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sun Oct 10 05:36:23 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:12 2010 -0400"
      },
      "message": "fs: use percpu counter for nr_dentry and nr_dentry_unused\n\nThe nr_dentry stat is a globally touched cacheline and atomic operation\ntwice over the lifetime of a dentry. It is used for the benfit of userspace\nonly. Turn it into a per-cpu counter and always decrement it in d_free instead\nof doing various batching operations to reduce lock hold times in the callers.\n\nBased on an earlier patch from Nick Piggin \u003cnpiggin@suse.de\u003e.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9c82ab9c9e16cb9edf17bd0d31f3d6904afce04f",
      "tree": "82701029a920b1550f1234a8630ff0243ac3651c",
      "parents": [
        "be148247cfbe2422f5709e77d9c3e10b8a6394da"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sun Oct 10 05:36:22 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:12 2010 -0400"
      },
      "message": "fs: simplify __d_free\n\nRemove d_callback and always call __d_free with a RCU head.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "be148247cfbe2422f5709e77d9c3e10b8a6394da",
      "tree": "f04605bb5ea21cefd455b6fd81c51d8bb02c1521",
      "parents": [
        "85fe4025c616a7c0ed07bc2fc8c5371b07f3888c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sun Oct 10 05:36:21 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:12 2010 -0400"
      },
      "message": "fs: take dcache_lock inside __d_path\n\nAll callers take dcache_lock just around the call to __d_path, so\ntake the lock into it in preparation of getting rid of dcache_lock.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "99b7db7b8ffd6bb755eb0a175596421a0b581cb2",
      "tree": "cbaf57d252f0852f967d3fd5a5f87472964a01fe",
      "parents": [
        "6416ccb7899960868f5016751fb81bf25213d24f"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Wed Aug 18 04:37:39 2010 +1000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Aug 18 08:35:48 2010 -0400"
      },
      "message": "fs: brlock vfsmount_lock\n\nfs: brlock vfsmount_lock\n\nUse a brlock for the vfsmount lock. It must be taken for write whenever\nmodifying the mount hash or associated fields, and may be taken for read when\nperforming mount hash lookups.\n\nA new lock is added for the mnt-id allocator, so it doesn\u0027t need to take\nthe heavy vfsmount write-lock.\n\nThe number of atomics should remain the same for fastpath rlock cases, though\ncode would be slightly slower due to per-cpu access. Scalability is not not be\nmuch improved in common cases yet, due to other locks (ie. dcache_lock) getting\nin the way. However path lookups crossing mountpoints should be one case where\nscalability is improved (currently requiring the global lock).\n\nThe slowpath is slower due to use of brlock. On a 64 core, 64 socket, 32 node\nAltix system (high latency to remote nodes), a simple umount microbenchmark\n(mount --bind mnt mnt2 ; umount mnt2 loop 1000 times), before this patch it\ntook 6.8s, afterwards took 7.1s, about 5% slower.\n\nCc: Al Viro \u003cviro@ZenIV.linux.org.uk\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b04f784e5d19ed58892833dae845738972cea260",
      "tree": "6060e063b5a51461fd60630d57318778fe987148",
      "parents": [
        "2a4419b5b2a77f3f4537c14f7ad7df95770655dd"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Wed Aug 18 04:37:34 2010 +1000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Aug 18 08:35:47 2010 -0400"
      },
      "message": "fs: remove extra lookup in __lookup_hash\n\nfs: remove extra lookup in __lookup_hash\n\nOptimize lookup for create operations, where no dentry should often be\ncommon-case. In cases where it is not, such as unlink, the added overhead\nis much smaller than the removed.\n\nAlso, move comments about __d_lookup racyness to the __d_lookup call site.\nd_lookup is intuitive; __d_lookup is what needs commenting. So in that same\nvein, add kerneldoc comments to __d_lookup and clean up some of the comments:\n\n- We are interested in how the RCU lookup works here, particularly with\n  renames. Make that explicit, and point to the document where it is explained\n  in more detail.\n- RCU is pretty standard now, and macros make implementations pretty mindless.\n  If we want to know about RCU barrier details, we look in RCU code.\n- Delete some boring legacy comments because we don\u0027t care much about how the\n  code used to work, more about the interesting parts of how it works now. So\n  comments about lazy LRU may be interesting, but would better be done in the\n  LRU or refcount management code.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "cd956a1c039a55a0ea58175b9a6e83c45799f3de",
      "tree": "d531e2764b9946e3f4ee94f881d2f67321653191",
      "parents": [
        "1f5cfe2f732c6f4d198950ec3c951105af24dd01"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Sat Aug 14 13:05:31 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 14 16:21:00 2010 -0700"
      },
      "message": "fs/dcache: fix function param name in kernel-doc\n\nFix parameter name in kernel-doc notation (causes a warning).\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8df9d1a4142311c084ffeeacb67cd34d190eff74",
      "tree": "512e018114ea506659fac73d838bfca0fb97a5a4",
      "parents": [
        "ffd1f4ed5bddccf2277e3d8525bcedf1983319f8"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Aug 10 11:41:41 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Aug 11 00:29:47 2010 -0400"
      },
      "message": "vfs: show unreachable paths in getcwd and proc\n\nPrepend \"(unreachable)\" to path strings if the path is not reachable\nfrom the current root.\n\nTwo places updated are\n - the return string from getcwd()\n - and symlinks under /proc/$PID.\n\nOther uses of d_path() are left unchanged (we know that some old\nsoftware crashes if /proc/mounts is changed).\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ffd1f4ed5bddccf2277e3d8525bcedf1983319f8",
      "tree": "2a1b08b204820ba0e9ecb7397ee7a08daff01594",
      "parents": [
        "f2eb6575d5beba1e98d400463007d77555d1fc35"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Aug 10 11:41:40 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Aug 11 00:28:21 2010 -0400"
      },
      "message": "vfs: only add \" (deleted)\" where necessary\n\n__d_path() has 4 callers:\n\n  d_path()\n  sys_getcwd()\n  seq_path_root()\n  tomoyo_realpath_from_path2()\n\nOf these the only one which needs the \" (deleted)\" ending is d_path().\n\nsys_getcwd() checks for existence before calling __d_path().\n\nseq_path_root() is used to show the mountpoint path in\n/proc/PID/mountinfo, which is always a positive.\n\nAnd tomoyo doesn\u0027t want the deleted ending.\n\nCreate a helper \"path_with_deleted()\" as subsequent patches will need\nthis in multiple places.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    }
  ],
  "next": "f2eb6575d5beba1e98d400463007d77555d1fc35"
}
