)]}'
{
  "log": [
    {
      "commit": "b1e75df45a3d8a490b8648e44632debc5eea04b1",
      "tree": "4ee3aaa516675ca9715d673c4399f1b517d4a690",
      "parents": [
        "15f9a3f3e199647fe0cac19302c5033cf031372d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 17 01:47:59 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 17 01:47:59 2011 -0500"
      },
      "message": "tidy up around finish_automount()\n\ndo_add_mount() and mnt_clear_expiry() are not needed outside of\nnamespace.c anymore, now that namei has finish_automount() to\nuse.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "19a167af7c97248ec646552ebc9140bc6aa3552a",
      "tree": "a521153c80fa6e40b2b4983c5bba21c2e96d1864",
      "parents": [
        "e78bf5e6cbe837daa6ab628a5f679548742994d3"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 17 01:35:23 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 17 01:35:23 2011 -0500"
      },
      "message": "Take the completion of automount into new helper\n\n... and shift it from namei.c to namespace.c\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f03c65993b98eeb909a4012ce7833c5857d74755",
      "tree": "a6dd5e353889b7fe4ab87c54170d09443d788fec",
      "parents": [
        "7b8a53fd815deb39542085897743fa0063f9fe06"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jan 14 22:30:21 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jan 16 13:47:07 2011 -0500"
      },
      "message": "sanitize vfsmount refcounting changes\n\nInstead of splitting refcount between (per-cpu) mnt_count\nand (SMP-only) mnt_longrefs, make all references contribute\nto mnt_count again and keep track of how many are longterm\nones.\n\nAccounting rules for longterm count:\n\t* 1 for each fs_struct.root.mnt\n\t* 1 for each fs_struct.pwd.mnt\n\t* 1 for having non-NULL -\u003emnt_ns\n\t* decrement to 0 happens only under vfsmount lock exclusive\n\nThat allows nice common case for mntput() - since we can\u0027t drop the\nfinal reference until after mnt_longterm has reached 0 due to the rules\nabove, mntput() can grab vfsmount lock shared and check mnt_longterm.\nIf it turns out to be non-zero (which is the common case), we know\nthat this is not the final mntput() and can just blindly decrement\npercpu mnt_count.  Otherwise we grab vfsmount lock exclusive and\ndo usual decrement-and-check of percpu mnt_count.\n\nFor fs_struct.c we have mnt_make_longterm() and mnt_make_shortterm();\nnamespace.c uses the latter in places where we don\u0027t already hold\nvfsmount lock exclusive and opencodes a few remaining spots where\nwe need to manipulate mnt_longterm.\n\nNote that we mostly revert the code outside of fs/namespace.c back\nto what we used to have; in particular, normal code doesn\u0027t need\nto care about two kinds of references, etc.  And we get to keep\nthe optimization Nick\u0027s variant had bought us...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ea5b778a8b98c85a87d66bf844904f9c3802b869",
      "tree": "baa56cbe1a907d76341f2cad53e16569cc1d3288",
      "parents": [
        "ab90911ff90cdab59b31c045c3f0ae480d14f29d"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Jan 14 19:10:03 2011 +0000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jan 15 20:07:48 2011 -0500"
      },
      "message": "Unexport do_add_mount() and add in follow_automount(), not -\u003ed_automount()\n\nUnexport do_add_mount() and make -\u003ed_automount() return the vfsmount to be\nadded rather than calling do_add_mount() itself.  follow_automount() will then\ndo the addition.\n\nThis slightly complicates things as -\u003ed_automount() normally wants to add the\nnew vfsmount to an expiration list and start an expiration timer.  The problem\nwith that is that the vfsmount will be deleted if it has a refcount of 1 and\nthe timer will not repeat if the expiration list is empty.\n\nTo this end, we require the vfsmount to be returned from d_automount() with a\nrefcount of (at least) 2.  One of these refs will be dropped unconditionally.\nIn addition, follow_automount() must get a 3rd ref around the call to\ndo_add_mount() lest it eat a ref and return an error, leaving the mount we\nhave open to being expired as we would otherwise have only 1 ref on it.\n\nd_automount() should also add the the vfsmount to the expiration list (by\ncalling mnt_set_expiry()) and start the expiration timer before returning, if\nthis mechanism is to be used.  The vfsmount will be unlinked from the\nexpiration list by follow_automount() if do_add_mount() fails.\n\nThis patch also fixes the call to do_add_mount() for AFS to propagate the mount\nflags from the parent vfsmount.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b3e19d924b6eaf2ca7d22cba99a517c5171007b6",
      "tree": "8c1fa4074114a883a4e2de2f7d12eb29ed91bdf1",
      "parents": [
        "c6653a838b1b2738561aff0b8c0f62a9b714bdd9"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:11 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:33 2011 +1100"
      },
      "message": "fs: scale mntget/mntput\n\nThe problem that this patch aims to fix is vfsmount refcounting scalability.\nWe need to take a reference on the vfsmount for every successful path lookup,\nwhich often go to the same mount point.\n\nThe fundamental difficulty is that a \"simple\" reference count can never be made\nscalable, because any time a reference is dropped, we must check whether that\nwas the last reference. To do that requires communication with all other CPUs\nthat may have taken a reference count.\n\nWe can make refcounts more scalable in a couple of ways, involving keeping\ndistributed counters, and checking for the global-zero condition less\nfrequently.\n\n- check the global sum once every interval (this will delay zero detection\n  for some interval, so it\u0027s probably a showstopper for vfsmounts).\n\n- keep a local count and only taking the global sum when local reaches 0 (this\n  is difficult for vfsmounts, because we can\u0027t hold preempt off for the life of\n  a reference, so a counter would need to be per-thread or tied strongly to a\n  particular CPU which requires more locking).\n\n- keep a local difference of increments and decrements, which allows us to sum\n  the total difference and hence find the refcount when summing all CPUs. Then,\n  keep a single integer \"long\" refcount for slow and long lasting references,\n  and only take the global sum of local counters when the long refcount is 0.\n\nThis last scheme is what I implemented here. Attached mounts and process root\nand working directory references are \"long\" references, and everything else is\na short reference.\n\nThis allows scalable vfsmount references during path walking over mounted\nsubtrees and unattached (lazy umounted) mounts with processes still running\nin them.\n\nThis results in one fewer atomic op in the fastpath: mntget is now just a\nper-CPU inc, rather than an atomic inc; and mntput just requires a spinlock\nand non-atomic decrement in the common case. However code is otherwise bigger\nand heavier, so single threaded performance is basically a wash.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "a4cdbd8bfb87ceff455aae85727077889b75001b",
      "tree": "12b908f434633b86a90f6de821f2b6b7988ff1d5",
      "parents": [
        "31f43471e97eff7801251e2c3c8fc03219f85d87"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Oct 29 05:49:13 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Oct 29 05:49:13 2010 -0400"
      },
      "message": "braino in internal.h\n\nwrong return type...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "63997e98a3be68d7cec806d22bf9b02b2e1daabb",
      "tree": "acd366273dc459d6b34e7f67216c06eb56117a4a",
      "parents": [
        "9843b76aae80293f5b5a0e275360627508595ce5"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 20:49:35 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:27:18 2010 -0400"
      },
      "message": "split invalidate_inodes()\n\nPull removal of fsnotify marks into generic_shutdown_super().\nSplit umount-time work into a new function - evict_inodes().\nMake sure that invalidate_inodes() will be able to cope with\nI_FREEING once we change locking in iput().\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "cffbc8aa334f55c9ed42d25202eb3ebf3a97c195",
      "tree": "dab046695754e2cec1a7ab7a64b236e976d94360",
      "parents": [
        "be1a16a0ae29a7c90081a657b64aa51cb1a65a27"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Sat Oct 23 05:03:02 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:09 2010 -0400"
      },
      "message": "fs: Convert nr_inodes and nr_unused to per-cpu counters\n\nThe number of inodes allocated does not need to be tied to the\naddition or removal of an inode to/from a list. If we are not tied\nto a list lock, we could update the counters when inodes are\ninitialised or destroyed, but to do that we need to convert the\ncounters to be per-cpu (i.e. independent of a lock). This means that\nwe have the freedom to change the list/locking implementation\nwithout needing to care about the counters.\n\nBased on a patch originally from Eric Dumazet.\n\n[AV: cleaned up a bit, fixed build breakage on weird configs\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a8dade34e3df581bc36ca2afe6e27055e178801c",
      "tree": "8c1598922eb17d5626f639a4c94256f25a8e6690",
      "parents": [
        "61ebdb4254e3ecb59022d2c730b57b04d0eeecc6"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Oct 24 11:13:10 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:23:32 2010 -0400"
      },
      "message": "unexport invalidate_inodes\n\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": "d996b62a8df1d935b01319bf8defb95b5709f7b8",
      "tree": "d81f8240da776336845a2063555d7bb4dce684bd",
      "parents": [
        "ee2ffa0dfdd2db19705f2ba1c6a4c0bfe8122dd8"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Wed Aug 18 04:37:36 2010 +1000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Aug 18 08:35:47 2010 -0400"
      },
      "message": "tty: fix fu_list abuse\n\ntty: fix fu_list abuse\n\ntty code abuses fu_list, which causes a bug in remount,ro handling.\n\nIf a tty device node is opened on a filesystem, then the last link to the inode\nremoved, the filesystem will be allowed to be remounted readonly. This is\nbecause fs_may_remount_ro does not find the 0 link tty inode on the file sb\nlist (because the tty code incorrectly removed it to use for its own purpose).\nThis can result in a filesystem with errors after it is marked \"clean\".\n\nTaking idea from Christoph\u0027s initial patch, allocate a tty private struct\nat file-\u003eprivate_data and put our required list fields in there, linking\nfile and tty. This makes tty nodes behave the same way as other device nodes\nand avoid meddling with the vfs, and avoids this bug.\n\nThe error handling is not trivial in the tty code, so for this bugfix, I take\nthe simple approach of using __GFP_NOFAIL and don\u0027t worry about memory errors.\nThis is not a problem because our allocator doesn\u0027t fail small allocs as a rule\nanyway. So proper error handling is left as an exercise for tty hackers.\n\n[ Arguably filesystem\u0027s device inode would ideally be divorced from the\ndriver\u0027s pseudo inode when it is opened, but in practice it\u0027s not clear whether\nthat will ever be worth implementing. ]\n\nCc: linux-kernel@vger.kernel.org\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Alan Cox \u003calan@lxorguk.ukuu.org.uk\u003e\nCc: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "35cf7ba0b46dc3582a01c3860b14bff122662aa3",
      "tree": "2b38e9333600f468f0c8371c657c02e3aa8ec43b",
      "parents": [
        "79893c17b45dec0d3c25bc22d28d9f319b14f573"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 22 21:13:53 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri May 21 18:31:16 2010 -0400"
      },
      "message": "Bury __put_super_and_need_restart()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "47cd813f2984569570021ce3d34cdf9cb20aa6a2",
      "tree": "555dd76338225e2fdbf4b8dca68d1744fd065270",
      "parents": [
        "37afdc7960ab493f827b5df9dc1b71b63b44331c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Feb 05 02:01:14 2010 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 03 14:07:59 2010 -0500"
      },
      "message": "Take vfsmount_lock to fs/internal.h\n\nno more users left outside of fs/*.c (and very few outside of\nfs/namespace.c, actually)\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "482928d59db668b8d82a48717f78986d8cea72e9",
      "tree": "6985c64474172ddfb67c737bc4a49e588c49d055",
      "parents": [
        "628ff7c1d8d8466a5ad8078bd0206a130f8b8a51"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Dec 19 10:10:39 2009 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Dec 22 12:27:34 2009 -0500"
      },
      "message": "Fix f_flags/f_mode in case of lookup_instantiate_filp() from open(pathname, 3)\n\nJust set f_flags when shoving struct file into nameidata; don\u0027t\npostpone that until __dentry_open().  do_filp_open() has correct\nvalue; lookup_instantiate_filp() doesn\u0027t - we lose the difference\nbetween O_RDWR and 3 by that point.\n\nWe still set .intent.open.flags, so no fs code needs to be changed.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "e81e3f4dca6c54116a24aec217d2c15c6f58ada5",
      "tree": "4cbaf8b4573a4f4dac2dafc2bebffe398a984b3d",
      "parents": [
        "b75b5086be6504132eadb22a907854e0bf52e365"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Fri Dec 04 15:47:36 2009 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 16 12:16:45 2009 -0500"
      },
      "message": "fs: move get_empty_filp() deffinition to internal.h\n\nAll users outside of fs/ of get_empty_filp() have been removed.  This patch\nmoves the definition from the include/ directory to internal.h so no new\nusers crop up and removes the EXPORT_SYMBOL.  I\u0027d love to see open intents\nstop using it too, but that\u0027s a problem for another day and a smarter\ndeveloper!\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nAcked-by: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "eca6f534e61919b28fb21aafbd1c2983deae75be",
      "tree": "b2c3f110a2defe6360004c39a074f3962ed0cc50",
      "parents": [
        "6d729e44a55547c009d7a87ea66bff21a8e0afea"
      ],
      "author": {
        "name": "Vegard Nossum",
        "email": "vegard.nossum@gmail.com",
        "time": "Fri Sep 18 13:05:45 2009 -0700"
      },
      "committer": {
        "name": "al",
        "email": "al@dizzy.pdmi.ras.ru",
        "time": "Thu Sep 24 08:40:15 2009 -0400"
      },
      "message": "fs: fix overflow in sys_mount() for in-kernel calls\n\nsys_mount() reads/copies a whole page for its \"type\" parameter.  When\ndo_mount_root() passes a kernel address that points to an object which is\nsmaller than a whole page, copy_mount_options() will happily go past this\nmemory object, possibly dereferencing \"wild\" pointers that could be in any\nstate (hence the kmemcheck warning, which shows that parts of the next\npage are not even allocated).\n\n(The likelihood of something going wrong here is pretty low -- first of\nall this only applies to kernel calls to sys_mount(), which are mostly\nfound in the boot code.  Secondly, I guess if the page was not mapped,\nexact_copy_from_user() _would_ in fact handle it correctly because of its\naccess_ok(), etc.  checks.)\n\nBut it is much nicer to avoid the dubious reads altogether, by stopping as\nsoon as we find a NUL byte.  Is there a good reason why we can\u0027t do\nsomething like this, using the already existing strndup_from_user()?\n\n[akpm@linux-foundation.org: make copy_mount_string() static]\n[AV: fix compat mount breakage, which involves undoing akpm\u0027s change above]\n\nReported-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Vegard Nossum \u003cvegard.nossum@gmail.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: al \u003cal@dizzy.pdmi.ras.ru\u003e\n"
    },
    {
      "commit": "62c6943b4b1e818aea60c11c5a68a50785b83119",
      "tree": "ecdbb1c63d5c37b42f7074e4c53beaaa850ada2b",
      "parents": [
        "443b94baaa16771e98b29ca7c24f1e305738ffca"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 07 03:12:29 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:07 2009 -0400"
      },
      "message": "Trim a bit of crap from fs.h\n\ndo_remount_sb() is fs/internal.h fodder, fsync_no_super() is long gone.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "5cee5815d1564bbbd505fea86f4550f1efdb5cd0",
      "tree": "ba99c38932dc534bf56f0d7dcfeeca153f50b007",
      "parents": [
        "429479f031322a0cc5c921ffb2321a51718dc875"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Apr 27 16:43:51 2009 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:03 2009 -0400"
      },
      "message": "vfs: Make sys_sync() use fsync_super() (version 4)\n\nIt is unnecessarily fragile to have two places (fsync_super() and do_sync())\ndoing data integrity sync of the filesystem. Alter __fsync_super() to\naccommodate needs of both callers and use it. So after this patch\n__fsync_super() is the only place where we gather all the calls needed to\nproperly send all data on a filesystem to disk.\n\nNice bonus is that we get a complete livelock avoidance and write_supers()\nis now only used for periodic writeback of superblocks.\n\nsync_blockdevs() introduced a couple of patches ago is gone now.\n\n[build fixes folded]\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "5a3e5cb8e08bd876e2542c1451c9a93dab1b0e39",
      "tree": "3b792d21246f1001adeca8b67df24ca71593dd3f",
      "parents": [
        "876a9f76abbcb775f8d21cbc99fa161f9e5937f1"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Apr 27 16:43:48 2009 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:03 2009 -0400"
      },
      "message": "vfs: Fix sys_sync() and fsync_super() reliability (version 4)\n\nSo far, do_sync() called:\n  sync_inodes(0);\n  sync_supers();\n  sync_filesystems(0);\n  sync_filesystems(1);\n  sync_inodes(1);\n\nThis ordering makes it kind of hard for filesystems as sync_inodes(0) need not\nsubmit all the IO (for example it skips inodes with I_SYNC set) so e.g. forcing\ntransaction to disk in -\u003esync_fs() is not really enough. Therefore sys_sync has\nnot been completely reliable on some filesystems (ext3, ext4, reiserfs, ocfs2\nand others are hit by this) when racing e.g. with background writeback. A\nsimilar problem hits also other filesystems (e.g. ext2) because of\nwrite_supers() being called before the sync_inodes(1).\n\nChange the ordering of calls in do_sync() - this requires a new function\nsync_blockdevs() to preserve the property that block devices are always synced\nafter write_super() / sync_fs() call.\n\nThe same issue is fixed in __fsync_super() function used on umount /\nremount read-only.\n\n[AV: build fixes]\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "864d7c4c068f23642efe91b33be3a84afe5f71e0",
      "tree": "512b253428958e95ca99274a664ace103f6bb10e",
      "parents": [
        "96029c4e09ccbd73a6d0ed2b29e80bf2586ad7ef"
      ],
      "author": {
        "name": "npiggin@suse.de",
        "email": "npiggin@suse.de",
        "time": "Sun Apr 26 20:25:56 2009 +1000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:02 2009 -0400"
      },
      "message": "fs: move mark_files_ro into file_table.c\n\nThis function walks the s_files lock, and operates primarily on the\nfiles in a superblock, so it better belongs here (eg. see also\nfs_may_remount_ro).\n\n[AV: ... and it shouldn\u0027t be static after that move]\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "498052bba55ecaff58db6a1436b0e25bfd75a7ff",
      "tree": "bd3644ac60737e3733995a203acebd70cfd1b21b",
      "parents": [
        "3e93cd671813e204c258f1e6c797959920cf7772"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 30 07:20:30 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 31 23:00:26 2009 -0400"
      },
      "message": "New locking/refcounting for fs_struct\n\n* all changes of current-\u003efs are done under task_lock and write_lock of\n  old fs-\u003elock\n* refcount is not atomic anymore (same protection)\n* its decrements are done when removing reference from current; at the\n  same time we decide whether to free it.\n* put_fs_struct() is gone\n* new field - -\u003ein_exec.  Set by check_unsafe_exec() if we are trying to do\n  execve() and only subthreads share fs_struct.  Cleared when finishing exec\n  (success and failure alike).  Makes CLONE_FS fail with -EAGAIN if set.\n* check_unsafe_exec() may fail with -EAGAIN if another execve() from subthread\n  is in progress.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "3e93cd671813e204c258f1e6c797959920cf7772",
      "tree": "a1e0b2d2da7d296cc1c53be9cd6efa5b94b01b5c",
      "parents": [
        "f8ef3ed2bebd2c4cb9ece92efa185d7aead8831a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 29 19:00:13 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 31 23:00:26 2009 -0400"
      },
      "message": "Take fs_struct handling to new file (fs/fs_struct.c)\n\nPure code move; two new helper functions for nfsd and daemonize\n(unshare_fs_struct() and daemonize_fs_struct() resp.; for now -\nthe same code as used to be in callers).  unshare_fs_struct()\nexported (for nfsd, as copy_fs_struct()/exit_fs() used to be),\ncopy_fs_struct() and exit_fs() don\u0027t need exports anymore.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "e426b64c412aaa3e9eb3e4b261dc5be0d5a83e78",
      "tree": "c1528139b34fef3e4595576266c64068098fe211",
      "parents": [
        "53e9309e01277ec99c38e84e0ca16921287cf470"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Sat Mar 28 23:20:19 2009 +0000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 28 17:30:00 2009 -0700"
      },
      "message": "fix setuid sometimes doesn\u0027t\n\nJoe Malicki reports that setuid sometimes doesn\u0027t: very rarely,\na setuid root program does not get root euid; and, by the way,\nthey have a health check running lsof every few minutes.\n\nRight, check_unsafe_exec() notes whether the files_struct is being\nshared by more threads than will get killed by the exec, and if so\nsets LSM_UNSAFE_SHARE to make bprm_set_creds() careful about euid.\nBut /proc/\u003cpid\u003e/fd and /proc/\u003cpid\u003e/fdinfo lookups make transient\nuse of get_files_struct(), which also raises that sharing count.\n\nThere\u0027s a rather simple fix for this: exec\u0027s check on files-\u003ecount\nhas been redundant ever since 2.6.1 made it unshare_files() (except\nwhile compat_do_execve() omitted to do so) - just remove that check.\n\n[Note to -stable: this patch will not apply before 2.6.29: earlier\nreleases should just remove the files-\u003ecount line from unsafe_exec().]\n\nReported-by: Joe Malicki \u003cjmalicki@metacarta.com\u003e\nNarrowed-down-by: Michael Itz \u003cmitz@metacarta.com\u003e\nTested-by: Joe Malicki \u003cjmalicki@metacarta.com\u003e\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0bf2f3aec5474da80a60e1baca629af87ecb67b6",
      "tree": "5c1a7733e24aaacbcf46e0434a11f033cfde43ca",
      "parents": [
        "6cec50838ed04a9833fb5549f698d3756bbe7e72"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Feb 06 11:45:46 2009 +0000"
      },
      "committer": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Sat Feb 07 08:46:18 2009 +1100"
      },
      "message": "CRED: Fix SUID exec regression\n\nThe patch:\n\n\tcommit a6f76f23d297f70e2a6b3ec607f7aeeea9e37e8d\n\tCRED: Make execve() take advantage of copy-on-write credentials\n\nmoved the place in which the \u0027safeness\u0027 of a SUID/SGID exec was performed to\nbefore de_thread() was called.  This means that LSM_UNSAFE_SHARE is now\ncalculated incorrectly.  This flag is set if any of the usage counts for\nfs_struct, files_struct and sighand_struct are greater than 1 at the time the\ndetermination is made.  All of which are true for threads created by the\npthread library.\n\nHowever, since we wish to make the security calculation before irrevocably\ndamaging the process so that we can return it an error code in the case where\nwe decide we want to reject the exec request on this basis, we have to make the\ndetermination before calling de_thread().\n\nSo, instead, we count up the number of threads (CLONE_THREAD) that are sharing\nour fs_struct (CLONE_FS), files_struct (CLONE_FILES) and sighand_structs\n(CLONE_SIGHAND/CLONE_THREAD) with us.  These will be killed by de_thread() and\nso can be discounted by check_unsafe_exec().\n\nWe do have to be careful because CLONE_THREAD does not imply FS or FILES.\n\nWe _assume_ that there will be no extra references to these structs held by the\nthreads we\u0027re going to kill.\n\nThis can be tested with the attached pair of programs.  Build the two programs\nusing the Makefile supplied, and run ./test1 as a non-root user.  If\nsuccessful, you should see something like:\n\n\t[dhowells@andromeda tmp]$ ./test1\n\t--TEST1--\n\tuid\u003d4043, euid\u003d4043 suid\u003d4043\n\texec ./test2\n\t--TEST2--\n\tuid\u003d4043, euid\u003d0 suid\u003d0\n\tSUCCESS - Correct effective user ID\n\nand if unsuccessful, something like:\n\n\t[dhowells@andromeda tmp]$ ./test1\n\t--TEST1--\n\tuid\u003d4043, euid\u003d4043 suid\u003d4043\n\texec ./test2\n\t--TEST2--\n\tuid\u003d4043, euid\u003d4043 suid\u003d4043\n\tERROR - Incorrect effective user ID!\n\nThe non-root user ID you see will depend on the user you run as.\n\n[test1.c]\n#include \u003cstdio.h\u003e\n#include \u003cstdlib.h\u003e\n#include \u003cunistd.h\u003e\n#include \u003cpthread.h\u003e\n\nstatic void *thread_func(void *arg)\n{\n\twhile (1) {}\n}\n\nint main(int argc, char **argv)\n{\n\tpthread_t tid;\n\tuid_t uid, euid, suid;\n\n\tprintf(\"--TEST1--\\n\");\n\tgetresuid(\u0026uid, \u0026euid, \u0026suid);\n\tprintf(\"uid\u003d%d, euid\u003d%d suid\u003d%d\\n\", uid, euid, suid);\n\n\tif (pthread_create(\u0026tid, NULL, thread_func, NULL) \u003c 0) {\n\t\tperror(\"pthread_create\");\n\t\texit(1);\n\t}\n\n\tprintf(\"exec ./test2\\n\");\n\texeclp(\"./test2\", \"test2\", NULL);\n\tperror(\"./test2\");\n\t_exit(1);\n}\n\n[test2.c]\n#include \u003cstdio.h\u003e\n#include \u003cstdlib.h\u003e\n#include \u003cunistd.h\u003e\n\nint main(int argc, char **argv)\n{\n\tuid_t uid, euid, suid;\n\n\tgetresuid(\u0026uid, \u0026euid, \u0026suid);\n\tprintf(\"--TEST2--\\n\");\n\tprintf(\"uid\u003d%d, euid\u003d%d suid\u003d%d\\n\", uid, euid, suid);\n\n\tif (euid !\u003d 0) {\n\t\tfprintf(stderr, \"ERROR - Incorrect effective user ID!\\n\");\n\t\texit(1);\n\t}\n\tprintf(\"SUCCESS - Correct effective user ID\\n\");\n\texit(0);\n}\n\n[Makefile]\nCFLAGS \u003d -D_GNU_SOURCE -Wall -Werror -Wunused\nall: test1 test2\n\ntest1: test1.c\n\tgcc $(CFLAGS) -o test1 test1.c -lpthread\n\ntest2: test2.c\n\tgcc $(CFLAGS) -o test2 test2.c\n\tsudo chown root.root test2\n\tsudo chmod +s test2\n\nReported-by: David Smith \u003cdsmith@redhat.com\u003e\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: David Smith \u003cdsmith@redhat.com\u003e\nSigned-off-by: James Morris \u003cjmorris@namei.org\u003e\n"
    },
    {
      "commit": "a6f76f23d297f70e2a6b3ec607f7aeeea9e37e8d",
      "tree": "8f95617996d0974507f176163459212a7def8b9a",
      "parents": [
        "d84f4f992cbd76e8f39c488cf0c5d123843923b1"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Nov 14 10:39:24 2008 +1100"
      },
      "committer": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Fri Nov 14 10:39:24 2008 +1100"
      },
      "message": "CRED: Make execve() take advantage of copy-on-write credentials\n\nMake execve() take advantage of copy-on-write credentials, allowing it to set\nup the credentials in advance, and then commit the whole lot after the point\nof no return.\n\nThis patch and the preceding patches have been tested with the LTP SELinux\ntestsuite.\n\nThis patch makes several logical sets of alteration:\n\n (1) execve().\n\n     The credential bits from struct linux_binprm are, for the most part,\n     replaced with a single credentials pointer (bprm-\u003ecred).  This means that\n     all the creds can be calculated in advance and then applied at the point\n     of no return with no possibility of failure.\n\n     I would like to replace bprm-\u003ecap_effective with:\n\n\tcap_isclear(bprm-\u003ecap_effective)\n\n     but this seems impossible due to special behaviour for processes of pid 1\n     (they always retain their parent\u0027s capability masks where normally they\u0027d\n     be changed - see cap_bprm_set_creds()).\n\n     The following sequence of events now happens:\n\n     (a) At the start of do_execve, the current task\u0027s cred_exec_mutex is\n     \t locked to prevent PTRACE_ATTACH from obsoleting the calculation of\n     \t creds that we make.\n\n     (a) prepare_exec_creds() is then called to make a copy of the current\n     \t task\u0027s credentials and prepare it.  This copy is then assigned to\n     \t bprm-\u003ecred.\n\n  \t This renders security_bprm_alloc() and security_bprm_free()\n     \t unnecessary, and so they\u0027ve been removed.\n\n     (b) The determination of unsafe execution is now performed immediately\n     \t after (a) rather than later on in the code.  The result is stored in\n     \t bprm-\u003eunsafe for future reference.\n\n     (c) prepare_binprm() is called, possibly multiple times.\n\n     \t (i) This applies the result of set[ug]id binaries to the new creds\n     \t     attached to bprm-\u003ecred.  Personality bit clearance is recorded,\n     \t     but now deferred on the basis that the exec procedure may yet\n     \t     fail.\n\n         (ii) This then calls the new security_bprm_set_creds().  This should\n\t     calculate the new LSM and capability credentials into *bprm-\u003ecred.\n\n\t     This folds together security_bprm_set() and parts of\n\t     security_bprm_apply_creds() (these two have been removed).\n\t     Anything that might fail must be done at this point.\n\n         (iii) bprm-\u003ecred_prepared is set to 1.\n\n\t     bprm-\u003ecred_prepared is 0 on the first pass of the security\n\t     calculations, and 1 on all subsequent passes.  This allows SELinux\n\t     in (ii) to base its calculations only on the initial script and\n\t     not on the interpreter.\n\n     (d) flush_old_exec() is called to commit the task to execution.  This\n     \t performs the following steps with regard to credentials:\n\n\t (i) Clear pdeath_signal and set dumpable on certain circumstances that\n\t     may not be covered by commit_creds().\n\n         (ii) Clear any bits in current-\u003epersonality that were deferred from\n             (c.i).\n\n     (e) install_exec_creds() [compute_creds() as was] is called to install the\n     \t new credentials.  This performs the following steps with regard to\n     \t credentials:\n\n         (i) Calls security_bprm_committing_creds() to apply any security\n             requirements, such as flushing unauthorised files in SELinux, that\n             must be done before the credentials are changed.\n\n\t     This is made up of bits of security_bprm_apply_creds() and\n\t     security_bprm_post_apply_creds(), both of which have been removed.\n\t     This function is not allowed to fail; anything that might fail\n\t     must have been done in (c.ii).\n\n         (ii) Calls commit_creds() to apply the new credentials in a single\n             assignment (more or less).  Possibly pdeath_signal and dumpable\n             should be part of struct creds.\n\n\t (iii) Unlocks the task\u0027s cred_replace_mutex, thus allowing\n\t     PTRACE_ATTACH to take place.\n\n         (iv) Clears The bprm-\u003ecred pointer as the credentials it was holding\n             are now immutable.\n\n         (v) Calls security_bprm_committed_creds() to apply any security\n             alterations that must be done after the creds have been changed.\n             SELinux uses this to flush signals and signal handlers.\n\n     (f) If an error occurs before (d.i), bprm_free() will call abort_creds()\n     \t to destroy the proposed new credentials and will then unlock\n     \t cred_replace_mutex.  No changes to the credentials will have been\n     \t made.\n\n (2) LSM interface.\n\n     A number of functions have been changed, added or removed:\n\n     (*) security_bprm_alloc(), -\u003ebprm_alloc_security()\n     (*) security_bprm_free(), -\u003ebprm_free_security()\n\n     \t Removed in favour of preparing new credentials and modifying those.\n\n     (*) security_bprm_apply_creds(), -\u003ebprm_apply_creds()\n     (*) security_bprm_post_apply_creds(), -\u003ebprm_post_apply_creds()\n\n     \t Removed; split between security_bprm_set_creds(),\n     \t security_bprm_committing_creds() and security_bprm_committed_creds().\n\n     (*) security_bprm_set(), -\u003ebprm_set_security()\n\n     \t Removed; folded into security_bprm_set_creds().\n\n     (*) security_bprm_set_creds(), -\u003ebprm_set_creds()\n\n     \t New.  The new credentials in bprm-\u003ecreds should be checked and set up\n     \t as appropriate.  bprm-\u003ecred_prepared is 0 on the first call, 1 on the\n     \t second and subsequent calls.\n\n     (*) security_bprm_committing_creds(), -\u003ebprm_committing_creds()\n     (*) security_bprm_committed_creds(), -\u003ebprm_committed_creds()\n\n     \t New.  Apply the security effects of the new credentials.  This\n     \t includes closing unauthorised files in SELinux.  This function may not\n     \t fail.  When the former is called, the creds haven\u0027t yet been applied\n     \t to the process; when the latter is called, they have.\n\n \t The former may access bprm-\u003ecred, the latter may not.\n\n (3) SELinux.\n\n     SELinux has a number of changes, in addition to those to support the LSM\n     interface changes mentioned above:\n\n     (a) The bprm_security_struct struct has been removed in favour of using\n     \t the credentials-under-construction approach.\n\n     (c) flush_unauthorized_files() now takes a cred pointer and passes it on\n     \t to inode_has_perm(), file_has_perm() and dentry_open().\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: James Morris \u003cjmorris@namei.org\u003e\nAcked-by: Serge Hallyn \u003cserue@us.ibm.com\u003e\nSigned-off-by: James Morris \u003cjmorris@namei.org\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": "6272e2667965dfb5b59199f462cd0f001fb304a6",
      "tree": "a14a4537dcd7af09863cc3a1c19a3efe386d67ab",
      "parents": [
        "039b6b3ed84e45a6f8316358dd2bfdc83d59fc45"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue May 08 00:29:21 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue May 08 11:15:09 2007 -0700"
      },
      "message": "cleanup compat ioctl handling\n\nMerge all compat ioctl handling into compat_ioctl.c instead of splitting it\nover compat.c and compat_ioctl.c.  This also allows to get rid of ioctl32.h\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nLooks-good-to: Andi Kleen \u003cak@suse.de\u003e\nAcked-by: Arnd Bergmann \u003carnd@arndb.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5e6d12b2c8be2cac099df6dcb8b26884f24d2621",
      "tree": "2ac881cd0670f0bd5bfa0438bc1570b169e7af3b",
      "parents": [
        "65934a9a028b88e83e2b0f8b36618fe503349f8e"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Thu Aug 31 12:55:23 2006 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@nelson.home.kernel.dk",
        "time": "Sat Sep 30 20:52:32 2006 +0200"
      },
      "message": "[PATCH] CONFIG_BLOCK internal.h cleanups\n\n- forward declare struct superblock\n- use inlines, not macros\n\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "9361401eb7619c033e2394e4f9f6d410d6719ac7",
      "tree": "04b94a71f2366988c17740d1c16cfbdec41d5d2e",
      "parents": [
        "d366e40a1cabd453be6e2609caa7e12f9ca17b1f"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Sat Sep 30 20:45:40 2006 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@nelson.home.kernel.dk",
        "time": "Sat Sep 30 20:52:31 2006 +0200"
      },
      "message": "[PATCH] BLOCK: Make it possible to disable the block layer [try #6]\n\nMake it possible to disable the block layer.  Not all embedded devices require\nit, some can make do with just JFFS2, NFS, ramfs, etc - none of which require\nthe block layer to be present.\n\nThis patch does the following:\n\n (*) Introduces CONFIG_BLOCK to disable the block layer, buffering and blockdev\n     support.\n\n (*) Adds dependencies on CONFIG_BLOCK to any configuration item that controls\n     an item that uses the block layer.  This includes:\n\n     (*) Block I/O tracing.\n\n     (*) Disk partition code.\n\n     (*) All filesystems that are block based, eg: Ext3, ReiserFS, ISOFS.\n\n     (*) The SCSI layer.  As far as I can tell, even SCSI chardevs use the\n     \t block layer to do scheduling.  Some drivers that use SCSI facilities -\n     \t such as USB storage - end up disabled indirectly from this.\n\n     (*) Various block-based device drivers, such as IDE and the old CDROM\n     \t drivers.\n\n     (*) MTD blockdev handling and FTL.\n\n     (*) JFFS - which uses set_bdev_super(), something it could avoid doing by\n     \t taking a leaf out of JFFS2\u0027s book.\n\n (*) Makes most of the contents of linux/blkdev.h, linux/buffer_head.h and\n     linux/elevator.h contingent on CONFIG_BLOCK being set.  sector_div() is,\n     however, still used in places, and so is still available.\n\n (*) Also made contingent are the contents of linux/mpage.h, linux/genhd.h and\n     parts of linux/fs.h.\n\n (*) Makes a number of files in fs/ contingent on CONFIG_BLOCK.\n\n (*) Makes mm/bounce.c (bounce buffering) contingent on CONFIG_BLOCK.\n\n (*) set_page_dirty() doesn\u0027t call __set_page_dirty_buffers() if CONFIG_BLOCK\n     is not enabled.\n\n (*) fs/no-block.c is created to hold out-of-line stubs and things that are\n     required when CONFIG_BLOCK is not set:\n\n     (*) Default blockdev file operations (to give error ENODEV on opening).\n\n (*) Makes some /proc changes:\n\n     (*) /proc/devices does not list any blockdevs.\n\n     (*) /proc/diskstats and /proc/partitions are contingent on CONFIG_BLOCK.\n\n (*) Makes some compat ioctl handling contingent on CONFIG_BLOCK.\n\n (*) If CONFIG_BLOCK is not defined, makes sys_quotactl() return -ENODEV if\n     given command other than Q_SYNC or if a special device is specified.\n\n (*) In init/do_mounts.c, no reference is made to the blockdev routines if\n     CONFIG_BLOCK is not defined.  This does not prohibit NFS roots or JFFS2.\n\n (*) The bdflush, ioprio_set and ioprio_get syscalls can now be absent (return\n     error ENOSYS by way of cond_syscall if so).\n\n (*) The seclvl_bd_claim() and seclvl_bd_release() security calls do nothing if\n     CONFIG_BLOCK is not set, since they can\u0027t then happen.\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "7b0de42d7c5a471741ede4e71727d88000e6ea59",
      "tree": "808b27ad3b2f4a83a97bcc4c001970fab96ff7b6",
      "parents": [
        "07f3f05c1e3052b8656129b2a5aca9f888241a34"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Aug 29 19:06:07 2006 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@nelson.home.kernel.dk",
        "time": "Sat Sep 30 20:52:26 2006 +0200"
      },
      "message": "[PATCH] BLOCK: Remove dependence on existence of blockdev_superblock [try #6]\n\nMove blockdev_superblock extern declaration from fs/fs-writeback.c to a\nheaderfile and remove the dependence on it by wrapping it in a macro.\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "07f3f05c1e3052b8656129b2a5aca9f888241a34",
      "tree": "3338b004d518a0d2189efdc3fb88e94e1c02c0ce",
      "parents": [
        "65e6f5bc8149165efb9d7bdbd142bb837d5edfeb"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Sat Sep 30 20:52:18 2006 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Sat Sep 30 20:52:18 2006 +0200"
      },
      "message": "[PATCH] BLOCK: Move extern declarations out of fs/*.c into header files [try #6]\n\nCreate a new header file, fs/internal.h, for common definitions local to the\nsources in the fs/ directory.\n\nMove extern definitions that should be in header files from fs/*.c to\nfs/internal.h or other main header files where they span directories.\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    }
  ]
}
