)]}'
{
  "log": [
    {
      "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"
    }
  ]
}
