)]}'
{
  "log": [
    {
      "commit": "c2452f32786159ed85f0e4b21fec09258f822fc8",
      "tree": "50d93df47f4547a5699c87a608e85596e4c6165f",
      "parents": [
        "e2b689d82c0394e5239a3557a217f19e2f47f1be"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Mon Dec 01 09:33:43 2008 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 31 18:07:38 2008 -0500"
      },
      "message": "shrink struct dentry\n\nstruct dentry is one of the most critical structures in the kernel. So it\u0027s\nsad to see it going neglected.\n\nWith CONFIG_PROFILING turned on (which is probably the common case at least\nfor distros and kernel developers), sizeof(struct dcache) \u003d\u003d 208 here\n(64-bit). This gives 19 objects per slab.\n\nI packed d_mounted into a hole, and took another 4 bytes off the inline\nname length to take the padding out from the end of the structure. This\nshinks it to 200 bytes. I could have gone the other way and increased the\nlength to 40, but I\u0027m aiming for a magic number, read on...\n\nI then got rid of the d_cookie pointer. This shrinks it to 192 bytes. Rant:\nwhy was this ever a good idea? The cookie system should increase its hash\nsize or use a tree or something if lookups are a problem. Also the \"fast\ndcookie lookups\" in oprofile should be moved into the dcookie code -- how\ncan oprofile possibly care about the dcookie_mutex? It gets dropped after\nget_dcookie() returns so it can\u0027t be providing any sort of protection.\n\nAt 192 bytes, 21 objects fit into a 4K page, saving about 3MB on my system\nwith ~140 000 entries allocated. 192 is also a multiple of 64, so we get\nnice cacheline alignment on 64 and 32 byte line systems -- any given dentry\nwill now require 3 cachelines to touch all fields wheras previously it\nwould require 4.\n\nI know the inline name size was chosen quite carefully, however with the\nreduction in cacheline footprint, it should actually be just about as fast\nto do a name lookup for a 36 character name as it was before the patch (and\nfaster for other sizes). The memory footprint savings for names which are\n\u003c\u003d 32 or \u003e 36 bytes long should more than make up for the memory cost for\n33-36 byte names.\n\nPerformance is a feature...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "e2761a1167633ed943fea29002f990194923d060",
      "tree": "e91816e85c7721fcff72e5f84336b1dde9d1ac17",
      "parents": [
        "871c0067d53ba2dc35897c7da1da675bf4c70511"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Thu Oct 16 07:50:28 2008 +0900"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Oct 23 05:13:16 2008 -0400"
      },
      "message": "[PATCH vfs-2.6 2/6] vfs: add d_ancestor()\n\nThis adds d_ancestor() instead of d_isparent(), then use it.\n\nIf new_dentry \u003d\u003d old_dentry, is_subdir() returns 1, looks strange.\n\"new_dentry \u003d\u003d old_dentry\" is not subdir obviously. But I\u0027m not\nchecking callers for now, so this keeps current behavior.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "9308a6128d9074e348d9f9b5822546fe12a794a9",
      "tree": "3b67f8b6381162b9ff0800eee8722081ef9ed039",
      "parents": [
        "440037287c5ebb07033ab927ca16bb68c291d309"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Aug 11 15:49:12 2008 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Oct 23 05:13:02 2008 -0400"
      },
      "message": "[PATCH] kill d_alloc_anon\n\nRemove d_alloc_anon now that no users are left.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4ea3ada2955e4519befa98ff55dd62d6dfbd1705",
      "tree": "b473278d0df8d869d183fbc0e4a1a07585de240a",
      "parents": [
        "3a8cff4f026c0b98bee6291eb28d4df42feb76dc"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Aug 11 15:48:57 2008 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Oct 23 05:13:00 2008 -0400"
      },
      "message": "[PATCH] new helper: d_obtain_alias\n\nThe calling conventions of d_alloc_anon are rather unfortunate for all\nusers, and it\u0027s name is not very descriptive either.\n\nAdd d_obtain_alias as a new exported helper that drops the inode\nreference in the failure case, too and allows to pass-through NULL\npointers and inodes to allow for tail-calls in the export operations.\n\nIncidentally this helper already existed as a private function in\nlibfs.c as exportfs_d_alloc so kill that one and switch the callers\nto d_obtain_alias.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "e45b590b976465c258f3e2a6cc84573fc19e16d3",
      "tree": "54b795a1acd985b9bcc5adbe057706209a2612d3",
      "parents": [
        "2d8a10cd1760e7ecc07a21e409485947c68a3291"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Thu Aug 07 23:49:07 2008 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 25 01:18:05 2008 -0400"
      },
      "message": "[PATCH] change d_add_ci argument ordering\n\nAs pointed out during review d_add_ci argument order should match d_add,\nso switch the dentry and inode arguments.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9403540c0653122ca34884a180439ddbfcbcb524",
      "tree": "40b5fb192900c61a1c91be6ae8ea7432b61f18aa",
      "parents": [
        "6a178100abf01282eb697ab62b6086b2886dfc00"
      ],
      "author": {
        "name": "Barry Naujok",
        "email": "bnaujok@sgi.com",
        "time": "Wed May 21 16:50:46 2008 +1000"
      },
      "committer": {
        "name": "Niv Sardi",
        "email": "xaiki@debian.org",
        "time": "Mon Jul 28 16:58:39 2008 +1000"
      },
      "message": "dcache: Add case-insensitive support d_ci_add() routine\n\nThis add a dcache entry to the dcache for lookup, but changing the name\nthat is associated with the entry rather than the one passed in to the\nlookup routine.\n\nFirst, it sees if the case-exact match already exists in the dcache and\nuses it if one exists. Otherwise, it allocates a new node with the new\nname and splices it into the dcache.\n\nOriginal code from ntfs_lookup in fs/ntfs/namei.c by Anton Altaparmakov.\n\nSigned-off-by: Barry Naujok \u003cbnaujok@sgi.com\u003e\nSigned-off-by: Anton Altaparmakov \u003caia21@cantab.net\u003e\nAcked-by: Christoph Hellwig \u003chch@infradead.org\u003e\n"
    },
    {
      "commit": "0c81b2a1448bc6a2a9b2d6469fb0669fb4b25e5b",
      "tree": "6f82579cae6d6e39fa9f837a3c349ded51e19d14",
      "parents": [
        "0729fbf3bc70870370b4f43d652f05a468dc68b8",
        "70ff05554f91a1edda1f11684da1dbde09e2feea"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Jul 11 10:46:50 2008 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Jul 11 10:46:50 2008 +0200"
      },
      "message": "Merge branch \u0027linus\u0027 into core/rcu\n\nConflicts:\n\n\tinclude/linux/rculist.h\n\tkernel/rcupreempt.c\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "20d4fdc1a788e4ca0aaf2422772ba668e7e10839",
      "tree": "cd75fce48616b364ddb968d2085205fbc9f4aca1",
      "parents": [
        "c8e7f449b225ee6c87454ac069f0a041035c5140"
      ],
      "author": {
        "name": "Jan Engelhardt",
        "email": "jengelh@medozas.de",
        "time": "Mon Jun 09 16:40:36 2008 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 23 11:52:30 2008 -0400"
      },
      "message": "[patch 2/4] fs: make struct file arg to d_path const\n\nSigned-off-by: Jan Engelhardt \u003cjengelh@medozas.de\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "82524746c27fa418c250a56dd7606b9d3fc79826",
      "tree": "1801230b8fc2e436e722ac6f54fc53f1c112c310",
      "parents": [
        "32300751b4079cb5688453baa94711579d4285d5"
      ],
      "author": {
        "name": "Franck Bui-Huu",
        "email": "fbuihuu@gmail.com",
        "time": "Mon May 12 21:21:05 2008 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon May 19 10:01:37 2008 +0200"
      },
      "message": "rcu: split list.h and move rcu-protected lists into rculist.h\n\nMove rcu-protected lists from list.h into a new header file rculist.h.\n\nThis is done because list are a very used primitive structure all over the\nkernel and it\u0027s currently impossible to include other header files in this\nlist.h without creating some circular dependencies.\n\nFor example, list.h implements rcu-protected list and uses rcu_dereference()\nwithout including rcupdate.h.  It actually compiles because users of\nrcu_dereference() are macros.  Others RCU functions could be used too but\naren\u0027t probably because of this.\n\nTherefore this patch creates rculist.h which includes rcupdates without to\nmany changes/troubles.\n\nSigned-off-by: Franck Bui-Huu \u003cfbuihuu@gmail.com\u003e\nAcked-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nAcked-by: Josh Triplett \u003cjosh@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "735643ee6cc5249bfac07fcad0946a5e7aff4423",
      "tree": "e725df246f4a3cf88b6b42a28d859ab969acf81c",
      "parents": [
        "71cc2c2152170b8166f59abb0604dc62073aeb92"
      ],
      "author": {
        "name": "Robert P. J. Day",
        "email": "rpjday@crashcourse.ca",
        "time": "Wed Apr 30 00:55:12 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 30 08:29:54 2008 -0700"
      },
      "message": "Remove \"#ifdef __KERNEL__\" checks from unexported headers\n\nRemove the \"#ifdef __KERNEL__\" tests from unexported header files in\nlinux/include whose entire contents are wrapped in that preprocessor\ntest.\n\nSigned-off-by: Robert P. J. Day \u003crpjday@crashcourse.ca\u003e\nCc: David Woodhouse \u003cdwmw2@infradead.org\u003e\nCc: Sam Ravnborg \u003csam@ravnborg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9d1bc60138977d9c79471b344a64f2df13b2ccef",
      "tree": "84ed2e1920a1a88ae84515bd9d90240faed5805c",
      "parents": [
        "6092d048183b76bfa3f84b32f8158dd8d10bd811"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Thu Mar 27 13:06:21 2008 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Apr 23 00:04:38 2008 -0400"
      },
      "message": "[patch 2/7] vfs: mountinfo: add seq_file_root()\n\nAdd a new function:\n\n  seq_file_root()\n\nThis is similar to seq_path(), but calculates the path relative to the\ngiven root, instead of current-\u003efs-\u003eroot.  If the path was unreachable\nfrom root, then modify the root parameter to reflect this.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6092d048183b76bfa3f84b32f8158dd8d10bd811",
      "tree": "2d38af32961eb52b36daca2f29ce69e80f6e7283",
      "parents": [
        "934b25c597c0e98304a7eaec198a87e4633a42bb"
      ],
      "author": {
        "name": "Ram Pai",
        "email": "linuxram@us.ibm.com",
        "time": "Thu Mar 27 13:06:20 2008 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Apr 23 00:04:32 2008 -0400"
      },
      "message": "[patch 1/7] vfs: mountinfo: add dentry_path()\n\n[mszeredi@suse.cz] split big patch into managable chunks\n\nAdd the following functions:\n\n  dentry_path()\n  seq_dentry()\n\nThese are similar to d_path() and seq_path().  But instead of\ncalculating the path within a mount namespace, they calculate the path\nfrom the root of the filesystem to a given dentry, ignoring mounts\ncompletely.\n\nSigned-off-by: Ram Pai \u003clinuxram@us.ibm.com\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6d59e7f582ef1c1988542d0fc3b36d0087b757ce",
      "tree": "2e6e2e7d42af8f89f7b87aeaf5261d4cfbd9b625",
      "parents": [
        "807501475fce0ebe68baedf87f202c3e4ee0d12c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Mar 22 15:48:17 2008 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Apr 21 23:11:01 2008 -0400"
      },
      "message": "[PATCH] move a bunch of declarations to fs/internal.h\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "cf28b4863f9ee8f122e8ff3ac0d403e07ba9c6d9",
      "tree": "65c91f6911b34c32e517938289621ce0e7baeaf3",
      "parents": [
        "c32c2f63a9d6c953aaf168c0b2551da9734f76d2"
      ],
      "author": {
        "name": "Jan Blunck",
        "email": "jblunck@suse.de",
        "time": "Thu Feb 14 19:38:44 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Feb 14 21:17:09 2008 -0800"
      },
      "message": "d_path: Make d_path() use a struct path\n\nd_path() is used on a \u003cdentry,vfsmount\u003e pair.  Lets use a struct path to\nreflect this.\n\n[akpm@linux-foundation.org: fix build in mm/memory.c]\nSigned-off-by: Jan Blunck \u003cjblunck@suse.de\u003e\nAcked-by: Bryan Wu \u003cbryan.wu@analog.com\u003e\nAcked-by: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: \"J. Bruce Fields\" \u003cbfields@fieldses.org\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Michael Halcrow \u003cmhalcrow@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "74c3cbe33bc077ac1159cadfea608b501e100344",
      "tree": "4c4023caa4e15d19780255fa5880df3d36eb292c",
      "parents": [
        "455434d450a358ac5bcf3fc58f8913d13c544622"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jul 22 08:04:18 2007 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Oct 21 02:37:45 2007 -0400"
      },
      "message": "[PATCH] audit: watching subtrees\n\nNew kind of audit rule predicates: \"object is visible in given subtree\".\nThe part that can be sanely implemented, that is.  Limitations:\n\t* if you have hardlink from outside of tree, you\u0027d better watch\nit too (or just watch the object itself, obviously)\n\t* if you mount something under a watched tree, tell audit\nthat new chunk should be added to watched subtrees\n\t* if you umount something in a watched tree and it\u0027s still mounted\nelsewhere, you will get matches on events happening there.  New command\ntells audit to recalculate the trees, trimming such sources of false\npositives.\n\nNote that it\u0027s _not_ about path - if something mounted in several places\n(multiple mount, bindings, different namespaces, etc.), the match does\n_not_ depend on which one we are using for access.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c23fbb6bcb3eb9cdf39a103edadf57bde8ce309c",
      "tree": "d79ab2278774de2c1a8061aa948ed068902e87b4",
      "parents": [
        "2793274298c4423d79701e9a8190f2940bf3c785"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "dada1@cosmosbay.com",
        "time": "Tue May 08 00:26:18 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue May 08 11:15:03 2007 -0700"
      },
      "message": "VFS: delay the dentry name generation on sockets and pipes\n\n1) Introduces a new method in \u0027struct dentry_operations\u0027.  This method\n   called d_dname() might be called from d_path() to build a pathname for\n   special filesystems.  It is called without locks.\n\n   Future patches (if we succeed in having one common dentry for all\n   pipes/sockets) may need to change prototype of this method, but we now\n   use : char *d_dname(struct dentry *dentry, char *buffer, int buflen);\n\n2) Adds a dynamic_dname() helper function that eases d_dname() implementations\n\n3) Defines d_dname method for sockets : No more sprintf() at socket\n   creation.  This is delayed up to the moment someone does an access to\n   /proc/pid/fd/...\n\n4) Defines d_dname method for pipes : No more sprintf() at pipe\n   creation.  This is delayed up to the moment someone does an access to\n   /proc/pid/fd/...\n\nA benchmark consisting of 1.000.000 calls to pipe()/close()/close() gives a\n*nice* speedup on my Pentium(M) 1.6 Ghz :\n\n3.090 s instead of 3.450 s\n\nSigned-off-by: Eric Dumazet \u003cdada1@cosmosbay.com\u003e\nAcked-by: Christoph Hellwig \u003chch@infradead.org\u003e\nAcked-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c636ebdb186bf37f98d3839f69293597723edb36",
      "tree": "db1d54d355cd8030bf5d1645ce6bac8842f32690",
      "parents": [
        "6ce315234aefcbc599dea390c15672156ebf9e7b"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Oct 11 01:22:19 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Oct 11 11:14:25 2006 -0700"
      },
      "message": "[PATCH] VFS: Destroy the dentries contributed by a superblock on unmounting\n\nThe attached patch destroys all the dentries attached to a superblock in one go\nby:\n\n (1) Destroying the tree rooted at s_root.\n\n (2) Destroying every entry in the anon list, one at a time.\n\n (3) Each entry in the anon list has its subtree consumed from the leaves\n     inwards.\n\nThis reduces the amount of work generic_shutdown_super() does, and avoids\niterating through the dentry_unused list.\n\nNote that locking is almost entirely absent in the shrink_dcache_for_umount*()\nfunctions added by this patch.  This is because:\n\n (1) at the point the filesystem calls generic_shutdown_super(), it is not\n     permitted to further touch the superblock\u0027s set of dentries, and nor may\n     it remove aliases from inodes;\n\n (2) the dcache memory shrinker now skips dentries that are being unmounted;\n     and\n\n (3) the superblock no longer has any external references through which the VFS\n     can reach it.\n\nGiven these points, the only locking we need to do is when we remove dentries\nfrom the unused list and the name hashes, which we do a directory\u0027s worth at a\ntime.\n\nWe also don\u0027t need to guard against reference counts going to zero unexpectedly\nand removing bits of the tree we\u0027re working on as nothing else can call dput().\n\nA cut down version of dentry_iput() has been folded into\nshrink_dcache_for_umount_subtree() function.  Apart from not needing to unlock\nthings, it also doesn\u0027t need to check for inotify watches.\n\nIn this version of the patch, the complaint about a dentry still being in use\nhas been expanded from a single BUG_ON() and now gives much more information.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: NeilBrown \u003cneilb@suse.de\u003e\nAcked-by: Ian Kent \u003craven@themaw.net\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "770bfad846ab6628444428467b11fa6773ae9ea1",
      "tree": "5fd803319fe718367dca081b23abd36bfc85f78a",
      "parents": [
        "979df72e6f963b42ee484f2eca049c3344da0ba7"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Aug 22 20:06:07 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 22 23:24:30 2006 -0400"
      },
      "message": "NFS: Add dentry materialisation op\n\nThe attached patch adds a new directory cache management function that prepares\na disconnected anonymous function to be connected into the dentry tree. The\nanonymous dentry is transferred the name and parentage from another dentry.\n\nThe following changes were made in [try #2]:\n\n (*) d_materialise_dentry() now switches the parentage of the two nodes around\n     correctly when one or other of them is self-referential.\n\nThe following changes were made in [try #7]:\n\n (*) d_instantiate_unique() has had the interior part split out as function\n     __d_instantiate_unique(). Callers of this latter function must be holding\n     the appropriate locks.\n\n (*) _d_rehash() has been added as a wrapper around __d_rehash() to call it\n     with the most obvious hash list (the one from the name). d_rehash() now\n     calls _d_rehash().\n\n (*) d_materialise_dentry() is now __d_materialise_dentry() and is static.\n\n (*) d_materialise_unique() added to perform the combination of d_find_alias(),\n     d_materialise_dentry() and d_add_unique() that the NFS client was doing\n     twice, all within a single dcache_lock critical section. This reduces the\n     number of times two different spinlocks were being accessed.\n\nThe following further changes were made:\n\n (*) Add the dentries onto their parents d_subdirs lists.\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "a90b9c05df3c1e58eaedc28795d0f5abd896c098",
      "tree": "bc9c1233bad94175abca731daa9120151e0d9c7e",
      "parents": [
        "13e83599d282ddfd544600df9db5ab343ac4662f"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Jul 03 00:25:04 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Jul 03 15:27:06 2006 -0700"
      },
      "message": "[PATCH] lockdep: annotate dcache\n\nTeach special (recursive) locking code to the lock validator.  Has no effect\non non-lockdep kernels.\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "454e2398be9b9fa30433fccc548db34d19aa9958",
      "tree": "1f61cb0c3716a33b661cfc8977e9beeb480a322c",
      "parents": [
        "1ad5544098a69d7dc1fa508cbb17e13a7a952fd8"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Jun 23 02:02:57 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 23 07:42:45 2006 -0700"
      },
      "message": "[PATCH] VFS: Permit filesystem to override root dentry on mount\n\nExtend the get_sb() filesystem operation to take an extra argument that\npermits the VFS to pass in the target vfsmount that defines the mountpoint.\n\nThe filesystem is then required to manually set the superblock and root dentry\npointers.  For most filesystems, this should be done with simple_set_mnt()\nwhich will set the superblock pointer and then set the root dentry to the\nsuperblock\u0027s s_root (as per the old default behaviour).\n\nThe get_sb() op now returns an integer as there\u0027s now no need to return the\nsuperblock pointer.\n\nThis patch permits a superblock to be implicitly shared amongst several mount\npoints, such as can be done with NFS to avoid potential inode aliasing.  In\nsuch a case, simple_set_mnt() would not be called, and instead the mnt_root\nand mnt_sb would be set directly.\n\nThe patch also makes the following changes:\n\n (*) the get_sb_*() convenience functions in the core kernel now take a vfsmount\n     pointer argument and return an integer, so most filesystems have to change\n     very little.\n\n (*) If one of the convenience function is not used, then get_sb() should\n     normally call simple_set_mnt() to instantiate the vfsmount. This will\n     always return 0, and so can be tail-called from get_sb().\n\n (*) generic_shutdown_super() now calls shrink_dcache_sb() to clean up the\n     dcache upon superblock destruction rather than shrink_dcache_anon().\n\n     This is required because the superblock may now have multiple trees that\n     aren\u0027t actually bound to s_root, but that still need to be cleaned up. The\n     currently called functions assume that the whole tree is rooted at s_root,\n     and that anonymous dentries are not the roots of trees which results in\n     dentries being left unculled.\n\n     However, with the way NFS superblock sharing are currently set to be\n     implemented, these assumptions are violated: the root of the filesystem is\n     simply a dummy dentry and inode (the real inode for \u0027/\u0027 may well be\n     inaccessible), and all the vfsmounts are rooted on anonymous[*] dentries\n     with child trees.\n\n     [*] Anonymous until discovered from another tree.\n\n (*) The documentation has been adjusted, including the additional bit of\n     changing ext2_* into foo_* in the documentation.\n\n[akpm@osdl.org: convert ipath_fs, do other stuff]\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Nathan Scott \u003cnathans@sgi.com\u003e\nCc: Roland Dreier \u003crolandd@cisco.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "0feae5c47aabdde59cbbec32d150e17102de37f0",
      "tree": "244f742d943a0516921180b840419fdc329075f0",
      "parents": [
        "de047c1bcd7f7bcfbdc29eb5b439fb332594da3f"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jun 22 14:47:28 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Thu Jun 22 15:05:57 2006 -0700"
      },
      "message": "[PATCH] Fix dcache race during umount\n\nThe race is that the shrink_dcache_memory shrinker could get called while a\nfilesystem is being unmounted, and could try to prune a dentry belonging to\nthat filesystem.\n\nIf it does, then it will call in to iput on the inode while the dentry is\nno longer able to be found by the umounting process.  If iput takes a\nwhile, generic_shutdown_super could get all the way though\nshrink_dcache_parent and shrink_dcache_anon and invalidate_inodes without\never waiting on this particular inode.\n\nEventually the superblock gets freed anyway and if the iput tried to touch\nit (which some filesystems certainly do), it will lose.  The promised\n\"Self-destruct in 5 seconds\" doesn\u0027t lead to a nice day.\n\nThe race is closed by holding s_umount while calling prune_one_dentry on\nsomeone else\u0027s dentry.  As a down_read_trylock is used,\nshrink_dcache_memory will no longer try to prune the dentry of a filesystem\nthat is being unmounted, and unmount will not be able to start until any\nsuch active prune_one_dentry completes.\n\nThis requires that prune_dcache *knows* which filesystem (if any) it is\ndoing the prune on behalf of so that it can be careful of other\nfilesystems.  shrink_dcache_memory isn\u0027t called it on behalf of any\nfilesystem, and so is careful of everything.\n\nshrink_dcache_anon is now passed a super_block rather than the s_anon list\nout of the superblock, so it can get the s_anon list itself, and can pass\nthe superblock down to prune_dcache.\n\nIf prune_dcache finds a dentry that it cannot free, it leaves it where it\nis (at the tail of the list) and exits, on the assumption that some other\nthread will be removing that dentry soon.  To try to make sure that some\nwork gets done, a limited number of dnetries which are untouchable are\nskipped over while choosing the dentry to work on.\n\nI believe this race was first found by Kirill Korotaev.\n\nCc: Jan Blunck \u003cjblunck@suse.de\u003e\nAcked-by: Kirill Korotaev \u003cdev@openvz.org\u003e\nCc: Olaf Hering \u003colh@suse.de\u003e\nAcked-by: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nAcked-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "3e7e241f8c5c87cc3685364feface081c9fa3648",
      "tree": "43ea46cfec4da31a505e93875feeac945bf906ce",
      "parents": [
        "92476d7fc0326a409ab1d3864a04093a6be9aca7"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Fri Mar 31 02:31:43 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Mar 31 12:19:00 2006 -0800"
      },
      "message": "[PATCH] dcache: Add helper d_hash_and_lookup\n\nIt is very common to hash a dentry and then to call lookup.  If we take fs\nspecific hash functions into account the full hash logic can get ugly.\nFurther full_name_hash as an inline function is almost 100 bytes on x86 so\nhaving a non-inline choice in some cases can measurably decrease code size.\n\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "c32ccd87bfd1414b0aabfcd8dbc7539ad23bcbaa",
      "tree": "612dc637976cbe36e8b72924a1f7bd76e75463fd",
      "parents": [
        "bf36b9011e3c5b2739f9da2f6de8a6fa3edded32"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "nickpiggin@yahoo.com.au",
        "time": "Sat Mar 25 03:07:09 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Mar 25 08:22:53 2006 -0800"
      },
      "message": "[PATCH] inotify: lock avoidance with parent watch status in dentry\n\nPrevious inotify work avoidance is good when inotify is completely unused,\nbut it breaks down if even a single watch is in place anywhere in the\nsystem.  Robin Holt notices that udev is one such culprit - it slows down a\n512-thread application on a 512 CPU system from 6 seconds to 22 minutes.\n\nSolve this by adding a flag in the dentry that tells inotify whether or not\nits parent inode has a watch on it.  Event queueing to parent will skip\ntaking locks if this flag is cleared.  Setting and clearing of this flag on\nall child dentries versus event delivery: this is no in terms of race\ncases, and that was shown to be equivalent to always performing the check.\n\nThe essential behaviour is that activity occuring _after_ a watch has been\nadded and _before_ it has been removed, will generate events.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Robert Love \u003crml@novell.com\u003e\nCc: John McCutchan \u003cttb@tentacle.dhs.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1b8623545b42c03eb92e51b28c84acf4b8ba00a3",
      "tree": "071045ad9c60d2697292c523c77322a70a248fb9",
      "parents": [
        "92118c739df879497b8cc5a2eb3a9dc255f01b20"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Dec 15 01:07:03 2005 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Feb 07 20:56:35 2006 -0500"
      },
      "message": "[PATCH] remove bogus asm/bug.h includes.\n\nA bunch of asm/bug.h includes are both not needed (since it will get\npulled anyway) and bogus (since they are done too early).  Removed.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "47ba87e0b1269698801310bfd1716b0538282405",
      "tree": "be429e822401e9f1a213b008b5e6e2f538754888",
      "parents": [
        "09114eb8c53d2d3b2ff9523e011cb68b2e245dce"
      ],
      "author": {
        "name": "Marcelo Tosatti",
        "email": "marcelo.tosatti@cyclades.com",
        "time": "Fri Feb 03 03:04:06 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Feb 03 08:32:04 2006 -0800"
      },
      "message": "[PATCH] make \"struct d_cookie\" depend on CONFIG_PROFILING\n\nShrinks \"struct dentry\" from 128 bytes to 124 on x86, allowing 31 objects\nper slab instead of 30.\n\nCc: John Levon \u003clevon@movementarian.org\u003e\nCc: Philippe Elie \u003cphil.el@wanadoo.fr\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "5160ee6fc891a9ca114be0e90fa6655647bb64b2",
      "tree": "35d3740a777935582af1b78238f20d2c2971ed55",
      "parents": [
        "21b6bf143d05d77c350d9c6764ae090a877b66ea"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "dada1@cosmosbay.com",
        "time": "Sun Jan 08 01:03:32 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:58 2006 -0800"
      },
      "message": "[PATCH] shrink dentry struct\n\nSome long time ago, dentry struct was carefully tuned so that on 32 bits\nUP, sizeof(struct dentry) was exactly 128, ie a power of 2, and a multiple\nof memory cache lines.\n\nThen RCU was added and dentry struct enlarged by two pointers, with nice\nresults for SMP, but not so good on UP, because breaking the above tuning\n(128 + 8 \u003d 136 bytes)\n\nThis patch reverts this unwanted side effect, by using an union (d_u),\nwhere d_rcu and d_child are placed so that these two fields can share their\nmemory needs.\n\nAt the time d_free() is called (and d_rcu is really used), d_child is known\nto be empty and not touched by the dentry freeing.\n\nLockless lookups only access d_name, d_parent, d_lock, d_op, d_flags (so\nthe previous content of d_child is not needed if said dentry was unhashed\nbut still accessed by a CPU because of RCU constraints)\n\nAs dentry cache easily contains millions of entries, a size reduction is\nworth the extra complexity of the ugly C union.\n\nSigned-off-by: Eric Dumazet \u003cdada1@cosmosbay.com\u003e\nCc: Dipankar Sarma \u003cdipankar@in.ibm.com\u003e\nCc: Maneesh Soni \u003cmaneesh@in.ibm.com\u003e\nCc: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nCc: \"Paul E. McKenney\" \u003cpaulmck@us.ibm.com\u003e\nCc: Ian Kent \u003craven@themaw.net\u003e\nCc: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Al Viro \u003cviro@ftp.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nCc: Neil Brown \u003cneilb@cse.unsw.edu.au\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nCc: Stephen Smalley \u003csds@epoch.ncsc.mil\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a05964f3917c7c55368c229d7985f8e7c9977e97",
      "tree": "7ec25550267ef050572c00ba2f37d6a4ff9c469e",
      "parents": [
        "2144440327fa01b2f3f65e355120a78211685702"
      ],
      "author": {
        "name": "Ram Pai",
        "email": "linuxram@us.ibm.com",
        "time": "Mon Nov 07 17:20:17 2005 -0500"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Nov 07 18:18:11 2005 -0800"
      },
      "message": "[PATCH] shared mounts handling: umount\n\nAn unmount of a mount creates a umount event on the parent.  If the\nparent is a shared mount, it gets propagated to all mounts in the peer\ngroup.\n\nSigned-off-by: Ram Pai \u003clinuxram@us.ibm.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "3f4bb1f4199b7dc0c958447b1e4898980013b884",
      "tree": "3d8aacfc6b7bbf7b2d224ae10ca693c55c64739e",
      "parents": [
        "0811bab24ff1eecab38110eda7ea7847db95c64e"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "dada1@cosmosbay.com",
        "time": "Tue Sep 06 15:18:16 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 07 16:57:41 2005 -0700"
      },
      "message": "[PATCH] struct dentry: place d_hash close to d_parent and d_name to speedup lookups\n\ndentry cache uses sophisticated RCU technology (and prefetching if\navailable) but touches 2 cache lines per dentry during hlist lookup.\n\nThis patch moves d_hash in the same cache line than d_parent and d_name\nfields so that :\n\n1) One cache line is needed instead of two.\n\n2) the hlist_for_each_rcu() prefetching has a chance to bring all the\n   needed data in advance, not only the part that includes d_hash.next.\n\nI also changed one old comment that was wrong for 64bits.\n\nA further optimisation would be to separate dentry in two parts, one that\nis mostly read, and one writen (d_count/d_lock) to avoid false sharing on\nSMP/NUMA but this would need different field placement depending on 32bits\nor 64bits platform.\n\nSigned-off-by: Eric Dumazet \u003cdada1@cosmosbay.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
      "tree": "0bba044c4ce775e45a88a51686b5d9f90697ea9d",
      "parents": [],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "message": "Linux-2.6.12-rc2\n\nInitial git repository build. I\u0027m not bothering with the full history,\neven though we have it. We can create a separate \"historical\" git\narchive of that later if we want to, and in the meantime it\u0027s about\n3.2GB when imported into git - space that would just make the early\ngit days unnecessarily complicated, when we don\u0027t have a lot of good\ninfrastructure for it.\n\nLet it rip!\n"
    }
  ]
}
