)]}'
{
  "log": [
    {
      "commit": "008d23e4852d78bb2618f2035f8b2110b6a6b968",
      "tree": "81c88f744f6f3fc84132527c1ddc0b4da410c5e2",
      "parents": [
        "8f685fbda43deccd130d192c9fcef1444649eaca",
        "bfc672dcf323877228682aff79dff8ecd9f30ff8"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:05:56 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:05:56 2011 -0800"
      },
      "message": "Merge branch \u0027for-next\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial\n\n* \u0027for-next\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (43 commits)\n  Documentation/trace/events.txt: Remove obsolete sched_signal_send.\n  writeback: fix global_dirty_limits comment runtime -\u003e real-time\n  ppc: fix comment typo singal -\u003e signal\n  drivers: fix comment typo diable -\u003e disable.\n  m68k: fix comment typo diable -\u003e disable.\n  wireless: comment typo fix diable -\u003e disable.\n  media: comment typo fix diable -\u003e disable.\n  remove doc for obsolete dynamic-printk kernel-parameter\n  remove extraneous \u0027is\u0027 from Documentation/iostats.txt\n  Fix spelling milisec -\u003e ms in snd_ps3 module parameter description\n  Fix spelling mistakes in comments\n  Revert conflicting V4L changes\n  i7core_edac: fix typos in comments\n  mm/rmap.c: fix comment\n  sound, ca0106: Fix assignment to \u0027channel\u0027.\n  hrtimer: fix a typo in comment\n  init/Kconfig: fix typo\n  anon_inodes: fix wrong function name in comment\n  fix comment typos concerning \"consistent\"\n  poll: fix a typo in comment\n  ...\n\nFix up trivial conflicts in:\n - drivers/net/wireless/iwlwifi/iwl-core.c (moved to iwl-legacy.c)\n - fs/ext4/ext4.h\n\nAlso fix missed \u0027diabled\u0027 typo in drivers/net/bnx2x/bnx2x.h while at it.\n"
    },
    {
      "commit": "6db26ffc917b609402619e03df5af8d1cd371ce7",
      "tree": "95d58dec4f8a69c57fd632ca61e362654bc351d0",
      "parents": [
        "f878133bf022717b880d0e0995b8f91436fd605c"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Wed Jan 12 16:59:13 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 08:03:05 2011 -0800"
      },
      "message": "fs/ext4/inode.c: use pr_warn_ratelimited()\n\npr_warning_ratelimited() doesn\u0027t exist.\n\nAlso include printk.h, which defines these things.\n\nCc: Theodore Ts\u0027o \u003ctytso@mit.edu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1c5b9e9065567876c2d4a7a16d78f0fed154a5bf",
      "tree": "67b74f12c7336a972de54d004455369eec38bc28",
      "parents": [
        "a5196f8cdfbf6ccb20f093aaf48852d6d23b4e0b"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 10 12:51:28 2011 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 10 12:51:28 2011 -0500"
      },
      "message": "ext4: fix memory leak in ext4_free_branches\n\nCommit 40389687 moved a call to ext4_forget() out of\next4_free_branches and let ext4_free_blocks() handle calling\nbforget().  But that change unfortunately did not replace the call to\next4_forget() with brelse(), which was needed to drop the in-use count\nof the indirect block\u0027s buffer head, which lead to a memory leak when\ndeleting files that used indirect blocks.  Fix this.\n\nThanks to Hugh Dickins for pointing this out.\n\nCc: stable@kernel.org\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "b40971426a837e9dc9c66e1b6bbcb3874eafe4e0",
      "tree": "34b2a745719ed18bd1f0c81cfad200b9d8b2e309",
      "parents": [
        "ca6e909f9bebe709bc65a3ee605ce32969db0452"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 10 12:46:59 2011 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 10 12:46:59 2011 -0500"
      },
      "message": "ext4: add error checking to calls to ext4_handle_dirty_metadata()\n\nCall ext4_std_error() in various places when we can\u0027t bail out\ncleanly, so the file system can be marked as in error.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "8aefcd557d26d0023a36f9ec5afbf55e59f8f26b",
      "tree": "e13143306cd64525cddd2cc2513c448275a1d95a",
      "parents": [
        "353eb83c1422c6326eaab30ce044a179c6018169"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 10 12:29:43 2011 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 10 12:29:43 2011 -0500"
      },
      "message": "ext4: dynamically allocate the jbd2_inode in ext4_inode_info as necessary\n\nReplace the jbd2_inode structure (which is 48 bytes) with a pointer\nand only allocate the jbd2_inode when it is needed --- that is, when\nthe file system has a journal present and the inode has been opened\nfor writing.  This allows us to further slim down the ext4_inode_info\nstructure.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "353eb83c1422c6326eaab30ce044a179c6018169",
      "tree": "fd43e39b344de5ee43d82c90f0affda68a65f2df",
      "parents": [
        "8a2005d3f84457b7d7d8646ab5195341d9e5f06a"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 10 12:18:25 2011 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 10 12:18:25 2011 -0500"
      },
      "message": "ext4: drop i_state_flags on architectures with 64-bit longs\n\nWe can store the dynamic inode state flags in the high bits of\nEXT4_I(inode)-\u003ei_flags, and eliminate i_state_flags.  This saves 8\nbytes from the size of ext4_inode_info structure, which when\nmultiplied by the number of the number of in the inode cache, can save\na lot of memory.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "01f49d0b9d0209dc1194255b11601e4b94447b36",
      "tree": "c3ec53c7725bf7a9188e844d8c8c09432d2be6ae",
      "parents": [
        "f232109773ff5b0c840a6761d74940b9cf0d66ec"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 10 12:13:03 2011 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 10 12:13:03 2011 -0500"
      },
      "message": "ext4: use ext4_lblk_t instead of sector_t for logical blocks\n\nThis fixes a number of places where we used sector_t instead of\next4_lblk_t for logical blocks, which for ext4 are still 32-bit data\ntypes.  No point wasting space in the ext4_inode_info structure, and\nrequiring 64-bit arithmetic on 32-bit systems, when it isn\u0027t\nnecessary.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f232109773ff5b0c840a6761d74940b9cf0d66ec",
      "tree": "a32da5ebd1a3e074e9f52107f3bdc23babb6340c",
      "parents": [
        "ad4fb9cafe100a4a9de6e0529015e584d94ac8dc"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 10 12:12:36 2011 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 10 12:12:36 2011 -0500"
      },
      "message": "ext4: replace i_delalloc_reserved_flag with EXT4_STATE_DELALLOC_RESERVED\n\nRemove the short element i_delalloc_reserved_flag from the\next4_inode_info structure and replace it a new bit in i_state_flags.\nSince we have an ext4_inode_info for every ext4 inode cached in the\ninode cache, any savings we can produce here is a very good thing from\na memory utilization perspective.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "4b7bd364700d9ac8372eff48832062b936d0793b",
      "tree": "0dbf78c95456a0b02d07fcd473281f04a87e266d",
      "parents": [
        "c0d8768af260e2cbb4bf659ae6094a262c86b085",
        "90a8a73c06cc32b609a880d48449d7083327e11a"
      ],
      "author": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Wed Dec 22 18:57:02 2010 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Wed Dec 22 18:57:02 2010 +0100"
      },
      "message": "Merge branch \u0027master\u0027 into for-next\n\nConflicts:\n\tMAINTAINERS\n\tarch/arm/mach-omap2/pm24xx.c\n\tdrivers/scsi/bfa/bfa_fcpim.c\n\nNeeded to update to apply fixes for which the old branch was too\noutdated.\n"
    },
    {
      "commit": "a8901d34872dafcafa23efa0865dcecfd4fddf8c",
      "tree": "e593fa23bd961b693440966f84e421c5d7a2b5f4",
      "parents": [
        "225db7d35c33f076115a583abec238a696f4467e"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Dec 17 10:40:47 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Dec 17 10:40:47 2010 -0500"
      },
      "message": "ext4: Use pr_warning_ratelimited() instead of printk_ratelimit()\n\nprintk_ratelimit() is deprecated since it is a global instead of a\nper-printk ratelimit.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "225db7d35c33f076115a583abec238a696f4467e",
      "tree": "d31fbe96f045d734b0c6cbf4b85afc1ba25d458e",
      "parents": [
        "a2595b8aa67011419dae26b47e474f46df902989"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Dec 16 16:38:26 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Dec 16 16:38:26 2010 -0500"
      },
      "message": "ext4: Fix up comments in inode.c\n\nThis fixes up some broken argument descriptions that Namhyung Kim had\noriginally submitted for ext3.  This fixes the comments that were\nstill applicable in ext4.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "1449032be17abb69116dbc393f67ceb8bd034f92",
      "tree": "f62757457241c2fdc14105afc12cb2718f7a2e68",
      "parents": [
        "e8a7e48bb248a1196484d3f8afa53bded2b24e71"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Dec 14 15:27:50 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Dec 14 15:27:50 2010 -0500"
      },
      "message": "ext4: Turn off multiple page-io submission by default\n\nJon Nelson has found a test case which causes postgresql to fail with\nthe error:\n\npsql:t.sql:4: ERROR: invalid page header in block 38269 of relation base/16384/16581\n\nUnder memory pressure, it looks like part of a file can end up getting\nreplaced by zero\u0027s.  Until we can figure out the cause, we\u0027ll roll\nback the change and use block_write_full_page() instead of\next4_bio_write_page().  The new, more efficient writing function can\nbe used via the mount option mblk_io_submit, so we can test and fix\nthe new page I/O code.\n\nTo reproduce the problem, install postgres 8.4 or 9.0, and pin enough\nmemory such that the system just at the end of triggering writeback\nbefore running the following sql script:\n\nbegin;\ncreate temporary table foo as select x as a, ARRAY[x] as b FROM\ngenerate_series(1, 10000000 ) AS x;\ncreate index foo_a_idx on foo (a);\ncreate index foo_b_idx on foo USING GIN (b);\nrollback;\n\nIf the temporary table is created on a hard drive partition which is\nencrypted using dm_crypt, then under memory pressure, approximately\n30-40% of the time, pgsql will issue the above failure.\n\nThis patch should fix this problem, and the problem will come back if\nthe file system is mounted with the mblk_io_submit mount option.\n\nReported-by: Jon Nelson \u003cjnelson@jamponi.net\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "380cf090f4f531545b558b04a3dd90d09df52ee9",
      "tree": "3ae833651a2c6f20b4a033ebcf66fce32a735bfe",
      "parents": [
        "149d730fac715e077a8bcceb4b27f3523b314558"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Thu Nov 11 19:23:29 2010 +0800"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Nov 15 14:14:52 2010 +0100"
      },
      "message": "ext4: fix redirty_page_for_writepage() typo in comment\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "a7bcf21e60c73cb7f7c13fad928967d7e47c3cac",
      "tree": "e24ae9d2c35508f68016b8cde848b7608e737b32",
      "parents": [
        "5398a64c63a69a0ac33dbae458ea4aab0dc23f14",
        "7ff9c073dd4d7200399076554f7ab9b876f196f6"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Nov 08 11:54:53 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Nov 08 11:54:53 2010 -0800"
      },
      "message": "Merge branch \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4\n\n* \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4:\n  ext4: Add new ext4 inode tracepoints\n  ext4: Don\u0027t call sb_issue_discard() in ext4_free_blocks()\n  ext4: do not try to grab the s_umount semaphore in ext4_quota_off\n  ext4: fix potential race when freeing ext4_io_page structures\n  ext4: handle writeback of inodes which are being freed\n  ext4: initialize the percpu counters before replaying the journal\n  ext4: \"ret\" may be used uninitialized in ext4_lazyinit_thread()\n  ext4: fix lazyinit hang after removing request\n"
    },
    {
      "commit": "7ff9c073dd4d7200399076554f7ab9b876f196f6",
      "tree": "6ca4eb4ca9b2f6f7b11e8197bd8a9417d7307b00",
      "parents": [
        "b56ff9d397cecdaad6c98c9d57cc6fea475e1f50"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Nov 08 13:51:33 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Nov 08 13:51:33 2010 -0500"
      },
      "message": "ext4: Add new ext4 inode tracepoints\n\nAdd ext4_evict_inode, ext4_drop_inode, ext4_mark_inode_dirty, and\next4_begin_ordered_truncate()\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "eb8abb927ae2fd1730e24ea94cd9527f3c086292",
      "tree": "e0ae72934040e8d840db503c311ac070d9850bc8",
      "parents": [
        "7fe19da4ca38fc20cdbc7020fcf2eca8fc756410"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Nov 02 09:34:50 2010 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Nov 02 10:38:30 2010 -0400"
      },
      "message": "ext4: Remove useless spinlock in ext4_getattr()\n\nLinus noted, and complained to me, that doing while lots of \"git diff\"\u0027s\nof kernel sources, these spinlocks were responsible for 27% of the\nspinlock cost on his two-processor system as reported by perf.\n\nGit was doing lots of parallel stats, and this was putting a lot of\npressure on ext4_getattr().  A spinlock to protect a single\nmemory-to-memory copy is pointless, so remove it.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b595076a180a56d1bb170e6eceda6eb9d76f4cd3",
      "tree": "bc01ec7283808013e0b8ce7713fd6fc40f810429",
      "parents": [
        "6aaccece1c483f189f76f1282b3984ff4c7ecb0a"
      ],
      "author": {
        "name": "Uwe Kleine-König",
        "email": "u.kleine-koenig@pengutronix.de",
        "time": "Mon Nov 01 15:38:34 2010 -0400"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Nov 01 15:38:34 2010 -0400"
      },
      "message": "tree-wide: fix comment/printk typos\n\n\"gadget\", \"through\", \"command\", \"maintain\", \"maintain\", \"controller\", \"address\",\n\"between\", \"initiali[zs]e\", \"instead\", \"function\", \"select\", \"already\",\n\"equal\", \"access\", \"management\", \"hierarchy\", \"registration\", \"interest\",\n\"relative\", \"memory\", \"offset\", \"already\",\n\nSigned-off-by: Uwe Kleine-König \u003cu.kleine-koenig@pengutronix.de\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "b1142e8fec6a594723e5054055a7b53379b90490",
      "tree": "57d6234fa2eb33f861eaea4cee4a40a3ae44c09e",
      "parents": [
        "81280572ca6f54009edfa4deee563e8678784218"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Oct 28 17:33:57 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Oct 28 17:33:57 2010 -0400"
      },
      "message": "ext4: BUG_ON fix: check if page has buffers before calling page_buffers() \n\nWe need to make check if a page does not have buffes by checking\npage_has_buffers(page) before calling page_buffers(page) in\next4_writepage().  Otherwise page_buffers() could throw a BUG_ON.\n\nThanks also to Markus Trippelsdorf and Avinash Kurup who also reported\nthe problem.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nReported-by: Sedat Dilek \u003csedat.dilek@googlemail.com\u003e\nTested-by: Sedat Dilek \u003csedat.dilek@googlemail.com\u003e\n"
    },
    {
      "commit": "a107e5a3a473a2ea62bd5af24e11b84adf1486ff",
      "tree": "d36c2cb38d8be88d4d75cdebc354aa140aa0e470",
      "parents": [
        "e3e1288e86a07cdeb0aee5860a2dff111c6eff79",
        "a269029d0e2192046be4c07ed78a45022469ee4c"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 23:44:47 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 23:44:47 2010 -0400"
      },
      "message": "Merge branch \u0027next\u0027 into upstream-merge\n\nConflicts:\n\tfs/ext4/inode.c\n\tfs/ext4/mballoc.c\n\tinclude/trace/events/ext4.h\n"
    },
    {
      "commit": "3d287de3b828226e5a450c7fd5bf4283792dc2b0",
      "tree": "4adcc534e2042aed924750df3ef2433bd2f14fd8",
      "parents": [
        "beed5ecbaa377fa8bb6a54a6608e8725a21efdbc"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Wed Oct 27 22:08:46 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 22:08:46 2010 -0400"
      },
      "message": "ext4: optimize orphan_list handling for ext4_setattr\n\nSurprisingly chown() on ext4 is not SMP scalable operation. \nDue to unconditional orphan_del(NULL, inode) in ext4_setattr()\nresult in significant performance overhead because of global orphan\nmutex, especially in no-journal mode (where orphan_add() is noop).\nIt is possible to skip explicit orphan_del if possible.\nResults of fchown() micro-benchmark in no-journal mode\nwhile (1) {\n   iteration++;\n   fchown(fd, uid, gid);\n   fchown(fd, uid + 1, gid + 1)\n}\nmeasured: iterations per millisecond\n| nr_tasks | w/o patch | with patch |\n|        1 |       142 |        185 |\n|        4 |       109 |        642 |\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "4a873a472b3bbcfd425d7ae210afdec28c04e2e5",
      "tree": "88aa333bfafcc5303b7a3074865f51f67ad836b9",
      "parents": [
        "bf89d16f6ef5389f1b9d8046e838ec87b9b3f8b9"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:14 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:14 2010 -0400"
      },
      "message": "ext4: move flush_completed_IO to fs/ext4/fsync.c and make it static\n\nFix a namespace leak by moving the function to the file where it is\nused and making it static.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "1f109d5a17b438c4a54cbf6fd87a249e3d72fb21",
      "tree": "f58c6fd431975bf900b502b80122e175065da657",
      "parents": [
        "5dabfc78dcedbe46cb2e4872dde448de3cec2979"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:14 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:14 2010 -0400"
      },
      "message": "ext4: make various ext4 functions be static\n\nThese functions have no need to be exported beyond file context.\n\nNo functions needed to be moved for this commit; just some function\ndeclarations changed to be static and removed from header files.\n\n(A similar patch was submitted by Eric Sandeen, but I wanted to handle\ncode movement in separate patches to make sure code changes didn\u0027t\naccidentally get dropped.)\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "72f84e6560d18d60a091df27edf81409be6641cb",
      "tree": "e2fa11476b074f8526d620820f8b2e86e8a11412",
      "parents": [
        "5b41d92437f1ae19b3f3ffa3b16589fd5df50ac0"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Wed Oct 27 21:30:13 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:13 2010 -0400"
      },
      "message": "ext4: update writeback_index based on last page scanned\n\nAs pointed out in a prior patch, updating the mapping\u0027s\nwriteback_index based on pages written isn\u0027t quite right;\nwhat the writeback index is really supposed to reflect is\nthe next page which should be scanned for writeback during\nperiodic flush.\n\nAs in write_cache_pages(), write_cache_pages_da() does\nthis scanning for us as we assemble the mpd for later\nwriteout.  If we keep track of the next page after the\ncurrent scan, we can easily update writeback_index without\nworrying about pages written vs. pages skipped, etc.\n\nWithout this, an fsync will reset writeback_index to\n0 (its starting index) + however many pages it wrote, which\ncan mess up the progress of periodic flush.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "5b41d92437f1ae19b3f3ffa3b16589fd5df50ac0",
      "tree": "ed7e1999a2349811e3cae0f0bdd53a93aea413d7",
      "parents": [
        "bbd08344e3df8c7c1d7aa04bc0c8c9367806e12d"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Wed Oct 27 21:30:13 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:13 2010 -0400"
      },
      "message": "ext4: implement writeback livelock avoidance using page tagging\n\nThis is analogous to Jan Kara\u0027s commit,\nf446daaea9d4a420d16c606f755f3689dcb2d0ce\nmm: implement writeback livelock avoidance using page tagging\n\nbut since we forked write_cache_pages, we need to reimplement\nit there (and in ext4_da_writepages, since range_cyclic handling\nwas moved to there)\n\nIf you start a large buffered IO to a file, and then set\nfsync after it, you\u0027ll find that fsync does not complete\nuntil the other IO stops.\n\nIf you continue re-dirtying the file (say, putting dd\nwith conv\u003dnotrunc in a loop), when fsync finally completes\n(after all IO is done), it reports via tracing that\nit has written many more pages than the file contains;\nin other words it has synced and re-synced pages in\nthe file multiple times.\n\nThis then leads to problems with our writeback_index\nupdate, since it advances it by pages written, and\nessentially sets writeback_index off the end of the\nfile...\n\nWith the following patch, we only sync as much as was\ndirty at the time of the sync.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "bbd08344e3df8c7c1d7aa04bc0c8c9367806e12d",
      "tree": "6441a113660deb3bbe1795f5b03b1c11b9e18fda",
      "parents": [
        "27ee40df2b17c84aa7855907df12befe6869b7a7"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Wed Oct 27 21:30:12 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:12 2010 -0400"
      },
      "message": "ext4: tidy up a void argument in inode.c\n\nThis doesn\u0027t fix anything at all, it just removes a vestige\nof prior use from __mpage_da_writepage()\n\n__mpage_da_writepage() had a *void argument leftover from\nits previous life as a callback; make it reflect the actual type.\n\nFixing this up makes it slightly more obvious to read, and \nenables proper typechecking.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "877836905da55e8f2426234f42a89287184949e9",
      "tree": "eecb60e9b55daaf794a3083f9c48fc94e05d4cd2",
      "parents": [
        "bd2d0210cf22f2bd0cef72eb97cf94fc7d31d8cc"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Wed Oct 27 21:30:11 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:11 2010 -0400"
      },
      "message": "ext4: Check return value of sb_getblk() and friends\n\nFail block allocation if sb_getblk() returns NULL. In that case,\nsb_find_get_block() also likely to fail so that it should skip\ncalling ext4_forget().\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "bd2d0210cf22f2bd0cef72eb97cf94fc7d31d8cc",
      "tree": "f0d1902b7ff4294114614cc706855c3d6b131f73",
      "parents": [
        "1de3e3df917459422cb2aecac440febc8879d410"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:10 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:10 2010 -0400"
      },
      "message": "ext4: use bio layer instead of buffer layer in mpage_da_submit_io\n\nCall the block I/O layer directly instad of going through the buffer\nlayer.  This should give us much better performance and scalability,\nas well as lowering our CPU utilization when doing buffered writeback.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "1de3e3df917459422cb2aecac440febc8879d410",
      "tree": "3ff2584fa323ec855dec74b7e842e5e4abe39597",
      "parents": [
        "3ecdb3a193a5f224f084c04a63aa28cdccf4d7d0"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:10 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:10 2010 -0400"
      },
      "message": "ext4: move mpage_put_bnr_to_bhs()\u0027s functionality to mpage_da_submit_io()\n\nThis massively simplifies the ext4_da_writepages() code path by\ncompletely removing mpage_put_bnr_bhs(), which is almost 100 lines of\ncode iterating over a set of pages using pagevec_lookup(), and folds\nthat functionality into mpage_da_submit_io()\u0027s existing\npagevec_lookup() loop.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "3ecdb3a193a5f224f084c04a63aa28cdccf4d7d0",
      "tree": "9949f753917004c75ddd4549c8e9741ccdbd435e",
      "parents": [
        "cb20d5188366f04d96d2e07b1240cc92170ade40"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:10 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:10 2010 -0400"
      },
      "message": "ext4: inline walk_page_buffers() into mpage_da_submit_io\n\nExpand the call:\n\n  if (walk_page_buffers(NULL, page_bufs, 0, len, NULL,\n                        ext4_bh_delay_or_unwritten))\n\tgoto redirty_page\n\ninto mpage_da_submit_io().\n\nThis will allow us to merge in mpage_put_bnr_to_bhs() in the next\npatch.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "cb20d5188366f04d96d2e07b1240cc92170ade40",
      "tree": "6fe424e1ccdd36f8b4a60e144cfdaa577296926e",
      "parents": [
        "a42afc5f56f319107e987aa6adf2f65d93d527c7"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:09 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:09 2010 -0400"
      },
      "message": "ext4: inline ext4_writepage() into mpage_da_submit_io()\n\nAs a prepratory step to switching to bio_submit, inline\next4_writepage() into mpage_da_submit() and then simplify things a\nbit.  This makes it clearer what mpage_da_submit needs to do.\n\nAlso, move the ClearPageChecked(page) call into\n__ext4_journalled_writepage(), as a minor bit of cleanup refactoring.\n\nThis also allows us to pull i_size_read() and\next4_should_journal_data() out of the loop, which should be a very\nminor CPU savings.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a42afc5f56f319107e987aa6adf2f65d93d527c7",
      "tree": "845d03a8cec3fcb705ea6c821d202c816de76655",
      "parents": [
        "5a87b7a5da250c9be6d757758425dfeaf8ed3179"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:09 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:09 2010 -0400"
      },
      "message": "ext4: simplify ext4_writepage()\n\nThe actual code in ext4_writepage() is unnecessarily convoluted.\nSimplify it so it is easier to understand, but otherwise logically\nequivalent.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "5a87b7a5da250c9be6d757758425dfeaf8ed3179",
      "tree": "efd1ca776e184101cb20ba4606bc35103385bcb5",
      "parents": [
        "16828088f9e518158edecb6cde7e6fa38e4c889b"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:09 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:09 2010 -0400"
      },
      "message": "ext4: call mpage_da_submit_io() from mpage_da_map_blocks()\n\nEventually we need to completely reorganize the ext4 writepage\ncallpath, but for now, we simplify things a little by calling\nmpage_da_submit_io() from mpage_da_map_blocks(), since all of the\nplaces where we call mpage_da_map_blocks() it is followed up by a call\nto mpage_da_submit_io().\n\nWe\u0027re also a wee bit better with respect to error handling, but there\nare still a number of issues where it\u0027s not clear what the right thing\nis to do with ext4 functions deep in the writeback codepath fails.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c999af2b347a55174f702702e0df814d05ef5491",
      "tree": "47957b52c9a54babe4d8aefdda4f09cee5f76249",
      "parents": [
        "3e1e5f501632460184a98237d5460c521510535e"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Wed Oct 27 21:30:07 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:07 2010 -0400"
      },
      "message": "ext4: queue conversion after adding to inode\u0027s completed IO list\n\nBy queuing the io end on the unwritten workqueue before adding it\nto our inode\u0027s list of completed IOs, I think we run the risk\nof the work getting completed, and the IO freed, before we try\nto add it to the inode\u0027s i_completed_io_list.\n\nIt should be safe to add it to the inode\u0027s list of completed\nIOs, and -then- queue it for completion, I think.\n\nThanks to Dave Chinner for pointing out the race.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nReviewed-by: Jiaying Zhang \u003cjiayingz@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "0c9169ccad4aed233fdd49e95da4eada2536a06d",
      "tree": "2c89c49f8aa48dd781747e4f9d801ad06e5517b9",
      "parents": [
        "e0d10bfa91b0a089a9e2c378b5c42f4e96171d95"
      ],
      "author": {
        "name": "Toshiyuki Okajima",
        "email": "toshi.okajima@jp.fujitsu.com",
        "time": "Wed Oct 27 21:30:07 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:07 2010 -0400"
      },
      "message": "ext4: fix potential infinite loop in ext4_da_writepages()\n\nOn linux-2.6.36-rc2, if we execute the following script, we can hang\nthe system when the /bin/sync command is executed:\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n#!/bin/sh\n\necho -n \"HANG UP TEST: \"\n/bin/dd if\u003d/dev/zero of\u003d/tmp/img bs\u003d1k count\u003d1 seek\u003d1M 2\u003e /dev/null\n/sbin/mkfs.ext4 -Fq /tmp/img\n/bin/mount -o loop -t ext4 /tmp/img /mnt\n/bin/dd if\u003d/dev/zero of\u003d/mnt/file bs\u003d1 count\u003d1 \\\nseek\u003d$((16*1024*1024*1024*1024-4096)) 2\u003e /dev/null\n/bin/sync\n/bin/umount /mnt\necho \"DONE\"\nexit 0\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nWe can see the following backtrace if we get the kdump when this\nhangup occurs:\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nkthread()\n\u003d\u003e bdi_writeback_thread()\n   \u003d\u003e wb_do_writeback()\n      \u003d\u003e wb_writeback()\n         \u003d\u003e writeback_inodes_wb()\n            \u003d\u003e writeback_sb_inodes()\n               \u003d\u003e writeback_single_inode()\n                  \u003d\u003e ext4_da_writepages()  ---+ \n                                ^ infinite    |\n                                |   loop      |\n                                +-------------+\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nThe reason why this hangup happens is described as follows:\n1) We write the last extent block of the file whose size is the filesystem \n   maximum size.\n2) \"BH_Delay\" flag is set on the buffer_head of its block.\n3) - the member, \"m_lblk\" of struct mpage_da_data is 4294967295 (UINT_MAX)\n   - the member, \"m_len\" of struct mpage_da_data is 1\n  mpage_put_bnr_to_bhs() which is called via ext4_da_writepages()\n  cannot clear \"BH_Delay\" flag of the buffer_head because the type of\n  m_lblk is ext4_lblk_t and then m_lblk + m_len is overflow.\n\n  Therefore an infinite loop occurs because ext4_da_writepages()\n  cannot write the page (which corresponds to the block) since\n  \"BH_Delay\" flag isn\u0027t cleared.\n----------------------------------------------------------------------\nstatic void mpage_put_bnr_to_bhs(struct mpage_da_data *mpd,\n\t\t\t\tstruct ext4_map_blocks *map)\n{\n...\n\tint blocks \u003d map-\u003em_len;\n...\n\t\tdo {\n\t\t\t// cur_logical \u003d 4294967295\n\t\t\t// map-\u003em_lblk \u003d 4294967295\n\t\t\t// blocks \u003d 1\n\t\t\t// *** map-\u003em_lblk + blocks \u003d\u003d 0 (OVERFLOW!) ***\n\t\t\t// (cur_logical \u003e\u003d map-\u003em_lblk + blocks) \u003d\u003e true\n\t\t\tif (cur_logical \u003e\u003d map-\u003em_lblk + blocks)\n\t\t\t\tbreak;\n----------------------------------------------------------------------\n\nNOTE: Mounting with the nodelalloc option will avoid this codepath,\nand thus, avoid this hang\n\nSigned-off-by: Toshiyuki Okajima \u003ctoshi.okajima@jp.fujitsu.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "b443e7339aa08574d30b0819b344618459c76214",
      "tree": "3c89ccd60deee6184b5cc9cf2bbb78291952b047",
      "parents": [
        "659c6009ca2e3a01acc9881bafe5f55ef09c965b"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Wed Oct 27 21:30:03 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:03 2010 -0400"
      },
      "message": "ext4: don\u0027t bump up LONG_MAX nr_to_write by a factor of 8\n\nI\u0027m uneasy with lots of stuff going on in ext4_da_writepages(),\nbut bumping nr_to_write from LLONG_MAX to -8 clearly isn\u0027t\nmaking anything better, so avoid the multiplier in that case.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "659c6009ca2e3a01acc9881bafe5f55ef09c965b",
      "tree": "c7d6b0a8cfb8f5979f3f8d0e0e5122ffd9c688be",
      "parents": [
        "fb1813f4a8a27bbd4735967e46931e61fc837a3e"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Wed Oct 27 21:30:03 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:03 2010 -0400"
      },
      "message": "ext4: stop looping in ext4_num_dirty_pages when max_pages reached\n\nToday we simply break out of the inner loop when we have accumulated\nmax_pages; this keeps scanning forwad and doing pagevec_lookup_tag()\nin the while (!done) loop, this does potentially a lot of work\nwith no net effect.\n\nWhen we have accumulated max_pages, just clean up and return.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "ebdec241d509cf69f6ebf1ecdc036359d3dbe154",
      "tree": "e3c23f9b213936cb8501c83f55522a01f4a69aca",
      "parents": [
        "56b0dacfa2b8416815a2f2a5f4f51e46be4cf14c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed Oct 06 10:47:23 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:18:20 2010 -0400"
      },
      "message": "fs: kill block_prepare_write\n\n__block_write_begin and block_prepare_write are identical except for slightly\ndifferent calling conventions.  Convert all callers to the __block_write_begin\ncalling conventions and drop block_prepare_write.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "5f248c9c251c60af3403902b26e08de43964ea0b",
      "tree": "6d3328e72a7e4015a64017eb30be18095c6a3c64",
      "parents": [
        "f6cec0ae58c17522a7bc4e2f39dae19f199ab534",
        "dca332528bc69e05f67161e1ed59929633d5e63d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 11:26:52 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 11:26:52 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (96 commits)\n  no need for list_for_each_entry_safe()/resetting with superblock list\n  Fix sget() race with failing mount\n  vfs: don\u0027t hold s_umount over close_bdev_exclusive() call\n  sysv: do not mark superblock dirty on remount\n  sysv: do not mark superblock dirty on mount\n  btrfs: remove junk sb_dirt change\n  BFS: clean up the superblock usage\n  AFFS: wait for sb synchronization when needed\n  AFFS: clean up dirty flag usage\n  cifs: truncate fallout\n  mbcache: fix shrinker function return value\n  mbcache: Remove unused features\n  add f_flags to struct statfs(64)\n  pass a struct path to vfs_statfs\n  update VFS documentation for method changes.\n  All filesystems that need invalidate_inode_buffers() are doing that explicitly\n  convert remaining -\u003eclear_inode() to -\u003eevict_inode()\n  Make -\u003edrop_inode() just return whether inode needs to be dropped\n  fs/inode.c:clear_inode() is gone\n  fs/inode.c:evict() doesn\u0027t care about delete vs. non-delete paths now\n  ...\n\nFix up trivial conflicts in fs/nilfs2/super.c\n"
    },
    {
      "commit": "0930fcc1ee2f0a810b938bc283a3a262d7adccbb",
      "tree": "5e5d10894f1e31a7aede75110b43d7a41347631d",
      "parents": [
        "7da08fd17a6e42d80f0f3897a5cbd682e77bcdb4"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 07 13:16:22 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 09 16:48:30 2010 -0400"
      },
      "message": "convert ext4 to -\u003eevict_inode()\n\npretty much brute-force...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1025774ce411f2bd4b059ad7b53f0003569b74fa",
      "tree": "2be221c205cb5579652a6063e8ee27d1c72d1bbd",
      "parents": [
        "eef2380c187890816b73b1a4cb89a09203759469"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Jun 04 11:30:02 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 09 16:47:37 2010 -0400"
      },
      "message": "remove inode_setattr\n\nReplace inode_setattr with opencoded variants of it in all callers.  This\nmoves the remaining call to vmtruncate into the filesystem methods where it\ncan be replaced with the proper truncate sequence.\n\nIn a few cases it was obvious that we would never end up calling vmtruncate\nso it was left out in the opencoded variant:\n\n spufs: explicitly checks for ATTR_SIZE earlier\n btrfs,hugetlbfs,logfs,dlmfs: explicitly clears ATTR_SIZE earlier\n ufs: contains an opencoded simple_seattr + truncate that sets the filesize just above\n\nIn addition to that ncpfs called inode_setattr with handcrafted iattrs,\nwhich allowed to trim down the opencoded variant.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6e1db88d536adcbbfe562b2d4b7d6425784fff12",
      "tree": "8cfcb5a6190722db6249b2e4978f39247975abcf",
      "parents": [
        "f4e420dc423148fba637af1ab618fa8896dfb2d6"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Jun 04 11:29:57 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 09 16:47:32 2010 -0400"
      },
      "message": "introduce __block_write_begin\n\nSplit up the block_write_begin implementation - __block_write_begin is a new\ntrivial wrapper for block_prepare_write that always takes an already\nallocated page and can be either called from block_write_begin or filesystem\ncode that already has a page allocated.  Remove the handling of already\nallocated pages from block_write_begin after switching all callers that\ndo it to __block_write_begin.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "eafdc7d190a944c755a9fe68573c193e6e0217e7",
      "tree": "915c3cc8004706fabf88eae1ab123a3fa0147516",
      "parents": [
        "256249584bda1a9357e2d29987a37f5b2df035f6"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Jun 04 11:29:53 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 09 16:47:29 2010 -0400"
      },
      "message": "sort out blockdev_direct_IO variants\n\nMove the call to vmtruncate to get rid of accessive blocks to the callers\nin prepearation of the new truncate calling sequence.  This was only done\nfor DIO_LOCKING filesystems, so the __blockdev_direct_IO_newtrunc variant\nwas not needed anyway.  Get rid of blockdev_direct_IO_no_locking and\nits _newtrunc variant while at it as just opencoding the two additional\nparamters is shorted than the name suffix.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "56d35a4cd13e7bc5eca5b2dba5a41794afb17e11",
      "tree": "8173b2de9f0f2b596812a725ac1897efa0ba38fc",
      "parents": [
        "0cfc9255a1efb0467de2162950197750570ecec0"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Thu Aug 05 14:41:42 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Aug 05 14:41:42 2010 -0400"
      },
      "message": "ext4: Fix dirtying of journalled buffers in data\u003djournal mode\n\nIn data\u003djournal mode, we still use block_write_begin() to prepare\npage for writing. This function can occasionally mark buffer dirty\nwhich violates journalling assumptions - when a buffer is part of\na transaction, it should be dirty and a buffer can be already part\nof a forget list of some transaction when block_write_begin()\ngets called. This violation of journalling assumptions then results\nin \"JBD: Spotted dirty metadata buffer...\" warnings.\n\nIn fact, temporary dirtying the buffer while the page is still locked\ndoes not really cause problems to the journalling because we won\u0027t write\nthe buffer until the page gets unlocked. So we just have to make sure\nto clear dirty bits before unlocking the page.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "a931da6ac9331a6c80dd91c199105806f2336188",
      "tree": "2d4ea766def9a98d21c2379f41e796b0e57ccd6b",
      "parents": [
        "a51dca9cd3bb4ec5a05bfb6feabf024a5c808a37"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Aug 03 21:35:12 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Aug 03 21:35:12 2010 -0400"
      },
      "message": "jbd2: Change j_state_lock to be a rwlock_t\n\nLockstat reports have shown that j_state_lock is a major source of\nlock contention, especially on systems with more than 4 CPU cores.  So\nchange it to be a read/write spinlock.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "4538821993f4486c76090dfb377c60c0a0e71ba3",
      "tree": "d196075a963896c25df9ceb983a19ce82f5eab9b",
      "parents": [
        "f613dfcb3345dacb8cf99b7bb359acc1c18a1157"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Jul 29 15:06:10 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Jul 29 15:06:10 2010 -0400"
      },
      "message": "ext4: drop inode from orphan list if ext4_delete_inode() fails\n\nThere were some error paths in ext4_delete_inode() which was not\ndropping the inode from the orphan list.  This could lead to a BUG_ON\non umount when the orphan list is discovered to be non-empty.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "e3570639c8b5f2c6a5018a2649c2b7c276af76d7",
      "tree": "07c497204ba370c5e64b5868aa704e269e5893a3",
      "parents": [
        "d889dc8382c4d71b6d538b7b13777bc1ec51df10"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Tue Jul 27 11:56:08 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:08 2010 -0400"
      },
      "message": "ext4: don\u0027t print scary messages for allocation failures post-abort\n\nI often get emails containing the \"This should not happen!!\" message,\nconveniently trimmed to remove things like:\n\nsd 0:0:0:0: [sda] Unhandled error code\nsd 0:0:0:0: [sda] Result: hostbyte\u003dDID_OK driverbyte\u003dDRIVER_TIMEOUT\nsd 0:0:0:0: [sda] CDB: Write(10): 2a 00 03 13 c9 70 00 00 28 00\nend_request: I/O error, dev sda, sector 51628400\nAborting journal on device dm-0-8.\nEXT4-fs error (device dm-0): ext4_journal_start_sb: Detected aborted journal\nEXT4-fs (dm-0): Remounting filesystem read-only\n\nI don\u0027t think there is any value to the verbosity if the reason is\ndue to a filesystem abort; it just obfuscates the root cause.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "79e8303677fc15f508b9877e0fea1925c4add6f3",
      "tree": "85891ab05b2a9e5dd47966fd16bc372df6d4bb88",
      "parents": [
        "62d2b5f2dcd3707b070efb16bbfdf6947c38c194"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Tue Jul 27 11:56:07 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:07 2010 -0400"
      },
      "message": "ext4: fix ext4_get_blocks references\n\next4_get_blocks got renamed to ext4_map_blocks, but left stale\ncomments and a prototype littered around.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "0c095c7f113e9fd05913d6e1b2cccbe356be039e",
      "tree": "f23477719c99d5c20b4f1817c0ebe302a74eb870",
      "parents": [
        "506bf2d82165c09b179a5077e01037f6270a4db3"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:06 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:06 2010 -0400"
      },
      "message": "ext4: Don\u0027t error out the fs if the user tries to make a file too big\n\nIf the user attempts to make a non-extent-mapped file to be too large,\nreturn EFBIG, but don\u0027t call ext4_std_err() which will end up marking\nthe file system as containing an error.\n\nThanks to Toshiyuki Okajima-san at Fujitsu for pointing this out.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "5b3ff237bef43b9e7fb7d1eb858e29b73fd664f9",
      "tree": "e3810d974a0e51a8c4b9046abdd36a5a4022abb3",
      "parents": [
        "552ef8024f909d9b3a7442d0ab0d48a22de24e9e"
      ],
      "author": {
        "name": "jiayingz@google.com (Jiaying Zhang)",
        "email": "",
        "time": "Tue Jul 27 11:56:06 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:06 2010 -0400"
      },
      "message": "ext4: move aio completion after unwritten extent conversion\n\nThis patch is to be applied upon Christoph\u0027s \"direct-io: move aio_complete\ninto -\u003eend_io\" patch. It adds iocb and result fields to struct ext4_io_end_t,\nso that we can call aio_complete from  ext4_end_io_nolock() after the extent\nconversion has finished.\n\nI have verified with Christoph\u0027s aio-dio test that used to fail after a few\nruns on an original kernel but now succeeds on the patched kernel.\n\nSee http://thread.gmane.org/gmane.comp.file-systems.ext4/19659 for details.\n\nSigned-off-by: Jiaying Zhang \u003cjiayingz@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "552ef8024f909d9b3a7442d0ab0d48a22de24e9e",
      "tree": "868af331b76e12c8d17b8449094065a069e0d759",
      "parents": [
        "5c521830cf3dfcf7638d409d8e02ed21020c064f"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Jul 27 11:56:06 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:06 2010 -0400"
      },
      "message": "direct-io: move aio_complete into -\u003eend_io\n\nFilesystems with unwritten extent support must not complete an AIO request\nuntil the transaction to convert the extent has been commited.  That means\nthe aio_complete calls needs to be moved into the -\u003eend_io callback so\nthat the filesystem can control when to call it exactly.\n\nThis makes a bit of a mess out of dio_complete and the -\u003eend_io callback\nprototype even more complicated. \n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Jan Kara \u003cjack@suse.cz\u003e \nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "40389687382bf0ae71458e7c0f828137a438a956",
      "tree": "d2a49d494754e7fa28d33c2389f78a5b5da0db4f",
      "parents": [
        "a271fe8527fe9637bdd82c97123b1356940dd84b"
      ],
      "author": {
        "name": "Amir G",
        "email": "amir73il@users.sourceforge.net",
        "time": "Tue Jul 27 11:56:05 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:05 2010 -0400"
      },
      "message": "ext4: Fix block bitmap inconsistencies after a crash when deleting files\n\nWe have experienced bitmap inconsistencies after crash during file\ndelete under heavy load.  The crash is not file system related and I\nthe following patch in ext4_free_branches() fixes the recovery\nproblem.\n\nIf the transaction is restarted and there is a crash before the new\ntransaction is committed, then after recovery, the blocks that this\nindirect block points to have been freed, but the indirect block\nitself has not been freed and may still point to some of the free\nblocks (because of the ext4_forget()).\n\nSo ext4_forget() should be called inside ext4_free_blocks() to avoid\nthis problem.\n\nSigned-off-by: Amir Goldstein \u003camir73il@users.sf.net\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "1c13d5c0872870cca3e612aa045d492ead9ab004",
      "tree": "6e3dd0d3f49ff56dda9fc6cd72c233759bc24e09",
      "parents": [
        "c398eda0e43a791be0fca6f197a1e2bbb9f16070"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:03 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:03 2010 -0400"
      },
      "message": "ext4: Save error information to the superblock for analysis\n\nSave number of file system errors, and the time function name, line\nnumber, block number, and inode number of the first and most recent\nerrors reported on the file system in the superblock.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c398eda0e43a791be0fca6f197a1e2bbb9f16070",
      "tree": "d7b2b95490f96a75e116a3aa13c17767aa630342",
      "parents": [
        "60fd4da34d55a9cc0d857fc76dc12cf8cab4ed02"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:40 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:40 2010 -0400"
      },
      "message": "ext4: Pass line numbers to ext4_error() and friends\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "40e2e97316af6e62affab7a392e792494b8d9dde",
      "tree": "981ce3b464467893683d47f52ae5d35fdd32d46a",
      "parents": [
        "696123fca877905696591829c97a2cef11c8d048"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sun Jul 18 21:17:09 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 16:09:02 2010 -0500"
      },
      "message": "direct-io: move aio_complete into -\u003eend_io\n\nFilesystems with unwritten extent support must not complete an AIO request\nuntil the transaction to convert the extent has been commited.  That means\nthe aio_complete calls needs to be moved into the -\u003eend_io callback so\nthat the filesystem can control when to call it exactly.\n\nThis makes a bit of a mess out of dio_complete and the -\u003eend_io callback\nprototype even more complicated.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "e29136f80e775b0310273932b4297a62f5574a29",
      "tree": "d10d56b15b7968744ea0becdf61440aae7e609c5",
      "parents": [
        "c67d859e39896e4286249da89c4ca0ef8bd949cb"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jun 29 12:54:28 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jun 29 12:54:28 2010 -0400"
      },
      "message": "ext4: Enhance ext4_grp_locked_error() to take block and function numbers\n\nAlso use a macro definition so that __func__ and __LINE__ is implicit.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "206f7ab4f49a2021fcb8687f25395be77711ddee",
      "tree": "19764d36a25ec1e088d32572a1c0936eeaf19636",
      "parents": [
        "5a0790c2c4a18435759a70e1562450035d778339"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Jun 14 14:42:49 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 14 14:42:49 2010 -0400"
      },
      "message": "ext4: remove vestiges of nobh support\n\nThe nobh option was only supported for writeback mode, but given that all\nwrite paths actually create buffer heads it effectively was a no-op already.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "5a0790c2c4a18435759a70e1562450035d778339",
      "tree": "80acb12d0e37196cf60ae4ca150c6b556115f302",
      "parents": [
        "07a038245b28df9196ffb2e8cc626e9b956a4e23"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "andi@firstfloor.org",
        "time": "Mon Jun 14 13:28:03 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 14 13:28:03 2010 -0400"
      },
      "message": "ext4: remove initialized but not read variables\n\nNo real bugs found, just removed some dead code.\n\nFound by gcc 4.6\u0027s new warnings.\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "07a038245b28df9196ffb2e8cc626e9b956a4e23",
      "tree": "33faae4d5785d5cdd83381f0feff5798845feafc",
      "parents": [
        "a0375156ca1041574b5d47cc7e32f10b891151b0"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 14 09:54:48 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 14 09:54:48 2010 -0400"
      },
      "message": "ext4: Convert more i_flags references to use accessor functions\n\nThese changes are not ones which are likely to result in races, but\nthey should be fixed.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "84a8dce2710cc425089a2b92acc354d4fbb5788d",
      "tree": "2d83f638d52326b6a8080a26aa1423fa28b38ff1",
      "parents": [
        "1f5a81e41f8b1a782c68d3843e9ec1bfaadf7d72"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Sat Jun 05 11:51:27 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jun 05 11:51:27 2010 -0400"
      },
      "message": "ext4: Fix remaining racy updates of EXT4_I(inode)-\u003ei_flags\n\nA few functions were still modifying i_flags in a racy manner.\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "e4ce30f3779c2ddaa7dfaa4042209e5dbacbada5",
      "tree": "cc64c1dcd16b5dbf71ebc8338b339e6fb04abaee",
      "parents": [
        "b899ebeb05da4287ce845976727e3e83dadd25d5",
        "14ece1028b3ed53ffec1b1213ffc6acaf79ad77c"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 10:26:37 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 10:26:37 2010 -0700"
      },
      "message": "Merge branch \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4\n\n* \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: (40 commits)\n  ext4: Make fsync sync new parent directories in no-journal mode\n  ext4: Drop whitespace at end of lines\n  ext4: Fix compat EXT4_IOC_ADD_GROUP\n  ext4: Conditionally define compat ioctl numbers\n  tracing: Convert more ext4 events to DEFINE_EVENT\n  ext4: Add new tracepoints to track mballoc\u0027s buddy bitmap loads\n  ext4: Add a missing trace hook\n  ext4: restart ext4_ext_remove_space() after transaction restart\n  ext4: Clear the EXT4_EOFBLOCKS_FL flag only when warranted\n  ext4: Avoid crashing on NULL ptr dereference on a filesystem error\n  ext4: Use bitops to read/modify i_flags in struct ext4_inode_info\n  ext4: Convert calls of ext4_error() to EXT4_ERROR_INODE()\n  ext4: Convert callers of ext4_get_blocks() to use ext4_map_blocks()\n  ext4: Add new abstraction ext4_map_blocks() underneath ext4_get_blocks()\n  ext4: Use our own write_cache_pages()\n  ext4: Show journal_checksum option\n  ext4: Fix for ext4_mb_collect_stats()\n  ext4: check for a good block group before loading buddy pages\n  ext4: Prevent creation of files larger than RLIMIT_FSIZE using fallocate\n  ext4: Remove extraneous newlines in ext4_msg() calls\n  ...\n\nFixed up trivial conflict in fs/ext4/fsync.c\n"
    },
    {
      "commit": "12755627bdcddcdb30a1bfb9a09395a52b1d6838",
      "tree": "b2d69696975d5457648020324f683a45302fbf3c",
      "parents": [
        "fcbc59f96e38a0999e827be9d04d46b62b53b20a"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Thu Apr 08 22:04:20 2010 +0400"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Fri May 21 19:30:45 2010 +0200"
      },
      "message": "quota: unify quota init condition in setattr\n\nQuota must being initialized if size or uid/git changes requested.\nBut initialization performed in two different places:\nin case of i_size file system is responsible for dquot init\n, but in case of uid/gid init will be called internally in\ndquot_transfer().\nThis ambiguity makes code harder to understand.\nLet\u0027s move this logic to one common helper function.\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "60e6679e28518ccd67169c4a539d8cc7490eb8a6",
      "tree": "65f39d1e9da3006df5bc5532d0c8a7ec365599f0",
      "parents": [
        "4d92dc0f00a775dc2e1267b0e00befb783902fe7"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon May 17 07:00:00 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon May 17 07:00:00 2010 -0400"
      },
      "message": "ext4: Drop whitespace at end of lines\n\nThis patch was generated using:\n\n#!/usr/bin/perl -i\nwhile (\u003c\u003e) {\n    s/[ \t]+$//;\n    print;\n}\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "5a58ec8766e0ce98fd585eb404b3e56935afafe6",
      "tree": "191f9457a05ffe7803712f62d40d848d58987765",
      "parents": [
        "0617b83fa239db9743a18ce6cc0e556f4d0fd567"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Mon May 17 02:00:00 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon May 17 02:00:00 2010 -0400"
      },
      "message": "ext4: Add a missing trace hook\n\nCommit f8ec9d6837241865cf99bed97bb99f4399fd5a03 added a\ntrace event ext4_da_release_space, but didn\u0027t add some\ncorresponding trace hook.\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "12e9b892002d9af057655d35b44db8ee9243b0dc",
      "tree": "c5831b4bcf98eebdd39158d08dab97c198f5c683",
      "parents": [
        "24676da469f50f433baa347845639662c561d1f6"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Sun May 16 22:00:00 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 16 22:00:00 2010 -0400"
      },
      "message": "ext4: Use bitops to read/modify i_flags in struct ext4_inode_info\n\nAt several places we modify EXT4_I(inode)-\u003ei_flags without holding\ni_mutex (ext4_do_update_inode, ...). These modifications are racy and\nwe can lose updates to i_flags. So convert handling of i_flags to use\nbitops which are atomic.\n\nhttps://bugzilla.kernel.org/show_bug.cgi?id\u003d15792\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "24676da469f50f433baa347845639662c561d1f6",
      "tree": "b4b8205f8b50376af286193d0dcbe76f2bc2d1e1",
      "parents": [
        "2ed886852adfcb070bf350e66a0da0d98b2f3ab5"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 16 21:00:00 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 16 21:00:00 2010 -0400"
      },
      "message": "ext4: Convert calls of ext4_error() to EXT4_ERROR_INODE()\n\nEXT4_ERROR_INODE() tends to provide better error information and in a\nmore consistent format.  Some errors were not even identifying the inode\nor directory which was corrupted, which made them not very useful.\n\nAddresses-Google-Bug: #2507977\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "2ed886852adfcb070bf350e66a0da0d98b2f3ab5",
      "tree": "bcec0a1004f413b70087e2c43097892f87f21cc3",
      "parents": [
        "e35fd6609b2fee54484d520deccb8f18bf7d38f3"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 16 20:00:00 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 16 20:00:00 2010 -0400"
      },
      "message": "ext4: Convert callers of ext4_get_blocks() to use ext4_map_blocks()\n\nThis saves a huge amount of stack space by avoiding unnecesary struct\nbuffer_head\u0027s from being allocated on the stack.\n\nIn addition, to make the code easier to understand, collapse and\nrefactor ext4_get_block(), ext4_get_block_write(),\nnoalloc_get_block_write(), into a single function.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "e35fd6609b2fee54484d520deccb8f18bf7d38f3",
      "tree": "9b786445602819074f599c282b31bead166e8c03",
      "parents": [
        "8e48dcfbd7c0892b4cfd064d682cc4c95a29df32"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 16 19:00:00 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 16 19:00:00 2010 -0400"
      },
      "message": "ext4: Add new abstraction ext4_map_blocks() underneath ext4_get_blocks()\n\nJack up ext4_get_blocks() and add a new function, ext4_map_blocks()\nwhich uses a much smaller structure, struct ext4_map_blocks which is\n20 bytes, as opposed to a struct buffer_head, which nearly 5 times\nbigger on an x86_64 machine.  By switching things to use\next4_map_blocks(), we can save stack space by using ext4_map_blocks()\nsince we can avoid allocating a struct buffer_head on the stack.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "8e48dcfbd7c0892b4cfd064d682cc4c95a29df32",
      "tree": "653f12cc4eea9606c80142752612ad28f1ccdb45",
      "parents": [
        "39a4bade8c1826b658316d66ee81c09b0a4d7d42"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 16 18:00:00 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 16 18:00:00 2010 -0400"
      },
      "message": "ext4: Use our own write_cache_pages()\n\nMake a copy of write_cache_pages() for the benefit of\next4_da_writepages().  This allows us to simplify the code some, and\nwill allow us to further customize the code in future patches.\n\nThere are some nasty hacks in write_cache_pages(), which Linus has\n(correctly) characterized as vile.  I\u0027ve just copied it into\nwrite_cache_pages_da(), without trying to clean those bits up lest I\nbreak something in the ext4\u0027s delalloc implementation, which is a bit\nfragile right now.  This will allow Dave Chinner to clean up\nwrite_cache_pages() in mm/page-writeback.c, without worrying about\nbreaking ext4.  Eventually write_cache_pages_da() will go away when I\nrewrite ext4\u0027s delayed allocation and create a general\next4_writepages() which is used for all of ext4\u0027s writeback.  Until\nnow this is the lowest risk way to clean up the core\nwrite_cache_pages() function.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\n"
    },
    {
      "commit": "fbe845ddf368f77f86aa7500f8fd2690f54c66a8",
      "tree": "81e62af0c35794a4c0a2802d0528cacb43f2b4de",
      "parents": [
        "d4c402d9fd97a54bb7ed89f9e9869897eb4f6e1f"
      ],
      "author": {
        "name": "Curt Wohlgemuth",
        "email": "curtw@google.com",
        "time": "Sun May 16 13:00:00 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 16 13:00:00 2010 -0400"
      },
      "message": "ext4: Remove extraneous newlines in ext4_msg() calls\n\nAddresses-Google-Bug: #2562325\n\nSigned-off-by: Curt Wohlgemuth \u003ccurtw@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "72b8ab9dde211ea518ff27e631b2046ef90c29a2",
      "tree": "f63fc1894bcc39c81060e2fd8b21bedd07a1e958",
      "parents": [
        "0e05842bc117ea70ceb979cca798fd026879951b"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Sun May 16 11:00:00 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 16 11:00:00 2010 -0400"
      },
      "message": "ext4: don\u0027t use quota reservation for speculative metadata\n\nBecause we can badly over-reserve metadata when we\ncalculate worst-case, it complicates things for quota, since\nwe must reserve and then claim later, retry on EDQUOT, etc.\nQuota is also a generally smaller pool than fs free blocks,\nso this over-reservation hurts more, and more often.\n\nI\u0027m of the opinion that it\u0027s not the worst thing to allow\nmetadata to push a user slightly over quota.  This simplifies\nthe code and avoids the false quota rejections that result\nfrom worst-case speculation.\n\nThis patch stops the speculative quota-charging for\nworst-case metadata requirements, and just charges quota\nwhen the blocks are allocated at writeout.  It also is\nable to remove the try-again loop on EDQUOT.\n\nThis patch has been tested indirectly by running the xfstests\nsuite with a hack to mount \u0026 enable quota prior to the test.\n\nI also did a more specific test of fragmenting freespace\nand then doing a large delalloc write under quota; quota\nstopped me at the right amount of file IO, and then the\nwriteout generated enough metadata (due to the fragmentation)\nthat it put me slightly over quota, as expected.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c445e3e0a5c2804524dec6e55f66d63f6bc5bc3e",
      "tree": "e4839825628b6d3aa3a9141e32370d5edebcc546",
      "parents": [
        "a30eec2a8650a77f754e84b2e15f062fe652baa7"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Sun May 16 04:00:00 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 16 04:00:00 2010 -0400"
      },
      "message": "ext4: don\u0027t scan/accumulate more pages than mballoc will allocate\n\nThere was a bug reported on RHEL5 that a 10G dd on a 12G box\nhad a very, very slow sync after that.\n\nAt issue was the loop in write_cache_pages scanning all the way\nto the end of the 10G file, even though the subsequent call\nto mpage_da_submit_io would only actually write a smallish amt; then\nwe went back to the write_cache_pages loop ... wasting tons of time\nin calling __mpage_da_writepage for thousands of pages we would\njust revisit (many times) later.\n\nUpstream it\u0027s not such a big issue for sys_sync because we get\nto the loop with a much smaller nr_to_write, which limits the loop.\n\nHowever, talking with Aneesh he realized that fsync upstream still\ngets here with a very large nr_to_write and we face the same problem.\n\nThis patch makes mpage_add_bh_to_extent stop the loop after we\u0027ve\naccumulated 2048 pages, by setting mpd-\u003eio_done \u003d 1; which ultimately\ncauses the write_cache_pages loop to break.\n\nRepeating the test with a dirty_ratio of 80 (to leave something for\nfsync to do), I don\u0027t see huge IO performance gains, but the reduction\nin cpu usage is striking: 80% usage with stock, and 2% with the\nbelow patch.  Instrumenting the loop in write_cache_pages clearly\nshows that we are wasting time here.\n\nEventually we need to change mpage_da_map_pages() also submit its I/O\nto the block layer, subsuming mpage_da_submit_io(), and then change it\ncall ext4_get_blocks() multiple times.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "35121c9860316d7799cea0fbc359a9186e7c2747",
      "tree": "6deb327895e42708a491a3b5d7a66b95cfb18003",
      "parents": [
        "b684b2ee9409f2890a8b3aea98525bbe5f84e276"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Sun May 16 00:00:00 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 16 00:00:00 2010 -0400"
      },
      "message": "ext4: fix quota accounting in case of fallocate\n\nallocated_meta_data is already included in \u0027used\u0027 variable.\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "202f2bb0708e968099a23fead4598a4c3f8f8637",
      "tree": "d014d6222ea90af157cfb0fcbf5677447353b95e",
      "parents": [
        "ddc9b34c3b3bc063a7d9eb891ae09b8f49cfb27e",
        "b90f687018e6d6c77d981b09203780f7001407e5"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Apr 25 10:01:51 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Apr 25 10:01:51 2010 -0700"
      },
      "message": "Merge branch \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4\n\n* \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4:\n  ext4: Issue the discard operation *before* releasing the blocks to be reused\n  ext4: Fix buffer head leaks after calls to ext4_get_inode_loc()\n  ext4: Fix possible lost inode write in no journal mode\n"
    },
    {
      "commit": "fd2dd9fbaf9e498ec63eef298921e36556f7214c",
      "tree": "fddd099cf65844f2d7d3498e25f83ec4c55fac52",
      "parents": [
        "8b472d739b2ddd8ab7fb278874f696cd95b25a5e"
      ],
      "author": {
        "name": "Curt Wohlgemuth",
        "email": "curtw@google.com",
        "time": "Sat Apr 03 17:44:16 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Apr 03 17:44:16 2010 -0400"
      },
      "message": "ext4: Fix buffer head leaks after calls to ext4_get_inode_loc()\n\nCalls to ext4_get_inode_loc() returns with a reference to a buffer\nhead in iloc-\u003ebh.  The callers of this function in ext4_write_inode()\nwhen in no journal mode and in ext4_xattr_fiemap() don\u0027t release the\nbuffer head after using it.\n\nAddresses-Google-Bug: #2548165\n\nSigned-off-by: Curt Wohlgemuth \u003ccurtw@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "8b472d739b2ddd8ab7fb278874f696cd95b25a5e",
      "tree": "c820b44837a7e6130bbf7710e09ce5c06118e764",
      "parents": [
        "2eaa9cfdf33b8d7fb7aff27792192e0019ae8fc6"
      ],
      "author": {
        "name": "Curt Wohlgemuth",
        "email": "curtw@google.com",
        "time": "Sat Apr 03 16:45:06 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Apr 03 16:45:06 2010 -0400"
      },
      "message": "ext4: Fix possible lost inode write in no journal mode\n\nIn the no-journal case, ext4_write_inode() will fetch the bh and call\nsync_dirty_buffer() on it.  However, if the bh has already been\nwritten and the bh reclaimed for some other purpose, AND if the inode\nis the only one in the inode table block in use, then\next4_get_inode_loc() will not read the inode table block from disk,\nbut as an optimization, fill the block with zero\u0027s assuming that its\ncaller will copy in the on-disk version of the inode.  This is not\ndone by ext4_write_inode(), so the contents of the inode can simply\nget lost.  The fix is to use __ext4_get_inode_loc() with in_mem set to\n0, instead of ext4_get_inode_loc().  Long term the API needs to be\nfixed so it\u0027s obvious why latter is not safe.\n\nAddresses-Google-Bug: #2526446\n\nSigned-off-by: Curt Wohlgemuth \u003ccurtw@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "5a0e3ad6af8660be21ca98a971cd00f331318c05",
      "tree": "5bfb7be11a03176a87296a43ac6647975c00a1d1",
      "parents": [
        "ed391f4ebf8f701d3566423ce8f17e614cde9806"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 24 17:04:11 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h\n\npercpu.h is included by sched.h and module.h and thus ends up being\nincluded when building most .c files.  percpu.h includes slab.h which\nin turn includes gfp.h making everything defined by the two files\nuniversally available and complicating inclusion dependencies.\n\npercpu.h -\u003e slab.h dependency is about to be removed.  Prepare for\nthis change by updating users of gfp and slab facilities include those\nheaders directly instead of assuming availability.  As this conversion\nneeds to touch large number of source files, the following script is\nused as the basis of conversion.\n\n  http://userweb.kernel.org/~tj/misc/slabh-sweep.py\n\nThe script does the followings.\n\n* Scan files for gfp and slab usages and update includes such that\n  only the necessary includes are there.  ie. if only gfp is used,\n  gfp.h, if slab is used, slab.h.\n\n* When the script inserts a new include, it looks at the include\n  blocks and try to put the new include such that its order conforms\n  to its surrounding.  It\u0027s put in the include block which contains\n  core kernel includes, in the same order that the rest are ordered -\n  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there\n  doesn\u0027t seem to be any matching order.\n\n* If the script can\u0027t find a place to put a new include (mostly\n  because the file doesn\u0027t have fitting include block), it prints out\n  an error message indicating which .h file needs to be added to the\n  file.\n\nThe conversion was done in the following steps.\n\n1. The initial automatic conversion of all .c files updated slightly\n   over 4000 files, deleting around 700 includes and adding ~480 gfp.h\n   and ~3000 slab.h inclusions.  The script emitted errors for ~400\n   files.\n\n2. Each error was manually checked.  Some didn\u0027t need the inclusion,\n   some needed manual addition while adding it to implementation .h or\n   embedding .c file was more appropriate for others.  This step added\n   inclusions to around 150 files.\n\n3. The script was run again and the output was compared to the edits\n   from #2 to make sure no file was left behind.\n\n4. Several build tests were done and a couple of problems were fixed.\n   e.g. lib/decompress_*.c used malloc/free() wrappers around slab\n   APIs requiring slab.h to be added manually.\n\n5. The script was run on all .h files but without automatically\n   editing them as sprinkling gfp.h and slab.h inclusions around .h\n   files could easily lead to inclusion dependency hell.  Most gfp.h\n   inclusion directives were ignored as stuff from gfp.h was usually\n   wildly available and often used in preprocessor macros.  Each\n   slab.h inclusion directive was examined and added manually as\n   necessary.\n\n6. percpu.h was updated not to include slab.h.\n\n7. Build test were done on the following configurations and failures\n   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my\n   distributed build env didn\u0027t work with gcov compiles) and a few\n   more options had to be turned off depending on archs to make things\n   build (like ipr on powerpc/64 which failed due to missing writeq).\n\n   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.\n   * powerpc and powerpc64 SMP allmodconfig\n   * sparc and sparc64 SMP allmodconfig\n   * ia64 SMP allmodconfig\n   * s390 SMP allmodconfig\n   * alpha SMP allmodconfig\n   * um on x86_64 SMP allmodconfig\n\n8. percpu.h modifications were reverted so that it could be applied as\n   a separate patch and serve as bisection point.\n\nGiven the fact that I had only a couple of failures from tests on step\n6, I\u0027m fairly confident about the coverage of this conversion patch.\nIf there is a breakage, it\u0027s likely to be something in one of the arch\nheaders which should be easily discoverable easily on most builds of\nthe specific arch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGuess-its-ok-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\n"
    },
    {
      "commit": "d330a5befb88875a9b3d2db62f9b74dadf660b13",
      "tree": "1d3d59cd0e35cf08519ecac6f086eb69f157cb20",
      "parents": [
        "57d54889cd00db2752994b389ba714138652e60c"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Sun Mar 14 18:17:54 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Mar 14 18:17:54 2010 -0400"
      },
      "message": "ext4: Fix estimate of # of blocks needed to write indirect-mapped files\n\nhttp://bugzilla.kernel.org/show_bug.cgi?id\u003d15420\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "e213e26ab3988c516c06eba4dcd030ac052f6dc9",
      "tree": "6e26fbdbb842b387697d73daf6e70cf718269a77",
      "parents": [
        "c812a51d11bbe983f4c24e32b59b265705ddd3c2",
        "efd8f0e6f6c1faa041f228d7113bd3a9db802d49"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 05 13:20:53 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 05 13:20:53 2010 -0800"
      },
      "message": "Merge branch \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6\n\n* \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6: (33 commits)\n  quota: stop using QUOTA_OK / NO_QUOTA\n  dquot: cleanup dquot initialize routine\n  dquot: move dquot initialization responsibility into the filesystem\n  dquot: cleanup dquot drop routine\n  dquot: move dquot drop responsibility into the filesystem\n  dquot: cleanup dquot transfer routine\n  dquot: move dquot transfer responsibility into the filesystem\n  dquot: cleanup inode allocation / freeing routines\n  dquot: cleanup space allocation / freeing routines\n  ext3: add writepage sanity checks\n  ext3: Truncate allocated blocks if direct IO write fails to update i_size\n  quota: Properly invalidate caches even for filesystems with blocksize \u003c pagesize\n  quota: generalize quota transfer interface\n  quota: sb_quota state flags cleanup\n  jbd: Delay discarding buffers in journal_unmap_buffer\n  ext3: quota_write cross block boundary behaviour\n  quota: drop permission checks from xfs_fs_set_xstate/xfs_fs_set_xquota\n  quota: split out compat_sys_quotactl support from quota.c\n  quota: split out netlink notification support from quota.c\n  quota: remove invalid optimization from quota_sync_all\n  ...\n\nFixed trivial conflicts in fs/namei.c and fs/ufs/inode.c\n"
    },
    {
      "commit": "9467c4fdd66f6810cecef0f1173330f3c6e67d45",
      "tree": "5fea180a10127c893b288dff2c8788b72d2eaea3",
      "parents": [
        "35c2e967d067ff02dc944f2434f024419c2fe83a",
        "a9185b41a4f84971b930c519f0c63bd450c4810d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 05 11:53:53 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 05 11:53:53 2010 -0800"
      },
      "message": "Merge branch \u0027write_inode2\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027write_inode2\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6:\n  pass writeback_control to -\u003ewrite_inode\n  make sure data is on disk before calling -\u003ewrite_inode\n"
    },
    {
      "commit": "a9185b41a4f84971b930c519f0c63bd450c4810d",
      "tree": "268cf4e206cca12fb9e1dd68984e7c190e465b46",
      "parents": [
        "26821ed40b4230259e770c9911180f38fcaa6f59"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Mar 05 09:21:37 2010 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 05 13:25:52 2010 -0500"
      },
      "message": "pass writeback_control to -\u003ewrite_inode\n\nThis gives the filesystem more information about the writeback that\nis happening.  Trond requested this for the NFS unstable write handling,\nand other filesystems might benefit from this too by beeing able to\ndistinguish between the different callers in more detail.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "871a293155a24554e153538d36e3a80fa169aefb",
      "tree": "7e38f5a2f9e87f63cbc4bc1077a4bb49dde441b0",
      "parents": [
        "907f4554e2521cb28b0009d17167760650a9561c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Mar 03 09:05:07 2010 -0500"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Fri Mar 05 00:20:30 2010 +0100"
      },
      "message": "dquot: cleanup dquot initialize routine\n\nGet rid of the initialize dquot operation - it is now always called from\nthe filesystem and if a filesystem really needs it\u0027s own (which none\ncurrently does) it can just call into it\u0027s own routine directly.\n\nRename the now static low-level dquot_initialize helper to __dquot_initialize\nand vfs_dq_init to dquot_initialize to have a consistent namespace.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "907f4554e2521cb28b0009d17167760650a9561c",
      "tree": "68dc49163fd34331f8efbd63592c8f1baa387031",
      "parents": [
        "9f7547580263d4a55efe06ce5cfd567f568be6e8"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Mar 03 09:05:06 2010 -0500"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Fri Mar 05 00:20:30 2010 +0100"
      },
      "message": "dquot: move dquot initialization responsibility into the filesystem\n\nCurrently various places in the VFS call vfs_dq_init directly.  This means\nwe tie the quota code into the VFS.  Get rid of that and make the\nfilesystem responsible for the initialization.   For most metadata operations\nthis is a straight forward move into the methods, but for truncate and\nopen it\u0027s a bit more complicated.\n\nFor truncate we currently only call vfs_dq_init for the sys_truncate case\nbecause open already takes care of it for ftruncate and open(O_TRUNC) - the\nnew code causes an additional vfs_dq_init for those which is harmless.\n\nFor open the initialization is moved from do_filp_open into the open method,\nwhich means it happens slightly earlier now, and only for regular files.\nThe latter is fine because we don\u0027t need to initialize it for operations\non special files, and we already do it as part of the namespace operations\nfor directories.\n\nAdd a dquot_file_open helper that filesystems that support generic quotas\ncan use to fill in -\u003eopen.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "b43fa8284d7790d9cca32c9c55e24f29be2fa33b",
      "tree": "acb7f205fe2a1ae324e0e11c50f43baaa6b8dfab",
      "parents": [
        "759bfee658beab14af7b357156461d0eb852be2c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Mar 03 09:05:03 2010 -0500"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Fri Mar 05 00:20:29 2010 +0100"
      },
      "message": "dquot: cleanup dquot transfer routine\n\nGet rid of the transfer dquot operation - it is now always called from\nthe filesystem and if a filesystem really needs it\u0027s own (which none\ncurrently does) it can just call into it\u0027s own routine directly.\n\nRename the now static low-level dquot_transfer helper to __dquot_transfer\nand vfs_dq_transfer to dquot_transfer to have a consistent namespace,\nand make the new dquot_transfer return a normal negative errno value\nwhich all callers expect.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "5dd4056db84387975140ff2568eaa0406f07985e",
      "tree": "03c26d7f6e3367b167bfeeb1a01654c6619573f4",
      "parents": [
        "49792c806d0bfd53afc789dcdf50dc9bed2c5b83"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Mar 03 09:05:00 2010 -0500"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Fri Mar 05 00:20:28 2010 +0100"
      },
      "message": "dquot: cleanup space allocation / freeing routines\n\nGet rid of the alloc_space, free_space, reserve_space, claim_space and\nrelease_rsv dquot operations - they are always called from the filesystem\nand if a filesystem really needs their own (which none currently does)\nit can just call into it\u0027s own routine directly.\n\nMove shared logic into the common __dquot_alloc_space,\ndquot_claim_space_nodirty and __dquot_free_space low-level methods,\nand rationalize the wrappers around it to move as much as possible\ncode into the common block for CONFIG_QUOTA vs not.  Also rename\nall these helpers to be named dquot_* instead of vfs_dq_*.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "9b1d0998d24f9c207d5fbdd0b8bac07284e0eda7",
      "tree": "0670c100d74086884c772e72d3e4135b57118515",
      "parents": [
        "67eeb5685d2a211c0252ac7884142e503c759500"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Wed Mar 03 16:19:32 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Mar 03 16:19:32 2010 -0500"
      },
      "message": "ext4: Release page references acquired in ext4_da_block_invalidatepages\n\nWe forget to release page references we acquire in\next4_da_block_invalidatepages.  Luckily, this function gets called only if we\nare not able to allocate blocks for delay-allocated data so that function\nshould better never be called.\n\nAlso cleanup handling of index variable.\n\nReported-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "273df556b6ee2065bfe96edab5888d3dc9b108d8",
      "tree": "19c73685fce581e4ed85ff845e0b2fc485cedf9c",
      "parents": [
        "b7adc1f363e72e9131a582cc2cb00eaf83f51a39"
      ],
      "author": {
        "name": "Frank Mayhar",
        "email": "fmayhar@google.com",
        "time": "Tue Mar 02 11:46:09 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Mar 02 11:46:09 2010 -0500"
      },
      "message": "ext4: Convert BUG_ON checks to use ext4_error() instead\n\nConvert a bunch of BUG_ONs to emit a ext4_error() message and return\nEIO.  This is a first pass and most notably does _not_ cover\nmballoc.c, which is a morass of void functions.\n\nSigned-off-by: Frank Mayhar \u003cfmayhar@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "b7adc1f363e72e9131a582cc2cb00eaf83f51a39",
      "tree": "9316acb7855ef64f051b4ee4c01f431c15cb4c1e",
      "parents": [
        "744692dc059845b2a3022119871846e74d4f6e11"
      ],
      "author": {
        "name": "Jiaying Zhang",
        "email": "jiayingz@google.com",
        "time": "Tue Mar 02 13:26:36 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Mar 02 13:26:36 2010 -0500"
      },
      "message": "ext4: Use direct_IO_no_locking in ext4 dio read\n\nSigned-off-by: Jiaying Zhang \u003cjiayingz@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "744692dc059845b2a3022119871846e74d4f6e11",
      "tree": "ed246651aebcb8dae57de8c58dc20983064ee017",
      "parents": [
        "c7064ef13b2181a489836349f9baf87df0dab28f"
      ],
      "author": {
        "name": "Jiaying Zhang",
        "email": "jiayingz@google.com",
        "time": "Thu Mar 04 16:14:02 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Mar 04 16:14:02 2010 -0500"
      },
      "message": "ext4: use ext4_get_block_write in buffer write\n\nAllocate uninitialized extent before ext4 buffer write and\nconvert the extent to initialized after io completes.\nThe purpose is to make sure an extent can only be marked\ninitialized after it has been written with new data so\nwe can safely drop the i_mutex lock in ext4 DIO read without\nexposing stale data. This helps to improve multi-thread DIO\nread performance on high-speed disks.\n\nSkip the nobh and data\u003djournal mount cases to make things simple for now.\n\nSigned-off-by: Jiaying Zhang \u003cjiayingz@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c7064ef13b2181a489836349f9baf87df0dab28f",
      "tree": "433d86d9ed4285e5c5e7f24fbbaa7f48fad09381",
      "parents": [
        "b8b8afe236e97b6359d46d3a3f8c46455e192271"
      ],
      "author": {
        "name": "Jiaying Zhang",
        "email": "jiayingz@google.com",
        "time": "Tue Mar 02 13:28:44 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Mar 02 13:28:44 2010 -0500"
      },
      "message": "ext4: mechanical rename some of the direct I/O get_block\u0027s identifiers\n\nThis commit renames some of the direct I/O\u0027s block allocation flags,\nvariables, and functions introduced in Mingming\u0027s \"Direct IO for holes\nand fallocate\" patches so that they can be used by ext4\u0027s buffered\nwrite path as well.  Also changed the related function comments\naccordingly to cover both direct write and buffered write cases.\n\nSigned-off-by: Jiaying Zhang \u003cjiayingz@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "da1dafca84413145f5ac59998b4cdd06fb89f721",
      "tree": "60582ee94c6867f234bb15bb18af8dd9be4f1693",
      "parents": [
        "f39490bcd1691d65dc33689222a12e1fc13dd824"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Mon Mar 01 23:15:02 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Mar 01 23:15:02 2010 -0500"
      },
      "message": "ext4: explicitly remove inode from orphan list after failed direct io\n\nOtherwise non-empty orphan list will be triggered on umount.\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c8d46e41bc744c8fa0092112af3942fcd46c8b18",
      "tree": "fd8bad55c3c9903b6c798b838396bc832bbf7f4b",
      "parents": [
        "73b50c1c92666d326b5fa2c945d46509f2f6d91f"
      ],
      "author": {
        "name": "Jiaying Zhang",
        "email": "jiayingz@google.com",
        "time": "Wed Feb 24 09:52:53 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Feb 24 09:52:53 2010 -0500"
      },
      "message": "ext4: Add flag to files with blocks intentionally past EOF\n\nfallocate() may potentially instantiate blocks past EOF, depending\non the flags used when it is called.\n\ne2fsck currently has a test for blocks past i_size, and it\nsometimes trips up - noticeably on xfstests 013 which runs fsstress.\n\nThis patch from Jiayang does fix it up - it (along with\ne2fsprogs updates and other patches recently from Aneesh) has\nsurvived many fsstress runs in a row.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: Jiaying Zhang \u003cjiayingz@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "73b50c1c92666d326b5fa2c945d46509f2f6d91f",
      "tree": "87e2cc6fed3259a83364ede33d8f4d68173f8175",
      "parents": [
        "ba869023eac8354b17acdcff82b851ea8e7b1809"
      ],
      "author": {
        "name": "Curt Wohlgemuth",
        "email": "curtw@google.com",
        "time": "Tue Feb 16 15:06:29 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Feb 16 15:06:29 2010 -0500"
      },
      "message": "ext4: Fix BUG_ON at fs/buffer.c:652 in no journal mode\n\nCalls to ext4_handle_dirty_metadata should only pass in an inode\npointer for inode-specific metadata, and not for shared metadata\nblocks such as inode table blocks, block group descriptors, the\nsuperblock, etc.\n\nThe BUG_ON can get tripped when updating a special device (such as a\nblock device) that is opened (so that i_mapping is set in\nfs/block_dev.c) and the file system is mounted in no journal mode.\n\nAddresses-Google-Bug: #2404870\n\nSigned-off-by: Curt Wohlgemuth \u003ccurtw@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "12062dddda450976b129dcb1bacd91acaf4d8030",
      "tree": "e64590b1147639cd3629f8a977b269410cd6bd13",
      "parents": [
        "f710b4b96ba292dfed2153afc47e9063b0abfd89"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Mon Feb 15 14:19:27 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Feb 15 14:19:27 2010 -0500"
      },
      "message": "ext4: move __func__ into a macro for ext4_warning, ext4_error\n\nJust a pet peeve of mine; we had a mishash of calls with either __func__\nor \"function_name\" and the latter tends to get out of sync.\n\nI think it\u0027s easier to just hide the __func__ in a macro, and it\u0027ll\nbe consistent from then on.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "19f5fb7ad679bb361222c7916086435020c37cce",
      "tree": "9e301163075c4faaf340cf50afd51855c76acd8c",
      "parents": [
        "d2eecb03936878ec574ade5532fa83df7d75dde7"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jan 24 14:34:07 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jan 24 14:34:07 2010 -0500"
      },
      "message": "ext4: Use bitops to read/modify EXT4_I(inode)-\u003ei_state\n\nAt several places we modify EXT4_I(inode)-\u003ei_state without holding\ni_mutex (ext4_release_file, ext4_bmap, ext4_journalled_writepage,\next4_do_update_inode, ...). These modifications are racy and we can\nlose updates to i_state. So convert handling of i_state to use bitops\nwhich are atomic.\n\nCc: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "1296cc85c26e94eb865d03f82140f27d598de467",
      "tree": "b8a2bc06ecd992a86179ebcd9c087994c676c291",
      "parents": [
        "5f634d064c709ea02c3cdaa850a08323a4a4bf28"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Fri Jan 15 01:27:59 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jan 15 01:27:59 2010 -0500"
      },
      "message": "ext4: Drop EXT4_GET_BLOCKS_UPDATE_RESERVE_SPACE flag\n\nWe should update reserve space if it is delalloc buffer\nand that is indicated by EXT4_GET_BLOCKS_DELALLOC_RESERVE flag.\nSo use EXT4_GET_BLOCKS_DELALLOC_RESERVE in place of\nEXT4_GET_BLOCKS_UPDATE_RESERVE_SPACE\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "5f634d064c709ea02c3cdaa850a08323a4a4bf28",
      "tree": "3f81e9c56cd8348b7bb94f1d54efff696374c929",
      "parents": [
        "1db913823c0f8360fccbd24ca67eb073966a5ffd"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Mon Jan 25 04:00:31 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 25 04:00:31 2010 -0500"
      },
      "message": "ext4: Fix quota accounting error with fallocate\n\nWhen we fallocate a region of the file which we had recently written,\nand which is still in the page cache marked as delayed allocated blocks\nwe need to make sure we don\u0027t do the quota update on writepage path.\nThis is because the needed quota updated would have already be done\nby fallocate.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "1db913823c0f8360fccbd24ca67eb073966a5ffd",
      "tree": "ec5f7be2cfa884b04ca3d26c2dee53283fe16ca7",
      "parents": [
        "74d2e4f8d79ae0c4b6ec027958d5b18058662eea"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Fri Jan 22 17:06:20 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jan 22 17:06:20 2010 -0500"
      },
      "message": "ext4: Handle -EDQUOT error on write\n\nWe need to release the journal before we do a write_inode.  Otherwise\nwe could deadlock.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "9d0be50230b333005635967f7ecd4897dbfd181b",
      "tree": "59aefe29e33284e1d904b23eaf2cc98994431374",
      "parents": [
        "ee5f4d9cdf32fd99172d11665c592a288c2b1ff4"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jan 01 02:41:30 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jan 01 02:41:30 2010 -0500"
      },
      "message": "ext4: Calculate metadata requirements more accurately\n\nIn the past, ext4_calc_metadata_amount(), and its sub-functions\next4_ext_calc_metadata_amount() and ext4_indirect_calc_metadata_amount()\nbadly over-estimated the number of metadata blocks that might be\nrequired for delayed allocation blocks.  This didn\u0027t matter as much\nwhen functions which managed the reserved metadata blocks were more\naggressive about dropping reserved metadata blocks as delayed\nallocation blocks were written, but unfortunately they were too\naggressive.  This was fixed in commit 0637c6f, but as a result the\nover-estimation by ext4_calc_metadata_amount() would lead to reserving\n2-3 times the number of pending delayed allocation blocks as\npotentially required metadata blocks.  So if there are 1 megabytes of\nblocks which have been not yet been allocation, up to 3 megabytes of\nspace would get reserved out of the user\u0027s quota and from the file\nsystem free space pool until all of the inode\u0027s data blocks have been\nallocated.\n\nThis commit addresses this problem by much more accurately estimating\nthe number of metadata blocks that will be required.  It will still\nsomewhat over-estimate the number of blocks needed, since it must make\na worst case estimate not knowing which physical blocks will be\nneeded, but it is much more accurate than before.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "ee5f4d9cdf32fd99172d11665c592a288c2b1ff4",
      "tree": "a1ae2af609d49524d6b807890852bc549889821f",
      "parents": [
        "0637c6f4135f592f094207c7c21e7c0fc5557834"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jan 01 02:36:15 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jan 01 02:36:15 2010 -0500"
      },
      "message": "ext4: Fix accounting of reserved metadata blocks\n\nCommit 0637c6f had a typo which caused the reserved metadata blocks to\nnot be released correctly.   Fix this.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "0637c6f4135f592f094207c7c21e7c0fc5557834",
      "tree": "ee76fc861dffa902e80d0d11c681f5dfa2fcc569",
      "parents": [
        "515f41c33a9d44a964264c9511ad2c869af1fac3"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Dec 30 14:20:45 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Dec 30 14:20:45 2009 -0500"
      },
      "message": "ext4: Patch up how we claim metadata blocks for quota purposes\n\nAs reported in Kernel Bugzilla #14936, commit d21cd8f triggered a BUG\nin the function ext4_da_update_reserve_space() found in\nfs/ext4/inode.c.  The root cause of this BUG() was caused by the fact\nthat ext4_calc_metadata_amount() can severely over-estimate how many\nmetadata blocks will be needed, especially when using direct\nblock-mapped files.\n\nIn addition, it can also badly *under* estimate how much space is\nneeded, since ext4_calc_metadata_amount() assumes that the blocks are\ncontiguous, and this is not always true.  If the application is\nwriting blocks to a sparse file, the number of metadata blocks\nnecessary can be severly underestimated by the functions\next4_da_reserve_space(), ext4_da_update_reserve_space() and\next4_da_release_space().  This was the cause of the dq_claim_space\nreports found on kerneloops.org.\n\nUnfortunately, doing this right means that we need to massively\nover-estimate the amount of free space needed.  So in some cases we\nmay need to force the inode to be written to disk asynchronously in\nto avoid spurious quota failures.\n\nhttp://bugzilla.kernel.org/show_bug.cgi?id\u003d14936\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    }
  ],
  "next": "2faf2e19dd0e060eeb32442858ef495ac3083277"
}
