)]}'
{
  "log": [
    {
      "commit": "5e44f8c374dc4f8eadf61cd18b2c0d46bc87c1b7",
      "tree": "ccecc6ddd068b809de59b45abe7714ee47076d95",
      "parents": [
        "b2f4edb335f23626225a792e0669d1becf68312f"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Fri Jun 01 00:15:28 2012 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jun 01 00:15:28 2012 -0400"
      },
      "message": "ext4: hole-punch use truncate_pagecache_range\n\nWhen truncating a file, we unmap pages from userspace first, as that\u0027s\nusually more efficient than relying, page by page, on the fallback in\ntruncate_inode_page() - particularly if the file is mapped many times.\n\nDo the same when punching a hole: 3.4 added truncate_pagecache_range()\nto do the unmap and trunc, so use it in ext4_ext_punch_hole(), instead\nof calling truncate_inode_pages_range() directly.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "4a3c3a5120bff77cc8c3a70c7cb681f458f47bfd",
      "tree": "8a303785b5f5cdf5f4a0113da3660fe1c0383273",
      "parents": [
        "400db9d30146dc062aaba97a6301b425eb6015bc"
      ],
      "author": {
        "name": "Zheng Liu",
        "email": "gnehzuil.liu@gmail.com",
        "time": "Mon May 28 17:55:16 2012 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon May 28 17:55:16 2012 -0400"
      },
      "message": "ext4: fix format flag in ext4_ext_binsearch_idx()\n\nfix ext_debug format flag in ext4_ext_binsearch_idx().\n\nSigned-off-by: Zheng Liu \u003cwenqing.lz@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "7ac5990d5a3e2e465162880819cc46c6427d3b6f",
      "tree": "7ff0eafbf69010425c69bca61bddbc1c58adc89b",
      "parents": [
        "fa77dcfafeaa6bc73293c646bfc3d5192dcf0be2"
      ],
      "author": {
        "name": "Darrick J. Wong",
        "email": "djwong@us.ibm.com",
        "time": "Sun Apr 29 18:37:10 2012 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Apr 29 18:37:10 2012 -0400"
      },
      "message": "ext4: verify and calculate checksums for extent tree  blocks\n\nCalculate and verify the checksum for each extent tree block.  The\nchecksum is located in the space immediately after the last possible\next4_extent in the block.  The space is is typically the last 4-8\nbytes in the block.\n\nSigned-off-by: Darrick J. Wong \u003cdjwong@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f84891289e62a74e9b4942eaad80617368b2d778",
      "tree": "6e86704a9780dd6ed97f25ba1cd32d59ffebf430",
      "parents": [
        "69964ea4c7b68c9399f7977aa5b9aa6539a6a98a"
      ],
      "author": {
        "name": "Darrick J. Wong",
        "email": "djwong@us.ibm.com",
        "time": "Sun Apr 29 18:21:10 2012 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Apr 29 18:21:10 2012 -0400"
      },
      "message": "ext4: create a new BH_Verified flag to avoid unnecessary metadata validation\n\nCreate a new BH_Verified flag to indicate that we\u0027ve verified all the\ndata in a buffer_head for correctness.  This allows us to bypass\nexpensive verification steps when they are not necessary without\nmissing them when they are.\n\nSigned-off-by: Darrick J. Wong \u003cdjwong@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "592fe8980688e7cba46897685d014c7fb3018a67",
      "tree": "da0df053994838535a6d260eaacf32c84e2619ef",
      "parents": [
        "d44c6d4fa9b3d9b4f6d8d1751d9cbc50ed53cffe",
        "57f73c2c89a5d3b2ed87201c8100d1fa989a1a65"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Apr 17 13:30:34 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Apr 17 13:30:34 2012 -0700"
      },
      "message": "Merge tag \u0027ext4_for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4\n\nPull ext4 regression fixes from Ted Ts\u0027o:\n \"This fixes a scalability problem reported by Andi Kleen and Tim Chen;\n  they were quite secretive about the precise nature of their workload,\n  but they later admitted that it only showed up when they were using a\n  large sparse file, so the amount of data I/O that was needed was close\n  to zero.\n\n  I\u0027m not sure how realistic this is and it\u0027s only a regression if you\n  consider changes made since 2.6.39 to be a \"regression\" vis-a-vis the\n  policy regarding post-merge window bug fixes, but Linus agreed it was\n  worth fixing, so I\u0027m including it in this pull request.\n\n  This also fixes the journalled quota mount options, which I\n  accidentally broke while I was cleaning up the mount option handling.\"\n\n* tag \u0027ext4_for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4:\n  ext4: fix handling of journalled quota options\n  ext4: address scalability issue by removing extent cache statistics\n"
    },
    {
      "commit": "9cd70b347e9761ea2d2ac3d758c529a48a8193e6",
      "tree": "f215d10558a62c34aff4528f1c40f1b154bd6c25",
      "parents": [
        "0034102808e0dbbf3a2394b82b1bb40b5778de9e"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Apr 16 12:16:20 2012 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Apr 16 12:16:20 2012 -0400"
      },
      "message": "ext4: address scalability issue by removing extent cache statistics\n\nAndi Kleen and Tim Chen have reported that under certain circumstances\nthe extent cache statistics are causing scalability problems due to\ncache line bounces.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "af1584f570b19b0285e4402a0b54731495d31784",
      "tree": "9f32e6f521d658a1365891998239198077d4b662",
      "parents": [
        "efe39651f08813180f37dc508d950fc7d92b29a8"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Apr 12 20:32:25 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Apr 13 10:12:08 2012 -0400"
      },
      "message": "ext4: fix endianness breakage in ext4_split_extent_at()\n\n-\u003eee_len is __le16, so assigning cpu_to_le32() to it is going to do\nBad Things(tm) on big-endian hosts...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "afcff5d80a4106e732d903640161d23950eb8e3b",
      "tree": "9a78cb5546c3f10bb98d3ce8b4f31889f5ad10bc",
      "parents": [
        "a7967f055a9438941268d725b268141c57e32a05"
      ],
      "author": {
        "name": "Lukas Czerner",
        "email": "lczerner@redhat.com",
        "time": "Wed Mar 21 21:47:55 2012 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Mar 21 21:47:55 2012 -0400"
      },
      "message": "ext4: remove restrictive checks for EOFBLOCKS_FL\n\nWe are going to remove the EOFBLOCKS_FL flag in the future, so this is\nthe first part of the removal. We can not remove it entirely just now,\nsince the e2fsck is still checking for it and it might cause headache to\nsome people. Instead, remove the restrictive checks now and the rest\nlater, when the new e2fsck code is out and common enough.\n\nThis is also needed because punch hole already breaks the EOFBLOCKS_FL\nsemantics, so it might cause the some troubles. So simply remove it.\n\nSigned-off-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "92b9781658dba287a1354ad74ed351f68c3ee740",
      "tree": "1dc2a11343544374321bf18340b0bf886c898f97",
      "parents": [
        "d9ee81da93e86ac45aef30b2493a1e68fc71b9d0"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Mar 19 23:41:49 2012 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Mar 19 23:41:49 2012 -0400"
      },
      "message": "ext4: change some printk() calls to use ext4_msg() instead\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "dc1841d6cff22b98deef46bfe768a9c678d917c2",
      "tree": "2d97eb9fd90fcd42bee4f5d7b7d9adb2459983f6",
      "parents": [
        "7877191c28b1e140795c0c951dde8aad43757378"
      ],
      "author": {
        "name": "Lukas Czerner",
        "email": "lczerner@redhat.com",
        "time": "Mon Mar 19 23:07:43 2012 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Mar 19 23:07:43 2012 -0400"
      },
      "message": "ext4: give more helpful error message in ext4_ext_rm_leaf()\n\nThe error message produced by the ext4_ext_rm_leaf() when we are\nremoving blocks which accidentally ends up inside the existing extent,\nis not very helpful, because we would like to also know which extent did\nwe collide with.\n\nThis commit changes the error message to get us also the information\nabout the extent we are colliding with.\n\nSigned-off-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "7877191c28b1e140795c0c951dde8aad43757378",
      "tree": "2ce9989e43ad3a072a109e6df8a7cb1939f55e6b",
      "parents": [
        "5f95d21fb6f2aaa52830e5b7fb405f6c71d3ab85"
      ],
      "author": {
        "name": "Lukas Czerner",
        "email": "lczerner@redhat.com",
        "time": "Mon Mar 19 23:05:43 2012 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Mar 19 23:05:43 2012 -0400"
      },
      "message": "ext4: remove unused code from ext4_ext_map_blocks()\n\nSince the commit \u0027Rewrite punch hole to use ext4_ext_remove_space()\u0027\nreworked the punch hole implementation to use ext4_ext_remove_space()\ninstead of ext4_ext_map_blocks(), we can remove the code which is no\nlonger needed from the ext4_ext_map_blocks().\n\nSigned-off-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "5f95d21fb6f2aaa52830e5b7fb405f6c71d3ab85",
      "tree": "383159c3d591279fcfae9695d64819f71636fd4b",
      "parents": [
        "3339578f05787259917788f461f4196b7349c2a4"
      ],
      "author": {
        "name": "Lukas Czerner",
        "email": "lczerner@redhat.com",
        "time": "Mon Mar 19 23:03:19 2012 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Mar 19 23:03:19 2012 -0400"
      },
      "message": "ext4: rewrite punch hole to use ext4_ext_remove_space()\n\nThis commit rewrites ext4 punch hole implementation to use\next4_ext_remove_space() instead of its home gown way of doing this via\next4_ext_map_blocks(). There are several reasons for changing this.\n\nFirstly it is quite non obvious that punching hole needs to\next4_ext_map_blocks() to punch a hole, especially given that this\nfunction should map blocks, not unmap it. It also required a lot of new\ncode in ext4_ext_map_blocks().\n\nSecondly the design of it is not very effective. The reason is that we\nare trying to punch out blocks in ext4_ext_punch_hole() in opposite\ndirection than in ext4_ext_rm_leaf() which causes the ext4_ext_rm_leaf()\nto iterate through the whole tree from the end to the start to find the\nrequested extent for every extent we are going to punch out.\n\nAnd finally the current implementation does not use the existing code,\nbut bring a lot of new code, which is IMO unnecessary since there\nalready is some infrastructure we can use. Specifically\next4_ext_remove_space().\n\nThis commit changes ext4_ext_remove_space() to accept \u0027end\u0027 parameter so\nwe can not only truncate to the end of file, but also remove the space\nin the middle of the file (punch a hole). Moreover, because the last\nblock to punch out, might be in the middle of the extent, we have to\nsplit the extent at \u0027end + 1\u0027 so ext4_ext_rm_leaf() can easily either\nremove the whole fist part of split extent, or change its size.\n\next4_ext_remove_space() is then used to actually remove the space\n(extents) from within the hole, instead of ext4_ext_map_blocks().\n\nNote that this also fix the issue with punch hole, where we would forget\nto remove empty index blocks from the extent tree, resulting in double\nfree block error and file system corruption. This is simply because we\nnow use different code path, where this problem does not exist.\n\nThis has been tested with fsx running for several days and xfstests,\nplus xfstest #251 with \u0027-o discard\u0027 run on the loop image (which\nconverts discard requestes into punch hole to the backing file). All of\nit on 1K and 4K file system block size.\n\nSigned-off-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "31d4f3a2f3c73f279ff96a7135d7202ef6833f12",
      "tree": "9240ee74aa863ea27f5e9c89e1e3cf0e4784c032",
      "parents": [
        "4188188bdc3aed29eb41fb1537305cff7431d062"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Mar 11 23:30:16 2012 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Mar 11 23:30:16 2012 -0400"
      },
      "message": "ext4: check for zero length extent\n\nExplicitly test for an extent whose length is zero, and flag that as a\ncorrupted extent.\n\nThis avoids a kernel BUG_ON assertion failure.\n\nTested: Without this patch, the file system image found in\ntests/f_ext_zero_len/image.gz in the latest e2fsprogs sources causes a\nkernel panic.  With this patch, an ext4 file system error is noted\ninstead, and the file system is marked as being corrupted.\n\nhttps://bugzilla.kernel.org/show_bug.cgi?id\u003d42859\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "ff9cb1c4eead5e4c292e75cd3170a82d66944101",
      "tree": "cdb132a39e550a9b7b28ea67544cb86cd6ebdb6e",
      "parents": [
        "e4e11180dfa545233e5145919b75b7fac88638df",
        "d50f2ab6f050311dbf7b8f5501b25f0bf64a439b"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jan 10 11:54:07 2012 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jan 10 11:54:07 2012 -0500"
      },
      "message": "Merge branch \u0027for_linus\u0027 into for_linus_merged\n\nConflicts:\n\tfs/ext4/ioctl.c\n"
    },
    {
      "commit": "ac69e0928054ff29a5049902fb477f9c7605c773",
      "tree": "05be6b9285186823452e0adeffe40e1dfee6e354",
      "parents": [
        "9e203936eac786f9268d6a13e6442d2accef1829",
        "302bf2f3259948c93361d501b04a5ed69c3bd4f8"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 09 12:51:21 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 09 12:51:21 2012 -0800"
      },
      "message": "Merge branch \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs\n\n* \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs:\n  ext2/3/4: delete unneeded includes of module.h\n  ext{3,4}: Fix potential race when setversion ioctl updates inode\n  udf: Mark LVID buffer as uptodate before marking it dirty\n  ext3: Don\u0027t warn from writepage when readonly inode is spotted after error\n  jbd: Remove j_barrier mutex\n  reiserfs: Force inode evictions before umount to avoid crash\n  reiserfs: Fix quota mount option parsing\n  udf: Treat symlink component of type 2 as /\n  udf: Fix deadlock when converting file from in-ICB one to normal one\n  udf: Cleanup calling convention of inode_getblk()\n  ext2: Fix error handling on inode bitmap corruption\n  ext3: Fix error handling on inode bitmap corruption\n  ext3: replace ll_rw_block with other functions\n  ext3: NULL dereference in ext3_evict_inode()\n  jbd: clear revoked flag on buffers before a new transaction started\n  ext3: call ext3_mark_recovery_complete() when recovery is really needed\n"
    },
    {
      "commit": "302bf2f3259948c93361d501b04a5ed69c3bd4f8",
      "tree": "22ccdf5774a28476745a94532b5ce2c2cc454d98",
      "parents": [
        "6c2155b9cc5a193e85194bbeaae2e2e4512dd597"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Wed Jan 04 15:59:47 2012 -0500"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Jan 09 13:52:10 2012 +0100"
      },
      "message": "ext2/3/4: delete unneeded includes of module.h\n\nDelete any instances of include module.h that were not strictly\nrequired.  In the case of ext2, the declaration of MODULE_LICENSE\netc. were in inode.c but the module_init/exit were in super.c, so\nrelocate the MODULE_LICENCE/AUTHOR block to super.c which makes it\nconsistent with ext3 and ext4 at the same time.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "88635ca277adb67db34e88281817d1ce10713553",
      "tree": "ebe43739198d84190d4138ae4083404609ae7f09",
      "parents": [
        "1ba37268cd19e5a2a80924bfe8618bf1ba3e8249"
      ],
      "author": {
        "name": "Zheng Liu",
        "email": "gnehzuil.liu@gmail.com",
        "time": "Wed Dec 28 19:00:25 2011 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Dec 28 19:00:25 2011 -0500"
      },
      "message": "ext4: add missing spaces to debugging printk\u0027s\n\nFix ext4_debug format in ext4_ext_handle_uninitialized_extents() and\next4_end_io_dio().\n\nSigned-off-by: Zheng Liu \u003cwenqing.lz@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "8c48f7e88e293b9dd422bd8884842aea85d30b22",
      "tree": "5a29043ea9c3453d648d2d0b32cfa616f90bc6a9",
      "parents": [
        "14d7f3efe923bc60839c65f9818793c64b4d708b"
      ],
      "author": {
        "name": "Robin Dong",
        "email": "sanbai@taobao.com",
        "time": "Sun Dec 18 23:05:43 2011 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Dec 18 23:05:43 2011 -0500"
      },
      "message": "ext4: optimize ext4_find_delalloc_range() in nodelalloc mode\n\nWe found performance regression when using bigalloc with \"nodelalloc\"\n(1MB cluster size):\n\n1. mke2fs -C 1048576 -O ^has_journal,bigalloc /dev/sda\n2. mount -o nodelalloc /dev/sda /test/\n3. time dd if\u003d/dev/zero of\u003d/test/io bs\u003d1048576 count\u003d1024\n\nThe \"dd\" will cost about 2 seconds to finish, but if we mke2fs without\n\"bigalloc\", \"dd\" will only cost less than 1 second.\n\nThe reason is: when using ext4 with \"nodelalloc\", it will call\next4_find_delalloc_cluster() nearly everytime it call\next4_ext_map_blocks(), and ext4_find_delalloc_range() will also scan\nall pages in cluster because no buffer is \"delayed\".  A cluster has\n256 pages (1MB cluster), so it will scan 256 * 256k pags when creating\na 1G file. That severely hurts the performance.\n\nTherefore, we return immediately from ext4_find_delalloc_range() in\nnodelalloc mode, since by definition there can\u0027t be any delalloc\npages.\n\nSigned-off-by: Robin Dong \u003csanbai@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "14d7f3efe923bc60839c65f9818793c64b4d708b",
      "tree": "a37a51ebbec9bd97dc25503cef7b6440a684330c",
      "parents": [
        "acd6ad83517639e8f09a8c5525b1dccd81cd2a10"
      ],
      "author": {
        "name": "Curt Wohlgemuth",
        "email": "curtw@google.com",
        "time": "Sun Dec 18 17:39:02 2011 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Dec 18 17:39:02 2011 -0500"
      },
      "message": "ext4: remove unused local variable\n\nIn get_implied_cluster_alloc(), rr_cluster_end was being\ndefined and set, but was never used.  Removed this.\n\nSigned-off-by: Curt Wohlgemuth \u003ccurtw@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "5b5ffa49d4bbb8ca4c41c094261660264f16bd20",
      "tree": "98b3fb0f9b4afac37ce0c025ee9cca3991bee4eb",
      "parents": [
        "093e6e3666f47d29763a235b404c84ee47ba8bb0"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Tue Dec 13 22:13:42 2011 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Dec 13 22:13:42 2011 -0500"
      },
      "message": "ext4: remove a wrong BUG_ON in ext4_ext_convert_to_initialized\n\nIf a file is fallocated on a hole, map-\u003em_lblk + map-\u003em_len may be greater\nthan ee_block + ee_len.\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "b4611abfa98af8351bf32e8b9ecc9d3384931c37",
      "tree": "a1ff17e10c37207e83bc602cf1fc8045d778c8a5",
      "parents": [
        "b5a7e97039a80fae673ccc115ce595d5b88fb4ee"
      ],
      "author": {
        "name": "Paul Mackerras",
        "email": "paulus@samba.org",
        "time": "Mon Dec 12 11:00:56 2011 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Dec 12 11:00:56 2011 -0500"
      },
      "message": "ext4: Fix crash due to getting bogus eh_depth value on big-endian systems\n\nCommit 1939dd84b3 (\"ext4: cleanup ext4_ext_grow_indepth code\") added a\nreference to ext4_extent_header.eh_depth, but forget to pass the value\nread through le16_to_cpu.  The result is a crash on big-endian\nmachines, such as this crash on a POWER7 server:\n\nattempt to access beyond end of device\nsda8: rw\u003d0, want\u003d776392648163376, limit\u003d168558560\nUnable to handle kernel paging request for data at address 0x6b6b6b6b6b6b6bcb\nFaulting instruction address: 0xc0000000001f5f38\ncpu 0x14: Vector: 300 (Data Access) at [c000001bd1aaecf0]\n    pc: c0000000001f5f38: .__brelse+0x18/0x60\n    lr: c0000000002e07a4: .ext4_ext_drop_refs+0x44/0x80\n    sp: c000001bd1aaef70\n   msr: 9000000000009032\n   dar: 6b6b6b6b6b6b6bcb\n dsisr: 40000000\n  current \u003d 0xc000001bd15b8010\n  paca    \u003d 0xc00000000ffe4600\n    pid   \u003d 19911, comm \u003d flush-8:0\nenter ? for help\n[c000001bd1aaeff0] c0000000002e07a4 .ext4_ext_drop_refs+0x44/0x80\n[c000001bd1aaf090] c0000000002e0c58 .ext4_ext_find_extent+0x408/0x4c0\n[c000001bd1aaf180] c0000000002e145c .ext4_ext_insert_extent+0x2bc/0x14c0\n[c000001bd1aaf2c0] c0000000002e3fb8 .ext4_ext_map_blocks+0x628/0x1710\n[c000001bd1aaf420] c0000000002b2974 .ext4_map_blocks+0x224/0x310\n[c000001bd1aaf4d0] c0000000002b7f2c .mpage_da_map_and_submit+0xbc/0x490\n[c000001bd1aaf5a0] c0000000002b8688 .write_cache_pages_da+0x2c8/0x430\n[c000001bd1aaf720] c0000000002b8b28 .ext4_da_writepages+0x338/0x670\n[c000001bd1aaf8d0] c000000000157280 .do_writepages+0x40/0x90\n[c000001bd1aaf940] c0000000001ea830 .writeback_single_inode+0xe0/0x530\n[c000001bd1aafa00] c0000000001eb680 .writeback_sb_inodes+0x210/0x300\n[c000001bd1aafb20] c0000000001ebc84 .__writeback_inodes_wb+0xd4/0x140\n[c000001bd1aafbe0] c0000000001ebfec .wb_writeback+0x2fc/0x3e0\n[c000001bd1aafce0] c0000000001ed770 .wb_do_writeback+0x2f0/0x300\n[c000001bd1aafdf0] c0000000001ed848 .bdi_writeback_thread+0xc8/0x340\n[c000001bd1aafed0] c0000000000c5494 .kthread+0xb4/0xc0\n[c000001bd1aaff90] c000000000021f48 .kernel_thread+0x54/0x70\n\nThis is due to getting ext_depth(inode) \u003d\u003d 0x101 and therefore running\noff the end of the path array in ext4_ext_drop_refs into following\nunallocated structures.\n\nThis fixes it by adding the necessary le16_to_cpu.\n\nSigned-off-by: Paul Mackerras \u003cpaulus@samba.org\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "bf52c6f7af55c48ab0fd5f990460b884b428d906",
      "tree": "8100b2e84bc4ce00802af3e37d00908aaacdcadf",
      "parents": [
        "32de67569059d22b02dd9323a40220d953642b7e"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Tue Nov 01 18:59:26 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Nov 01 18:59:26 2011 -0400"
      },
      "message": "ext4: let ext4_ext_rm_leaf work with EXT_DEBUG defined\n\nThe variable \u0027block\u0027 is removed by commit 750c9c47, so use the\nreplacement ex_ee_block instead.\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "32de67569059d22b02dd9323a40220d953642b7e",
      "tree": "0b63dbf315ad042ac01dfaf5acb89110f55ad1e9",
      "parents": [
        "ff3fc1736f1967b59801ab2cf6409fc6c8556b0a"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Tue Nov 01 18:56:41 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Nov 01 18:56:41 2011 -0400"
      },
      "message": "ext4: fix a syntax error in ext4_ext_insert_extent when debugging enabled\n\nThis patch fixes a syntax error which omits a comma. Besides this,\nlogical block number is unsigend 32 bits, so printk should use %u\ninstead %d.\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "3c6fe77017bc6ce489f231c35fed3220b6691836",
      "tree": "b3ca4d00dcecaf146361fef04afd8135ff370a07",
      "parents": [
        "4af835089984ce9e24c44a51be64c5524788e973"
      ],
      "author": {
        "name": "Greg Harm",
        "email": "gharm@google.com",
        "time": "Mon Oct 31 18:41:47 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Oct 31 18:41:47 2011 -0400"
      },
      "message": "ext4: Don\u0027t normalize an falloc request if it can fit in 1 extent.\n\nIf an fallocate request fits in EXT_UNINIT_MAX_LEN, then set the\nEXT4_GET_BLOCKS_NO_NORMALIZE flag. For larger fallocate requests,\nlet mballoc.c normalize the request.\n\nThis fixes a problem where large requests were being split into\nnon-contiguous extents due to commit 556b27abf73: ext4: do not\nnormalize block requests from fallocate.\n\nTesting: \n*) Checked that 8.x MB falloc\u0027ed files are still laid down next to\neach other (contiguously).\n*) Checked that the maximum size extent (127.9MB) is allocated as 1\nextent.\n*) Checked that a 1GB file is somewhat contiguous (often 5-6\nnon-contiguous extents now).\n*) Checked that a 120MB file can still be falloc\u0027ed even if there are\nno single extents large enough to hold it.\n\nSigned-off-by: Greg Harm \u003cgharm@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "0edeb71dc9133bfb505d3bf59642e07cd936613e",
      "tree": "bcb68e2676d9bba1e4e4e28fb1ba8d382caf26eb",
      "parents": [
        "b82e384c7bb9a19036b4daf58fa216df7cd48aa0"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Mon Oct 31 17:30:44 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Oct 31 17:30:44 2011 -0400"
      },
      "message": "ext4: Create helper function for EXT4_IO_END_UNWRITTEN and i_aiodio_unwritten\n\nEXT4_IO_END_UNWRITTEN flag set and the increase of i_aiodio_unwritten\nshould be done simultaneously since ext4_end_io_nolock always clear\nthe flag and decrease the counter in the same time.\n\nWe have found some bugs that the flag is set while leaving\ni_aiodio_unwritten unchanged(commit 32c80b32c053d). So this patch just tries\nto create a helper function to wrap them to avoid any future bug.\nThe idea is inspired by Eric.\n\nCc: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "e7b319e39776bd0e9c0c7855b023dafed2c93d27",
      "tree": "f8b52990697e2111baf7fd3f5c92ab17c62024b3",
      "parents": [
        "02dc62fba89eaee0157752c5f1ba811ef3156e00"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Sat Oct 29 09:39:51 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Oct 29 09:39:51 2011 -0400"
      },
      "message": "ext4: trace punch_hole correctly in ext4_ext_map_blocks\n\nWhen ext4_ext_map_blocks() is called by punch_hole, trace should\ntrace blocks punched out.\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "02dc62fba89eaee0157752c5f1ba811ef3156e00",
      "tree": "d1f8ba664676570fbd6354a8299b0703901a760d",
      "parents": [
        "81fdbb4a8d34242f0ed048395c4ddc910f1dffbe"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Sat Oct 29 09:29:11 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Oct 29 09:29:11 2011 -0400"
      },
      "message": "ext4: clean up AGGRESSIVE_TEST code\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "81fdbb4a8d34242f0ed048395c4ddc910f1dffbe",
      "tree": "1c7d4050d953d24388e1f0f35e48b8d08fa0bd64",
      "parents": [
        "5cb81dabcc28863e7d04e6fd9ede154bd8459c14"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Sat Oct 29 09:23:38 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Oct 29 09:23:38 2011 -0400"
      },
      "message": "ext4: move variables to their scope\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "80e675f906db54eb1ce3a9555cee5f45b5b72ab2",
      "tree": "b9bd012caf69c479a946b467c051f505caa1f593",
      "parents": [
        "6f91bc5fda82d2c49b4f7fb29424cf6a3c7574bc"
      ],
      "author": {
        "name": "Eric Gouriou",
        "email": "egouriou@google.com",
        "time": "Thu Oct 27 11:52:18 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Oct 27 11:52:18 2011 -0400"
      },
      "message": "ext4: optimize memmmove lengths in extent/index insertions\n\next4_ext_insert_extent() (respectively ext4_ext_insert_index())\nwas using EXT_MAX_EXTENT() (resp. EXT_MAX_INDEX()) to determine\nhow many entries needed to be moved beyond the insertion point.\nIn practice this means that (320 - I) * 24 bytes were memmove()\u0027d\nwhen I is the insertion point, rather than (#entries - I) * 24 bytes.\n\nThis patch uses EXT_LAST_EXTENT() (resp. EXT_LAST_INDEX()) instead\nto only move existing entries. The code flow is also simplified\nslightly to highlight similarities and reduce code duplication in\nthe insertion logic.\n\nThis patch reduces system CPU consumption by over 25% on a 4kB\nsynchronous append DIO write workload when used with the\npre-2.6.39 x86_64 memmove() implementation. With the much faster\n2.6.39 memmove() implementation we still see a decrease in\nsystem CPU usage between 2% and 7%.\n\nNote that the ext_debug() output changes with this patch, splitting\nsome log information between entries. Users of the ext_debug() output\nshould note that the \"move %d\" units changed from reporting the number\nof bytes moved to reporting the number of entries moved.\n\nSigned-off-by: Eric Gouriou \u003cegouriou@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "6f91bc5fda82d2c49b4f7fb29424cf6a3c7574bc",
      "tree": "e5670070f007c4ad5300e93a4e36fa9a802e2bd9",
      "parents": [
        "446066724c3629664e29942a00b0aee0d6b1663a"
      ],
      "author": {
        "name": "Eric Gouriou",
        "email": "egouriou@google.com",
        "time": "Thu Oct 27 11:43:23 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Oct 27 11:43:23 2011 -0400"
      },
      "message": "ext4: optimize ext4_ext_convert_to_initialized()\n\nThis patch introduces a fast path in ext4_ext_convert_to_initialized()\nfor the case when the conversion can be performed by transferring\nthe newly initialized blocks from the uninitialized extent into\nan adjacent initialized extent. Doing so removes the expensive\ninvocations of memmove() which occur during extent insertion and\nthe subsequent merge.\n\nIn practice this should be the common case for clients performing\nappend writes into files pre-allocated via\nfallocate(FALLOC_FL_KEEP_SIZE). In such a workload performed via\ndirect IO and when using a suboptimal implementation of memmove()\n(x86_64 prior to the 2.6.39 rewrite), this patch reduces kernel CPU\nconsumption by 32%.\n\nTwo new trace points are added to ext4_ext_convert_to_initialized()\nto offer visibility into its operations. No exit trace point has\nbeen added due to the multiplicity of return points. This can be\nrevisited once the upstream cleanup is backported.\n\nSigned-off-by: Eric Gouriou \u003cegouriou@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "b3ff05690845911cc40387176f0bc5a7af9ef3ff",
      "tree": "9ed6230ae4616d67d85aed9e9b8dc6477642312c",
      "parents": [
        "0a10da73e1fa6fb9b45f1166011ff3b04c27c010"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Wed Oct 26 11:08:39 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 26 11:08:39 2011 -0400"
      },
      "message": "ext4: don\u0027t check io-\u003eflag when setting EXT4_STATE_DIO_UNWRITTEN inode state\n\nWhen we want to convert the unitialized extent in direct write, we can\neither do it in ext4_end_io_nolock(AIO case) or in\next4_ext_direct_IO(non AIO case) and EXT4_I(inode)-\u003ecur_aio_dio is a\nguard for ext4_ext_map_blocks to find the right case.  In e9e3bcecf,\nwe mistakenly change it by:\n\n-\t\t\tif (io)\n+\t\t\tif (io \u0026\u0026 !(io-\u003eflag \u0026 EXT4_IO_END_UNWRITTEN)) {\n \t\t\t\tio-\u003eflag \u003d EXT4_IO_END_UNWRITTEN;\n-\t\t\telse\n+\t\t\t\tatomic_inc(\u0026EXT4_I(inode)-\u003ei_aiodio_unwritten);\n+\t\t\t} else\n \t\t\t\text4_set_inode_state(inode,\n \t\t\t\t\t\t     EXT4_STATE_DIO_UNWRITTEN);\n\nSo now if we map 2 blocks, and the first one set the\nEXT_IO_END_UNWRITTEN, the 2nd mapping will set inode state because of\nthe check for the flag. This is wrong.\n\nCc: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "6f8ff537266ee5396c920fb0c842a21df3055ff3",
      "tree": "a024979a4e8f718289e9bf36fc165b96b68d6209",
      "parents": [
        "f85b287a01237857a50c93868231f7e831581a27"
      ],
      "author": {
        "name": "Curt Wohlgemuth",
        "email": "curtw@google.com",
        "time": "Wed Oct 26 04:38:59 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 26 04:38:59 2011 -0400"
      },
      "message": "ext4: handle NULL p_ext in ext4_ext_next_allocated_block()\n\nIn ext4_ext_next_allocated_block(), the path[depth] might\nhave a p_ext that is NULL -- see ext4_ext_binsearch().  In\nsuch a case, dereferencing it will crash the machine.\n\nThis patch checks for p_ext \u003d\u003d NULL in\next4_ext_next_allocated_block() before dereferencinging it.\n\nTested using a hand-crafted an inode with eh_entries \u003d\u003d 0 in\nan extent block, verified that running FIEMAP on it crashes\nwithout this patch, works fine with it.\n\nSigned-off-by: Curt Wohlgemuth \u003ccurtw@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f85b287a01237857a50c93868231f7e831581a27",
      "tree": "370cc4ce183e6321192ddd60b2a1e056932a235d",
      "parents": [
        "665436175c3ca9d35f135e1ba6bdd63745cff08a"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "dan.carpenter@oracle.com",
        "time": "Wed Oct 26 03:42:36 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 26 03:42:36 2011 -0400"
      },
      "message": "ext4: error handling fix in ext4_ext_convert_to_initialized()\n\nWhen allocated is unsigned it breaks the error handling at the end\nof the function when we call:\n\tallocated \u003d ext4_split_extent(...);\n\tif (allocated \u003c 0)\n\t\terr \u003d allocated;\n\nI\u0027ve made it a signed int instead of unsigned.\n\nSigned-off-by: Dan Carpenter \u003cdan.carpenter@oracle.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a4e5d88b1b24827f4f6a3cba43228936a67d81ba",
      "tree": "0f5b0309f290f5fc23478794c6f4adcd7c18896a",
      "parents": [
        "750c9c47a5f9daa88333ac435a1afe4d4b428230"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Tue Oct 25 08:15:12 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Oct 25 08:15:12 2011 -0400"
      },
      "message": "ext4: update EOFBLOCKS flag on fallocate properly\n\nEOFBLOCK_FL should be updated if called w/o FALLOCATE_FL_KEEP_SIZE\nCurrently it happens only if new extent was allocated.\n\nTESTCASE:\nfallocate test_file -n -l4096\nfallocate test_file -l4096\nLast fallocate cmd has updated size, but keept EOFBLOCK_FL set. And\nfsck will complain about that.\n\nAlso remove ping pong in ext4_fallocate() in case of new extents,\nwhere ext4_ext_map_blocks() clear EOFBLOCKS bit, and later\next4_falloc_update_inode() restore it again.\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "750c9c47a5f9daa88333ac435a1afe4d4b428230",
      "tree": "5782bce0abf292317f0f8a176c23d1dca822a985",
      "parents": [
        "1939dd84b3f52e9c8d1b46dffae2058f16a3ff6a"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Tue Oct 25 05:35:05 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Oct 25 05:35:05 2011 -0400"
      },
      "message": "ext4: remove messy logic from ext4_ext_rm_leaf\n\n- Both callers(truncate and punch_hole) already aligned left end point\n  so we no longer need split logic here.\n- Remove dead duplicated code.\n- Call ext4_ext_dirty only after we have updated eh_entries, otherwise\n  we\u0027ll loose entries update. Regression caused by d583fb87a3ff0\n  266\u0027th testcase in xfstests (http://patchwork.ozlabs.org/patch/120872)\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "1939dd84b3f52e9c8d1b46dffae2058f16a3ff6a",
      "tree": "f1b30614ea4c4e991abb279c9d7d181e207c7148",
      "parents": [
        "45dc63e7d8412546567399b94caeb683af58843e"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Sat Oct 22 01:26:05 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Oct 22 01:26:05 2011 -0400"
      },
      "message": "ext4: cleanup ext4_ext_grow_indepth code\n\nCurrently code make an impression what grow procedure is very complicated\nand some mythical paths, blocks are involved. But in fact grow in depth\nit relatively simple procedure:\n 1) Just create new meta block and copy root data to that block.\n 2) Convert root from extent to index if old depth \u003d\u003d 0\n 3) Update root block pointer\n\nThis patch does:\n - Reorganize code to make it more self explanatory\n - Do not pass path parameter to new_meta_block() in order to\n   provoke allocation from inode\u0027s group because top-level block\n   should site closer to it\u0027s inode, but not to leaf data block.\n\n   [ This happens anyway, due to logic in mballoc; we should drop\n     the path parameter from new_meta_block() entirely.  -- tytso ]\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "ee90d57e20bd4749dda3b14397392b18b89dc3ef",
      "tree": "907a2b9e6d96b5dc98037568775e04d0c0131dde",
      "parents": [
        "e6705f7c255d1ffae7cd161d0b657296f4dd62fd"
      ],
      "author": {
        "name": "H Hartley Sweeten",
        "email": "hartleys@visionengravers.com",
        "time": "Tue Oct 18 11:01:51 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Oct 18 11:01:51 2011 -0400"
      },
      "message": "ext4: quiet sparse noise about plain integer as NULL pointer\n\nThe third parameter to ext4_free_blocks is a struct buffer_head *.  This\nparameter should be NULL not 0.\n\nThis quiets the sparse noise:\n\nwarning: Using plain integer as NULL pointer\n\nSigned-off-by: H Hartley Sweeten \u003chsweeten@visionengravers.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f472e02669073e4f1a388142bafa0f806fae841c",
      "tree": "766f26be99c1ffa5d3f0c93e233a60cc52e74094",
      "parents": [
        "d44651d0f922b7aaeddd9fc04f2f5700a65983dd"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Mon Oct 17 10:13:46 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Oct 17 10:13:46 2011 -0400"
      },
      "message": "ext4: avoid stamping on other memories in ext4_ext_insert_index()\n\nAdd a sanity check to make sure ix hasn\u0027t gone beyond the valid bounds\nof the extent block.\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "6ee3b2122431fc75015c6114d4749de76422452b",
      "tree": "f2e81738f94cde81d1e567e1597f8ce5b97dd0c2",
      "parents": [
        "7fd59c83b05dc1b8af2be4d991ee376f782cd8b0"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Sat Oct 08 16:08:34 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Oct 08 16:08:34 2011 -0400"
      },
      "message": "ext4: use le32_to_cpu for ext4_extent_idx.ei_block in ext4_ext_search_left()\n\next4_extent_idx.e_block is __le32, so use le32_to_cpu() in\next4_ext_search_left().\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "df3ab17072c31fbd394614711772682f0a956a2c",
      "tree": "bb9aa8d05dcbb6de15b79c0afd8c79a854a3d345",
      "parents": [
        "4113c4caa4f355b8ff8b7ff0510c29c9d00d30b3"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Sat Oct 08 15:53:49 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Oct 08 15:53:49 2011 -0400"
      },
      "message": "ext4: fix the comment describing ext4_ext_search_right()\n\nThe comment describing what ext4_ext_search_right() does is incorrect.\nWe return 0 in *phys when *logical is the \u0027largest\u0027 allocated block,\nnot smallest.  \n\nFix a few other typos while we\u0027re at it.\n\nCc: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\n"
    },
    {
      "commit": "5356f2615cd558c57a1f7d7528d1ad4de3640d96",
      "tree": "e3590bf14d9a21c4eb365105886382bfb1131b95",
      "parents": [
        "d8990240d8c911064447f8aa5a440f9345a6d692"
      ],
      "author": {
        "name": "Aditya Kali",
        "email": "adityakali@google.com",
        "time": "Fri Sep 09 19:20:51 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Sep 09 19:20:51 2011 -0400"
      },
      "message": "ext4: attempt to fix race in bigalloc code path\n\nCurrently, there exists a race between delayed allocated writes and\nthe writeback when bigalloc feature is in use. The race was because we\nwanted to determine what blocks in a cluster are under delayed\nallocation and we were using buffer_delayed(bh) check for it. But, the\nwriteback codepath clears this bit without any synchronization which\nresulted in a race and an ext4 warning similar to:\n\nEXT4-fs (ram1): ext4_da_update_reserve_space: ino 13, used 1 with only 0\n\t\treserved data blocks\n\nThe race existed in two places.\n(1) between ext4_find_delalloc_range() and ext4_map_blocks() when called from\n    writeback code path.\n(2) between ext4_find_delalloc_range() and ext4_da_get_block_prep() (where\n    buffer_delayed(bh) is set.\n\nTo fix (1), this patch introduces a new buffer_head state bit -\nBH_Da_Mapped.  This bit is set under the protection of\nEXT4_I(inode)-\u003ei_data_sem when we have actually mapped the delayed\nallocated blocks during the writeout time. We can now reliably check\nfor this bit inside ext4_find_delalloc_range() to determine whether\nthe reservation for the blocks have already been claimed or not.\n\nTo fix (2), it was necessary to set buffer_delay(bh) under the\nprotection of i_data_sem.  So, I extracted the very beginning of\next4_map_blocks into a new function - ext4_da_map_blocks() - and\nperformed the required setting of bh_delay bit and the quota\nreservation under the protection of i_data_sem.  These two fixes makes\nthe checking of buffer_delay(bh) and buffer_da_mapped(bh) consistent,\nthus removing the race.\n\nTested: I was able to reproduce the problem by running \u0027dd\u0027 and\n\u0027fsync\u0027 in parallel. Also, xfstests sometimes used to reproduce this\nrace. After the fix both my test and xfstests were successful and no\nrace (warning message) was observed.\n\nGoogle-Bug-Id: 4997027\n\nSigned-off-by: Aditya Kali \u003cadityakali@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "d8990240d8c911064447f8aa5a440f9345a6d692",
      "tree": "c12cda27583eb9616d91ec38fdfd79c6eb490bd5",
      "parents": [
        "df55c99dc8ee4c3c886a5edc8a4aa6b131c95afc"
      ],
      "author": {
        "name": "Aditya Kali",
        "email": "adityakali@google.com",
        "time": "Fri Sep 09 19:18:51 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Sep 09 19:18:51 2011 -0400"
      },
      "message": "ext4: add some tracepoints in ext4/extents.c\n\nThis patch adds some tracepoints in ext4/extents.c and updates a tracepoint in\next4/inode.c.\n\nTested: Built and ran the kernel and verified that these tracepoints work.\nAlso ran xfstests.\n\nSigned-off-by: Aditya Kali \u003cadityakali@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n    \n\n"
    },
    {
      "commit": "7b415bf60f6afb0499fd3dc0ee33444f54e28567",
      "tree": "9c64fef2b8d60ce64865af6e4c2cc6008026e28c",
      "parents": [
        "27baebb849d46d901e756e6502b0a65a62e43771"
      ],
      "author": {
        "name": "Aditya Kali",
        "email": "adityakali@google.com",
        "time": "Fri Sep 09 19:04:51 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Sep 09 19:04:51 2011 -0400"
      },
      "message": "ext4: Fix bigalloc quota accounting and i_blocks value\n\nWith bigalloc changes, the i_blocks value was not correctly set (it was still\nset to number of blocks being used, but in case of bigalloc, we want i_blocks\nto represent the number of clusters being used). Since the quota subsystem sets\nthe i_blocks value, this patch fixes the quota accounting and makes sure that\nthe i_blocks value is set correctly.\n\nSigned-off-by: Aditya Kali \u003cadityakali@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "0aa060000e83ca3d09ddc446a7174fb0820d99bc",
      "tree": "c80077aed7b1df852d556965e2b36d3c956cdabe",
      "parents": [
        "4d33b1ef10995d7ba6191d67456202c697a92a32"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Sep 09 18:54:51 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Sep 09 18:54:51 2011 -0400"
      },
      "message": "ext4: teach ext4_ext_truncate() about the bigalloc feature\n\nWhen we are truncating (as opposed unlinking) a file, we need to worry\nabout partial truncates of a file, especially in the light of sparse\nfiles.  The changes here make sure that arbitrary truncates of sparse\nfiles works correctly.  Yeah, it\u0027s messy.\n\nNote that these functions will need to be revisted when the punch\nioctl is integrated --- in fact this commit will probably have merge\nconflicts with the punch changes which Allison Henders and the IBM LTC\nhave been working on.  I will need to fix this up when either patch\nhits mainline.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "4d33b1ef10995d7ba6191d67456202c697a92a32",
      "tree": "3e47753f9ac48e9f4c80dac0b69bce9fb4ac6f52",
      "parents": [
        "84130193e0e6568dfdfb823f0e1e19aec80aff6e"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Sep 09 18:52:51 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Sep 09 18:52:51 2011 -0400"
      },
      "message": "ext4: teach ext4_ext_map_blocks() about the bigalloc feature\n\nIf we need to allocate a new block in ext4_ext_map_blocks(), the\nfunction needs to see if the cluster has already been allocated.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "189e868fa8fdca702eb9db9d8afc46b5cb9144c9",
      "tree": "5b226cfe59cc9351b9d870a5c31cdfe4f5544652",
      "parents": [
        "decbd919f4bb9cb698486880c026c4104b13d3c3"
      ],
      "author": {
        "name": "Allison Henderson",
        "email": "achender@linux.vnet.ibm.com",
        "time": "Tue Sep 06 21:49:44 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Sep 06 21:49:44 2011 -0400"
      },
      "message": "ext4: fix fsx truncate failure\n\nWhile running extended fsx tests to verify the first\ntwo patches, a similar bug was also found in the\ntruncate operation.\n\nThis bug happens because the truncate routine only zeros\nthe unblock aligned portion of the last page.  This means\nthat the block aligned portions of the page appearing after\ni_size are left unzeroed, and the buffer heads still mapped.\n\nThis bug is corrected by using ext4_discard_partial_page_buffers\nin the truncate routine to zero the partial page and unmap\nthe buffer headers.\n\nSigned-off-by: Allison Henderson \u003cachender@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "9ea7a0df63630ad8197716cd313ea66e28906fc0",
      "tree": "2f9cb8bb3f4c709aa666c7863b496f2757b261fb",
      "parents": [
        "56889787cfa77dfd96f0b3a3e6a4f26c2e4a5134"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Sep 04 10:18:14 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Sep 04 10:18:14 2011 -0400"
      },
      "message": "jbd2: add debugging information to jbd2_journal_dirty_metadata()\n\nAdd debugging information in case jbd2_journal_dirty_metadata() is\ncalled with a buffer_head which didn\u0027t have\njbd2_journal_get_write_access() called on it, or if the journal_head\nhas the wrong transaction in it.  In addition, return an error code.\nThis won\u0027t change anything for ocfs2, which will BUG_ON() the non-zero\nexit code.\n\nFor ext4, the caller of this function is ext4_handle_dirty_metadata(),\nand on seeing a non-zero return code, will call __ext4_journal_stop(),\nwhich will print the function and line number of the (buggy) calling\nfunction and abort the journal.  This will allow us to recover instead\nof bug halting, which is better from a robustness and reliability\npoint of view.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "2be4751b21ae1cacb002da48cfc5bf6743fee8c1",
      "tree": "4a7ce445a963d54c572f1216b90bdef2df91cdeb",
      "parents": [
        "ba06208a1315ab2d2217e09c79582b886c9f629e"
      ],
      "author": {
        "name": "Allison Henderson",
        "email": "achender@linux.vnet.ibm.com",
        "time": "Sat Sep 03 11:56:52 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Sep 03 11:56:52 2011 -0400"
      },
      "message": "ext4: fix 2nd xfstests 127 punch hole failure\n\nThis patch fixes a second punch hole bug found by xfstests 127.\n\nThis bug happens because punch hole needs to flush the pages\nof the hole to avoid race conditions.  But if the end of the\nhole is in the same page as i_size, the buffer heads beyond\ni_size need to be unmapped and the page needs to be zeroed\nafter it is flushed.\n\nTo correct this, the new ext4_discard_partial_page_buffers\nroutine is used to zero and unmap the partial page\nbeyond i_size if the end of the hole appears in the same\npage as i_size.\n\nThe code has also been optimized to set the end of the hole\nto the page after i_size if the specified hole exceeds i_size,\nand the code that flushes the pages has been simplified.\n\nSigned-off-by: Allison Henderson \u003cachender@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "ba06208a1315ab2d2217e09c79582b886c9f629e",
      "tree": "08410f6be28c6811aa17b1cde65cc31e79e01e83",
      "parents": [
        "4e96b2dbbf1d7e81f22047a50f862555a6cb87cb"
      ],
      "author": {
        "name": "Allison Henderson",
        "email": "achender@linux.vnet.ibm.com",
        "time": "Sat Sep 03 11:55:59 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Sep 03 11:55:59 2011 -0400"
      },
      "message": "ext4: fix xfstests 75, 112, 127 punch hole failure\n\nThis patch addresses a bug found by xfstests 75, 112, 127\nwhen blocksize \u003d 1k\n\nThis bug happens because the punch hole code only zeros\nout non block aligned regions of the page.  This means that if the\nblocks are smaller than a page, then the block aligned regions of\nthe page inside the hole are left un-zeroed, and their buffer heads\nare still mapped.  This bug is corrected by using\next4_discard_partial_page_buffers to properly zero the partial page\nat the head and tail of the hole, and unmap the corresponding buffer\nheads\n\nThis patch also addresses a bug reported by Lukas while working on a\nnew patch to add discard support for loop devices using punch hole.\nThe bug happened because of the first and last block number\nneeded to be cast to a larger data type before calculating the\nbyte offset, but since now we only need the byte offsets of the\npages, we no longer even need to be calculating the byte offsets\nof the blocks.  The code to do the block offset calculations is\nremoved in this patch.\n\nSigned-off-by: Allison Henderson \u003cachender@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "29ae07b702cb77dbc24b0843f15ee8cf8a642311",
      "tree": "4d9d3717e2be5cb335fd4f32c9207bf0b55caac9",
      "parents": [
        "0e1147b001793593624e80b3c0a1790822b6baca"
      ],
      "author": {
        "name": "Utako Kusaka",
        "email": "u-kusaka@wm.jp.nec.com",
        "time": "Wed Jul 27 22:11:20 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Jul 27 22:11:20 2011 -0400"
      },
      "message": "ext4: Fix overflow caused by missing cast in ext4_fallocate()\n\nThe logical block number in map.l_blk is a __u32, and so before we\nshift it left, by the block size, we neeed cast it to a 64-bit size.\n\nOtherwise i_size can be corrupted on an ENOSPC.\n\n# df -T /mnt/mp1\nFilesystem    Type   1K-blocks      Used Available Use% Mounted on\n/dev/sda6     ext4     9843276    153056   9190200   2% /mnt/mp1\n# fallocate -o 0 -l 2199023251456 /mnt/mp1/testfile\nfallocate: /mnt/mp1/testfile: fallocate failed: No space left on device\n# stat /mnt/mp1/testfile\n  File: `/mnt/mp1/testfile\u0027\n  Size: 4293656576\tBlocks: 19380440   IO Block: 4096   regular file\nDevice: 806h/2054d\tInode: 12          Links: 1\nAccess: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)\nAccess: 2011-07-25 13:01:31.414490496 +0900\nModify: 2011-07-25 13:01:31.414490496 +0900\nChange: 2011-07-25 13:01:31.454490495 +0900\n\nSigned-off-by: Utako Kusaka \u003cu-kusaka@wm.jp.nec.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n--\n fs/ext4/extents.c |    2 +-\n 1 files changed, 1 insertions(+), 1 deletions(-)\n\n"
    },
    {
      "commit": "0e1147b001793593624e80b3c0a1790822b6baca",
      "tree": "b43cf0a3f8cb4733386867c4b06d92eb0025f04a",
      "parents": [
        "668f4dc5593327fadc95b33189c375f7178ef88e"
      ],
      "author": {
        "name": "Robin Dong",
        "email": "sanbai@taobao.com",
        "time": "Wed Jul 27 21:29:33 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Jul 27 21:29:33 2011 -0400"
      },
      "message": "ext4: add action of moving index in ext4_ext_rm_idx for Punch Hole\n\nThe old function ext4_ext_rm_idx is used only for truncate case\nbecause it just remove last index in extent-index-block. When punching\nhole, it usually needed to remove \"middle\" index, therefore we must\nmove indexes which after it forward.\n\n(I create a file with 1 depth extent tree and punch hole in the middle\nof it, the last index in index-block strangly gone, so I find out this\nbug)\n\nSigned-off-by: Robin Dong \u003csanbai@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "b7ca1e8ec53259359db5313f923a0a20fa04bdb6",
      "tree": "7e120d5a7c86c0f44460751dd9c2dba54874c122",
      "parents": [
        "0737964bc98202776f4d10bc8e108f45b3115037"
      ],
      "author": {
        "name": "Robin Dong",
        "email": "sanbai@taobao.com",
        "time": "Sat Jul 23 21:53:25 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jul 23 21:53:25 2011 -0400"
      },
      "message": "ext4: correct comment for ext4_ext_check_cache\n\nThe comment for ext4_ext_check_cache has a litte mistake.\n\nSigned-off-by: Robin Dong \u003csanbai@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "0737964bc98202776f4d10bc8e108f45b3115037",
      "tree": "b5cda05cd5ccc4bcfacb9e1b65f74c1bacfc7dee",
      "parents": [
        "5718789da5b94bd4148cb7ea0f457089c26bc1c3"
      ],
      "author": {
        "name": "Robin Dong",
        "email": "sanbai@taobao.com",
        "time": "Sat Jul 23 21:51:07 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jul 23 21:51:07 2011 -0400"
      },
      "message": "ext4: correct the debug message in ext4_ext_insert_extent\n\nThe debug message in ext4_ext_insert_extent before moving extent\nis incorrect (the \"from xx to xx\").\n\nSigned-off-by: Robin Dong \u003csanbai@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "5718789da5b94bd4148cb7ea0f457089c26bc1c3",
      "tree": "8daf6d7e0150915220deaa3847752606dc416192",
      "parents": [
        "6a0fe49308dcac10ab510b3c45e00eb8d5ef440e"
      ],
      "author": {
        "name": "Robin Dong",
        "email": "sanbai@taobao.com",
        "time": "Sat Jul 23 21:49:07 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jul 23 21:49:07 2011 -0400"
      },
      "message": "ext4: remove unused argument in ext4_ext_next_leaf_block\n\nThe argument \"inode\" in function ext4_ext_next_allocated_block looks useless,\nso clean it.\n\nSigned-off-by: Robin Dong \u003csanbai@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "d46203159ed376fdbe2b05aa57e58207bf27a8f9",
      "tree": "8bcbe5545066606b12d6cd250747471802520c0b",
      "parents": [
        "015861badd0db43d025bbb538f8fc62dfaf3f18d"
      ],
      "author": {
        "name": "Robin Dong",
        "email": "hao.bigrat@gmail.com",
        "time": "Sun Jul 17 23:43:42 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jul 17 23:43:42 2011 -0400"
      },
      "message": "ext4: avoid eh_entries overflow before insert extent_idx\n\nIf eh_entries is equal to (or greater than) eh_max, the operation of\ninserting new extent_idx will make number of entries overflow.\nSo check eh_entries before inserting the new extent_idx.\n\nAlthough there is no bug case according the code (function\next4_ext_insert_index is called by ext4_ext_split and ext4_ext_split\nis called only if the index block has free space), the right logic\nshould be \"lookup the capacity before insertion\".\n\nSigned-off-by: Robin Dong \u003csanbai@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "015861badd0db43d025bbb538f8fc62dfaf3f18d",
      "tree": "e1e7f6ea3f4cd41ecc030f07a4a454141dd2e158",
      "parents": [
        "c6a0371cbefade85376bbc326d18451860632dce"
      ],
      "author": {
        "name": "Robin Dong",
        "email": "hao.bigrat@gmail.com",
        "time": "Sun Jul 17 23:27:43 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jul 17 23:27:43 2011 -0400"
      },
      "message": "ext4: avoid wasted extent cache lookup if !PUNCH_OUT_EXT\n\nThis patch avoids an extraneous lookup of the extent cache\nin ext4_ext_map_blocks() when the flag\nEXT4_GET_BLOCKS_PUNCH_OUT_EXT is absent.\n\nThe existing logic was performing the lookup but not making\nuse of the result. The patch simply reverses the order of evaluation\nin the condition.\n\nSince ext4_ext_in_cache() does not initialize newex on misses, bypassing\nits invocation does not introduce any new issue in this regard.\n\nSigned-off-by: Robin Dong \u003csanbai@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nReviewed-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nReviewed-by: Eric Gouriou \u003cegouriou@google.com\u003e\n"
    },
    {
      "commit": "c6a0371cbefade85376bbc326d18451860632dce",
      "tree": "7580e70da75b508953c1c10c0636ae56188ba76e",
      "parents": [
        "f7d0d3797fac6cad24ad9f86dd9baf65c586b434"
      ],
      "author": {
        "name": "Allison Henderson",
        "email": "achender@linux.vnet.ibm.com",
        "time": "Sun Jul 17 23:21:03 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jul 17 23:21:03 2011 -0400"
      },
      "message": "ext4: remove unneeded parameter to ext4_ext_remove_space()\n\nThis patch removes the extra parameter in ext4_ext_remove_space()\nwhich is no longer needed.\n\nSigned-off-by: Allison Henderson \u003cachender@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f7d0d3797fac6cad24ad9f86dd9baf65c586b434",
      "tree": "73ae5f70c194399f9c8273d6681e7534400ffdc0",
      "parents": [
        "3eb08658431abd65c0fe6855d1860859c2d416f7"
      ],
      "author": {
        "name": "Allison Henderson",
        "email": "achender@linux.vnet.ibm.com",
        "time": "Sun Jul 17 23:17:02 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jul 17 23:17:02 2011 -0400"
      },
      "message": "ext4: punch hole optimizations: skip un-needed extent lookup\n\nThis patch optimizes the punch hole operation by skipping the\ntree walking code that is used by truncate.  Since punch hole\nis done through map blocks, the path to the extent is already\nknown in this function, so we do not need to look it up again.\n\nSigned-off-by: Allison Henderson \u003cachender@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "598dbdf2433cad55bd44d923f67a053871e3eabf",
      "tree": "848036d87de48e271f6e23c1603100f4a75a2387",
      "parents": [
        "ffb505ff0f7b52318dea46dd139107a8371b4ad7"
      ],
      "author": {
        "name": "Robin Dong",
        "email": "sanbai@taobao.com",
        "time": "Mon Jul 11 18:24:01 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jul 11 18:24:01 2011 -0400"
      },
      "message": "ext4: avoid unneeded ext4_ext_next_leaf_block() while inserting extents\n\nOptimize ext4_ext_insert_extent() by avoiding\next4_ext_next_leaf_block() when the result is not used/needed.\n\nSigned-off-by: Robin Dong \u003csanbai@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "ffb505ff0f7b52318dea46dd139107a8371b4ad7",
      "tree": "e94a4af0c694d5ce79d512be8e8e390da43b9e66",
      "parents": [
        "22612283f7da1ce9849d9b3716010b07a0446fd9"
      ],
      "author": {
        "name": "Robin Dong",
        "email": "sanbai@taobao.com",
        "time": "Mon Jul 11 11:43:59 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jul 11 11:43:59 2011 -0400"
      },
      "message": "ext4: remove redundant goto in ext4_ext_insert_extent()\n\nIf eh-\u003eeh_entries is smaller than eh-\u003eeh_max, the routine will\ngo to the \"repeat\" and then go to \"has_space\" directlly ,\nsince argument \"depth\" and \"eh\" are not even changed.\n\nTherefore, goto \"has_space\" directly and remove redundant \"repeat\" tag.\n\nSigned-off-by: Robin Dong \u003csanbai@taobao.com\u003e\n"
    },
    {
      "commit": "575a1d4bdfa2ea9fc10733013136145b497e1be0",
      "tree": "2491bacefb28e5990bc97f3f9598ee8e9b21e434",
      "parents": [
        "7132de744ba76930d13033061018ddd7e3e8cd91"
      ],
      "author": {
        "name": "Jiaying Zhang",
        "email": "jiayingz@google.com",
        "time": "Sun Jul 10 20:07:25 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jul 10 20:07:25 2011 -0400"
      },
      "message": "ext4: free allocated and pre-allocated blocks when check_eofblocks_fl fails\n\nUpon corrupted inode or disk failures, we may fail after we already\nallocate some blocks from the inode or take some blocks from the\ninode\u0027s preallocation list, but before we successfully insert the\ncorresponding extent to the extent tree. In this case, we should free\nany allocated blocks and discard the inode\u0027s preallocated blocks\nbecause the entries in the inode\u0027s preallocation list may be in an\ninconsistent state.\n\nSigned-off-by: Jiaying Zhang \u003cjiayingz@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "7132de744ba76930d13033061018ddd7e3e8cd91",
      "tree": "1da773f7293e056e4849dc590dac35854662f666",
      "parents": [
        "275d3ba6b40d0f098693b9089c6fee9bd4e55d74"
      ],
      "author": {
        "name": "Maxim Patlasov",
        "email": "maxim.patlasov@gmail.com",
        "time": "Sun Jul 10 19:37:48 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jul 10 19:37:48 2011 -0400"
      },
      "message": "ext4: fix i_blocks/quota accounting when extent insertion fails\n\nThe current implementation of ext4_free_blocks() always calls\ndquot_free_block This looks quite sensible in the most cases: blocks\nto be freed are associated with inode and were accounted in quota and\ni_blocks some time ago.\n\nHowever, there is a case when blocks to free were not accounted by the\ntime calling ext4_free_blocks() yet:\n\n1. delalloc is on, write_begin pre-allocated some space in quota\n2. write-back happens, ext4 allocates some blocks in ext4_ext_map_blocks()\n3. then ext4_ext_map_blocks() gets an error (e.g.  ENOSPC) from\n   ext4_ext_insert_extent() and calls ext4_free_blocks().\n\nIn this scenario, ext4_free_blocks() calls dquot_free_block() who, in\nturn, decrements i_blocks for blocks which were not accounted yet (due\nto delalloc) After clean umount, e2fsck reports something like:\n\n\u003e Inode 21, i_blocks is 5080, should be 5128.  Fix\u003cy\u003e?\nbecause i_blocks was erroneously decremented as explained above.\n\nThe patch fixes the problem by passing the new flag\nEXT4_FREE_BLOCKS_NO_QUOT_UPDATE to ext4_free_blocks(), to request\nthat the dquot_free_block() call be skipped.\n\nSigned-off-by: Maxim Patlasov \u003cmaxim.patlasov@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "9331b6261058eb85ae7c57ab8ac279e7fdaa9f04",
      "tree": "3be0d02e7e917ec84cca7260dacff754da579156",
      "parents": [
        "f86186b44b4164600cce03d0d93ad48ec21fa429"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Tue Jun 28 10:19:05 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jun 28 10:19:05 2011 -0400"
      },
      "message": "ext4: quiet \u0027unused variables\u0027 compile warnings\n\nUnused variables was deleted.\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f86186b44b4164600cce03d0d93ad48ec21fa429",
      "tree": "48aafabbbe46d22de84e4e9b3ebf7c5b35fd6d1e",
      "parents": [
        "dae1e52cb1267bf8f52e5e47a80fab566d7e8aa4"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Tue Jun 28 10:01:31 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jun 28 10:01:31 2011 -0400"
      },
      "message": "ext4: refactor duplicated block placement code\n\nI found that ext4_ext_find_goal() and ext4_find_near()\nshare the same code for returning a coloured start block\nbased on i_block_group.\n\nWe can refactor this into a common function so that they\ndon\u0027t diverge in the future.\n\nThanks to adilger for suggesting the new function name.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "ed7a7e16724a4123fce1fc0ff1f5131a0596f189",
      "tree": "3691bbb0d11e56ee94c659361a5c5b1e4edc5c9f",
      "parents": [
        "d3ad8434aa83ef7c88bc91edcfe012cdcbab9f3e"
      ],
      "author": {
        "name": "Robin Dong",
        "email": "hao.bigrat@gmail.com",
        "time": "Mon Jun 27 15:35:53 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 27 15:35:53 2011 -0400"
      },
      "message": "ext4: fix incorrect error msg in ext4_ext_insert_index\n\nIn function ext4_ext_insert_index when eh_entries of curp is\nbigger than eh_max, error messages will be printed out, but the content\nis about logical and ei_block, that\u0027s incorret.\n\nSigned-off-by: Robin Dong \u003csanbai@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c03f8aa9abdd517477c2021ea1251939b4da49e6",
      "tree": "e68aabc965801c85fb2b2aa1cfd42ad32bcd0b1f",
      "parents": [
        "f17722f917b2f21497deb6edc62fb1683daa08e6"
      ],
      "author": {
        "name": "Lukas Czerner",
        "email": "lczerner@redhat.com",
        "time": "Mon Jun 06 00:06:52 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 06 00:06:52 2011 -0400"
      },
      "message": "ext4: use FIEMAP_EXTENT_LAST flag for last extent in fiemap \n\nCurrently we are not marking the extent as the last one\n(FIEMAP_EXTENT_LAST) if there is a hole at the end of the file. This is\nbecause we just do not check for it right now and continue searching for\nnext extent. But at the point we hit the hole at the end of the file, it\nis too late.\n\nThis commit adds check for the allocated block in subsequent extent and\nif there is no more extents (block \u003d EXT_MAX_BLOCKS) just flag the\ncurrent one as the last one.\n\nThis behaviour has been spotted unintentionally by 252 xfstest, when the\ntest hangs out, because of wrong loop condition. However on other\nfilesystems (like xfs) it will exit anyway, because we notice the last\nextent flag and exit.\n\nWith this patch xfstest 252 does not hang anymore, ext4 fiemap\nimplementation still reports bad extent type in some cases, however\nthis seems to be different issue.\n\nSigned-off-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f17722f917b2f21497deb6edc62fb1683daa08e6",
      "tree": "10509e066829e685b25d74239f490345d28603d2",
      "parents": [
        "5def1360252b974faeb438775c19c14338bc1903"
      ],
      "author": {
        "name": "Lukas Czerner",
        "email": "lczerner@redhat.com",
        "time": "Mon Jun 06 00:05:17 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 06 00:05:17 2011 -0400"
      },
      "message": "ext4: Fix max file size and logical block counting of extent format file\n\nKazuya Mio reported that he was able to hit BUG_ON(next \u003d\u003d lblock)\nin ext4_ext_put_gap_in_cache() while creating a sparse file in extent\nformat and fill the tail of file up to its end. We will hit the BUG_ON\nwhen we write the last block (2^32-1) into the sparse file.\n\nThe root cause of the problem lies in the fact that we specifically set\ns_maxbytes so that block at s_maxbytes fit into on-disk extent format,\nwhich is 32 bit long. However, we are not storing start and end block\nnumber, but rather start block number and length in blocks. It means\nthat in order to cover extent from 0 to EXT_MAX_BLOCK we need\nEXT_MAX_BLOCK+1 to fit into len (because we counting block 0 as well) -\nand it does not.\n\nThe only way to fix it without changing the meaning of the struct\next4_extent members is, as Kazuya Mio suggested, to lower s_maxbytes\nby one fs block so we can cover the whole extent we can get by the\non-disk extent format.\n\nAlso in many places EXT_MAX_BLOCK is used as length instead of maximum\nlogical block number as the name suggests, it is all a bit messy. So\nthis commit renames it to EXT_MAX_BLOCKS and change its usage in some\nplaces to actually be maximum number of blocks in the extent.\n\nThe bug which this commit fixes can be reproduced as follows:\n\n dd if\u003d/dev/zero of\u003d/mnt/mp1/file bs\u003d\u003cblocksize\u003e count\u003d1 seek\u003d$((2**32-2))\n sync\n dd if\u003d/dev/zero of\u003d/mnt/mp1/file bs\u003d\u003cblocksize\u003e count\u003d1 seek\u003d$((2**32-1))\n\nReported-by: Kazuya Mio \u003ck-mio@sx.jp.nec.com\u003e\nSigned-off-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "1b16da77f90328661fc7e556ad591f9ee6b7ef6a",
      "tree": "b86caf7fd1c4e0f205a69d8bb7ca1ebb883cab63",
      "parents": [
        "ae24f28d39610a4810c78185cf599a771cf6ee1f"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Wed May 25 17:41:48 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed May 25 17:41:48 2011 -0400"
      },
      "message": "ext4: teach ext4_ext_split to calculate extents efficiently\n\nMake ext4_ext_split() get extents to be moved by calculating in a statement\ninstead of counting in a loop.\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "556b27abf73833923d5cd4be80006292e1b31662",
      "tree": "588fa7c3db66afb545921cdfc894f0a41e66dc49",
      "parents": [
        "a4bb6b64e39abc0e41ca077725f2a72c868e7622"
      ],
      "author": {
        "name": "Vivek Haldar",
        "email": "haldar@google.com",
        "time": "Wed May 25 07:41:54 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed May 25 07:41:54 2011 -0400"
      },
      "message": "ext4: do not normalize block requests from fallocate()\n\nCurrently, an fallocate request of size slightly larger than a power of\n2 is turned into two block requests, each a power of 2, with the extra\nblocks pre-allocated for future use. When an application calls\nfallocate, it already has an idea about how large the file may grow so\nthere is usually little benefit to reserve extra blocks on the\npreallocation list. This reduces disk fragmentation.\n\nTested: fsstress. Also verified manually that fallocat\u0027ed files are\ncontiguously laid out with this change (whereas without it they begin at\npower-of-2 boundaries, leaving blocks in between). CPU usage of\nfallocate is not appreciably higher.  In a tight fallocate loop, CPU\nusage hovers between 5%-8% with this change, and 5%-7% without it.\n\nUsing a simulated file system aging program which the file system to\n70%, the percentage of free extents larger than 8MB (as measured by\ne2freefrag) increased from 38.8% without this change, to 69.4% with\nthis change.\n\nSigned-off-by: Vivek Haldar \u003chaldar@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a4bb6b64e39abc0e41ca077725f2a72c868e7622",
      "tree": "0d911caa13d445d64cce5ea37f424bf066731ea6",
      "parents": [
        "e861304b8ed83fe43e36d46794d72641c82d4636"
      ],
      "author": {
        "name": "Allison Henderson",
        "email": "achender@linux.vnet.ibm.com",
        "time": "Wed May 25 07:41:50 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed May 25 07:41:50 2011 -0400"
      },
      "message": "ext4: enable \"punch hole\" functionality\n\nThis patch adds new routines: \"ext4_punch_hole\" \"ext4_ext_punch_hole\"\nand \"ext4_ext_check_cache\"\n\nfallocate has been modified to call ext4_punch_hole when the punch hole\nflag is passed.  At the moment, we only support punching holes in\nextents, so this routine is pretty much a wrapper for the ext4_ext_punch_hole\nroutine.\n\nThe ext4_ext_punch_hole routine first completes all outstanding writes\nwith the associated pages, and then releases them.  The unblock\naligned data is zeroed, and all blocks in between are punched out.\n\nThe ext4_ext_check_cache routine is very similar to ext4_ext_in_cache\nexcept it accepts a ext4_ext_cache parameter instead of a ext4_extent\nparameter.  This routine is used by ext4_ext_punch_hole to check and\nsee if a block in a hole that has been cached.  The ext4_ext_cache\nparameter is necessary because the members ext4_extent structure are\nnot large enough to hold a 32 bit value.  The existing\next4_ext_in_cache routine has become a wrapper to this new function.\n\n[ext4 punch hole patch series 5/5 v7] \n\nSigned-off-by: Allison Henderson \u003cachender@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nReviewed-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\n"
    },
    {
      "commit": "e861304b8ed83fe43e36d46794d72641c82d4636",
      "tree": "14a9c42ee5b6a531bc3202063bcd9c413e30c17e",
      "parents": [
        "d583fb87a3ff0ca50befd2f73f7a67fade1c8c56"
      ],
      "author": {
        "name": "Allison Henderson",
        "email": "achender@linux.vnet.ibm.com",
        "time": "Wed May 25 07:41:46 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed May 25 07:41:46 2011 -0400"
      },
      "message": "ext4: add \"punch hole\" flag to ext4_map_blocks()\n\nThis patch adds a new flag to ext4_map_blocks() that specifies the\ngiven range of blocks should be punched out.  Extents are first\nconverted to uninitialized extents before they are punched\nout. Because punching a hole may require that the extent be split, it\nis possible that the splitting may need more blocks than are\navailable.  To deal with this, use of reserved blocks are enabled to\nallow the split to proceed.\n\nThe routine then returns the number of blocks successfully\npunched out.\n\n[ext4 punch hole patch series 4/5 v7]\n\nSigned-off-by: Allison Henderson \u003cachender@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nReviewed-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\n"
    },
    {
      "commit": "d583fb87a3ff0ca50befd2f73f7a67fade1c8c56",
      "tree": "4e8cd6c05390d5355906d5657b87d82fcd4ea750",
      "parents": [
        "308488518dfcbe3be250085cd582f5b0c1ce72a9"
      ],
      "author": {
        "name": "Allison Henderson",
        "email": "achender@linux.vnet.ibm.com",
        "time": "Wed May 25 07:41:43 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed May 25 07:41:43 2011 -0400"
      },
      "message": "ext4: punch out extents\n\nThis patch modifies the truncate routines to support hole punching\nBelow is a brief summary of the patches changes:\n\n- Added end param to ext_ext4_rm_leaf\n        This function has been modified to accept an end parameter\n        which enables it to punch holes in leafs instead of just\n        truncating them.\n\n- Implemented the \"remove head\" case in the ext_remove_blocks routine\n        This routine is used by ext_ext4_rm_leaf to remove the tail\n        of an extent during a truncate.  The new ext_ext4_rm_leaf\n        routine will now also use it to remove the head of an extent in the\n        case that the hole covers a region of blocks at the beginning\n        of an extent.\n\n- Added \"end\" param to ext4_ext_remove_space routine\n        This function has been modified to accept a stop parameter, which\n        is passed through to ext4_ext_rm_leaf.\n\n[ext4 punch hole patch series 3/5 v6] \n\nSigned-off-by: Allison Henderson \u003cachender@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "55f020db66ce187fb8c8e4002a94b0eb714da450",
      "tree": "e98214511542f57fa93074be12e27c4819520333",
      "parents": [
        "ae81230686282af745ebb7a74c0332349cb9131a"
      ],
      "author": {
        "name": "Allison Henderson",
        "email": "achender@linux.vnet.ibm.com",
        "time": "Wed May 25 07:41:26 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed May 25 07:41:26 2011 -0400"
      },
      "message": "ext4: add flag to ext4_has_free_blocks\n\nThis patch adds an allocation request flag to the ext4_has_free_blocks\nfunction which enables the use of reserved blocks.  This will allow a\npunch hole to proceed even if the disk is full.  Punching a hole may\nrequire additional blocks to first split the extents.\n\nBecause ext4_has_free_blocks is a low level function, the flag needs\nto be passed down through several functions listed below:\n\next4_ext_insert_extent\next4_ext_create_new_leaf\next4_ext_grow_indepth\next4_ext_split\next4_ext_new_meta_block\next4_mb_new_blocks\next4_claim_free_blocks\next4_has_free_blocks\n\n[ext4 punch hole patch series 1/5 v7]\n\nSigned-off-by: Allison Henderson \u003cachender@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nReviewed-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\n"
    },
    {
      "commit": "b221349fa8b45d13c3650089f0514df7d1eb36c3",
      "tree": "5fb5e797c3f05294dd2e9352c05bb20b29a95d16",
      "parents": [
        "072bd7ea74d4b60149a33967d29666bbd84e7709"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Tue May 24 11:36:58 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 24 11:36:58 2011 -0400"
      },
      "message": "ext4: fix ext4_ext_fiemap_cb() to handle blocks before request range correctly\n\nTo get delayed-extent information, ext4_ext_fiemap_cb() looks up\npagecache, it thus collects information starting from a page\u0027s\nhead block.\n\nIf blocksize \u003c pagesize, the beginning blocks of a page may lies\nbefore the request range. So ext4_ext_fiemap_cb() should proceed\nignoring them, because they has been handled before. If no mapped\nbuffer in the range is found in the 1st page, we need to look up\nthe 2nd page, otherwise delayed-extents after a hole will be ignored.\n\nWithout this patch, xfstests 225 will hung on ext4 with 1K block.\n\nReported-by: Amir Goldstein \u003camir73il@users.sourceforge.net\u003e\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f6d2f6b327ceef5c689581529a852dc6ec3b74a6",
      "tree": "9ae24dbb3787f596687954322c55e73570d6ed88",
      "parents": [
        "77f4135f2a219a2127be6cc1208c42e6175b11dd"
      ],
      "author": {
        "name": "Eric Gouriou",
        "email": "egouriou@google.com",
        "time": "Sun May 22 21:33:00 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 22 21:33:00 2011 -0400"
      },
      "message": "ext4: fix unbalanced up_write() in ext4_ext_truncate() error path\n\next4_ext_truncate() should not invoke up_write(\u0026EXT4_I(inode)-\u003ei_data_sem)\nwhen ext4_orphan_add() returns an error, as it hasn\u0027t performed a\ndown_write() yet. This trivial patch fixes this by moving the up_write()\ninvocation above the out_stop label.\n\nSigned-off-by: Eric Gouriou \u003cegouriou@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "77f4135f2a219a2127be6cc1208c42e6175b11dd",
      "tree": "8f85549d2354c5a69a5b29197f68a554daad1324",
      "parents": [
        "93917411be8db5d21abf15c781dfa43c5cc6edf2"
      ],
      "author": {
        "name": "Vivek Haldar",
        "email": "haldar@google.com",
        "time": "Sun May 22 21:24:16 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 22 21:24:16 2011 -0400"
      },
      "message": "ext4: count hits/misses of extent cache and expose in sysfs\n\nThe number of hits and misses for each filesystem is exposed in\n/sys/fs/ext4/\u003cdev\u003e/extent_cache_{hits, misses}.\n\nTested: fsstress, manual checks.\nSigned-off-by: Vivek Haldar \u003chaldar@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "93917411be8db5d21abf15c781dfa43c5cc6edf2",
      "tree": "d5fb8f6b69a8fe710663ba5e5f7cb9fdec982112",
      "parents": [
        "373cd5c53d5ea6622c319ecd84e29e2737d488bd"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Sun May 22 20:49:12 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 22 20:49:12 2011 -0400"
      },
      "message": "ext4: make ext4_split_extent() handle error correctly\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nReviewed-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\n"
    },
    {
      "commit": "9b940f8e8c32456c8a6428fa4313a4bcca7b4fcb",
      "tree": "24b784d45ad077461bdc76faf5e0fa0125eed0ec",
      "parents": [
        "0b26859027ce0005ef89520af20351360e51ad76"
      ],
      "author": {
        "name": "Allison Henderson",
        "email": "achender@linux.vnet.ibm.com",
        "time": "Mon May 16 10:11:09 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon May 16 10:11:09 2011 -0400"
      },
      "message": "ext4: ext4_ext_convert_to_initialized bug found in extended FSX testing\n\nThis patch addresses bugs found while testing punch hole \nwith the fsx test.  The patch corrects the number of blocks\nthat are zeroed out while splitting an extent, and also corrects\nthe return value to return the number of blocks split out, instead\nof the number of blocks zeroed out.\n\nThis patch has been tested in addition to the following patches: \n[Ext4 punch hole v7]\n[XFS Tests Punch Hole 1/1 v2] Add Punch Hole Testing to FSX\n\nThe test ran successfully for 24 hours.\n\nSigned-off-by: Allison Henderson \u003cachender@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "667eff35a1f56fa74ce98a0c7c29a40adc1ba4e3",
      "tree": "625caf470f97ebd544cc19a06dc2921b34708aa8",
      "parents": [
        "47ea3bb59cf47298b1cbb4d7bef056b3afea0879"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Tue May 03 12:25:07 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 03 12:25:07 2011 -0400"
      },
      "message": "ext4: reimplement convert and split_unwritten\n\nReimplement ext4_ext_convert_to_initialized() and\next4_split_unwritten_extents() using ext4_split_extent()\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nTested-by: Allison Henderson \u003cachender@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "47ea3bb59cf47298b1cbb4d7bef056b3afea0879",
      "tree": "20d3f182b3fe743e7ca221dc2ae2cf7ab93ba6b8",
      "parents": [
        "197217a5af79c23609da03eda2a52ee8603eec52"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Tue May 03 12:23:07 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 03 12:23:07 2011 -0400"
      },
      "message": "ext4: add ext4_split_extent_at() and ext4_split_extent()\n\nAdd two functions: ext4_split_extent_at(), which splits an extent into\ntwo extents at given logical block, and ext4_split_extent() which\nsplits an extent into three extents.\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nTested-by: Allison Henderson \u003cachender@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "197217a5af79c23609da03eda2a52ee8603eec52",
      "tree": "df05721599f21c46fb4879ec3195431dd9a45804",
      "parents": [
        "df5e6223407e3e645065c4bd968fee007f0e0287"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Tue May 03 11:45:29 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 03 11:45:29 2011 -0400"
      },
      "message": "ext4: add a function merging extents right and left\n\n1) Rename ext4_ext_try_to_merge() to ext4_ext_try_to_merge_right().\n\n2) Add a new function ext4_ext_try_to_merge() which tries to merge\n   an extent both left and right.\n\n3) Use the new function in ext4_ext_convert_unwritten_endio() and\n   ext4_ext_insert_extent().\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nTested-by: Allison Henderson \u003cachender@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "25985edcedea6396277003854657b5f3cb31a628",
      "tree": "f026e810210a2ee7290caeb737c23cb6472b7c38",
      "parents": [
        "6aba74f2791287ec407e0f92487a725a25908067"
      ],
      "author": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Wed Mar 30 22:57:33 2011 -0300"
      },
      "committer": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Thu Mar 31 11:26:23 2011 -0300"
      },
      "message": "Fix common misspellings\n\nFixes generated by \u0027codespell\u0027 and manually reviewed.\n\nSigned-off-by: Lucas De Marchi \u003clucas.demarchi@profusion.mobi\u003e\n"
    },
    {
      "commit": "ae005cbed12d0b340b04b59d6f5c56e710b3895d",
      "tree": "d464865bcc97bea05eab4eba0d10bcad4ec89b93",
      "parents": [
        "3961cdf85b749f6bab50ad31ee97e9277e7a3b70",
        "0ba0851714beebb800992e5105a79dc3a4c504b0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 25 09:57:40 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 25 09:57:41 2011 -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: (43 commits)\n  ext4: fix a BUG in mb_mark_used during trim.\n  ext4: unused variables cleanup in fs/ext4/extents.c\n  ext4: remove redundant set_buffer_mapped() in ext4_da_get_block_prep()\n  ext4: add more tracepoints and use dev_t in the trace buffer\n  ext4: don\u0027t kfree uninitialized s_group_info members\n  ext4: add missing space in printk\u0027s in __ext4_grp_locked_error()\n  ext4: add FITRIM to compat_ioctl.\n  ext4: handle errors in ext4_clear_blocks()\n  ext4: unify the ext4_handle_release_buffer() api\n  ext4: handle errors in ext4_rename\n  jbd2: add COW fields to struct jbd2_journal_handle\n  jbd2: add the b_cow_tid field to journal_head struct\n  ext4: Initialize fsync transaction ids in ext4_new_inode()\n  ext4: Use single thread to perform DIO unwritten convertion\n  ext4: optimize ext4_bio_write_page() when no extent conversion is needed\n  ext4: skip orphan cleanup if fs has unknown ROCOMPAT features\n  ext4: use the nblocks arg to ext4_truncate_restart_trans()\n  ext4: fix missing iput of root inode for some mount error paths\n  ext4: make FIEMAP and delayed allocation play well together\n  ext4: suppress verbose debugging information if malloc-debug is off\n  ...\n\nFi up conflicts in fs/ext4/super.c due to workqueue changes\n"
    },
    {
      "commit": "65922cb5ced76ba7182e955d4aada96f93446b1a",
      "tree": "2d6b7f56f226e7e17f67f642775a2ec0a32c7e17",
      "parents": [
        "6de9843dab3f2a1d4d66d80aa9e5782f80977d20"
      ],
      "author": {
        "name": "Sergey Senozhatsky",
        "email": "sergey.senozhatsky@gmail.com",
        "time": "Wed Mar 23 14:08:27 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Mar 23 14:08:27 2011 -0400"
      },
      "message": "ext4: unused variables cleanup in fs/ext4/extents.c\n\next4 extents cleanup:\n\n  . remove unused `*ex\u0027 from check_eofblocks_fl\n  . remove unused `*eh\u0027 from ext4_ext_map_blocks\n\n\nSigned-off-by: Sergey Senozhatsky \u003csergey.senozhatsky@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "0562e0bad483d10e9651fbb8f21dc3d0bad57374",
      "tree": "19f6597f92c028badcb6df360ccac22240378e25",
      "parents": [
        "4596fe07679ff0fae904515691ea747467614871"
      ],
      "author": {
        "name": "Jiaying Zhang",
        "email": "jiayingz@google.com",
        "time": "Mon Mar 21 21:38:05 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Mar 21 21:38:05 2011 -0400"
      },
      "message": "ext4: add more tracepoints and use dev_t in the trace buffer\n\n- Add more ext4 tracepoints.\n- Change ext4 tracepoints to use dev_t field with MAJOR/MINOR macros\nso that we can save 4 bytes in the ring buffer on some platforms.\n- Add sync_mode to ext4_da_writepages, ext4_da_write_pages, and\next4_da_writepages_result tracepoints. Also remove for_reclaim\nfield from ext4_da_writepages since it is usually not very useful.\n\nSigned-off-by: Jiaying Zhang \u003cjiayingz@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "6d9c85eb700bd3ac59e63bb9de463dea1aca084c",
      "tree": "c87def25fd7c97b94e8d78700dd0794abe5c8a50",
      "parents": [
        "4dd89fc6251a6bda2c18e71e7d266e983806579d"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Sun Feb 27 17:25:47 2011 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Feb 27 17:25:47 2011 -0500"
      },
      "message": "ext4: make FIEMAP and delayed allocation play well together\n\nFix the FIEMAP ioctl so that it returns all of the page ranges which\nare still subject to delayed allocation.  We were missing some cases\nif the file was sparse.\n\nReported by Chris Mason \u003cchris.mason@oracle.com\u003e:\n\u003eWe\u0027ve had reports on btrfs that cp is giving us files full of zeros\n\u003einstead of actually copying them.  It was tracked down to a bug with\n\u003ethe btrfs fiemap implementation where it was returning holes for\n\u003edelalloc ranges.\n\u003e\n\u003eNewer versions of cp are trusting fiemap to tell it where the holes\n\u003eare, which does seem like a pretty neat trick.\n\u003e\n\u003eI decided to give xfs and ext4 a shot with a few tests cases too, xfs\n\u003epassed with all the ones btrfs was getting wrong, and ext4 got the basic\n\u003edelalloc case right.\n\u003e$ mkfs.ext4 /dev/xxx\n\u003e$ mount /dev/xxx /mnt\n\u003e$ dd if\u003d/dev/zero of\u003d/mnt/foo bs\u003d1M count\u003d1\n\u003e$ fiemap-test foo\n\u003eext:   0 logical: [       0..     255] phys:        0..     255\n\u003eflags: 0x007 tot: 256\n\u003e\n\u003eHorray!  But once we throw a hole in, things go bad:\n\u003e$ mkfs.ext4 /dev/xxx\n\u003e$ mount /dev/xxx /mnt\n\u003e$ dd if\u003d/dev/zero of\u003d/mnt/foo bs\u003d1M count\u003d1 seek\u003d1\n\u003e$ fiemap-test foo\n\u003e\u003c no output \u003e\n\u003e\n\u003eWe\u0027ve got a delalloc extent after the hole and ext4 fiemap didn\u0027t find\n\u003eit.  If I run sync to kick the delalloc out:\n\u003e$sync\n\u003e$ fiemap-test foo\n\u003eext:   0 logical: [     256..     511] phys:    34048..   34303\n\u003eflags: 0x001 tot: 256\n\u003e\n\u003efiemap-test is sitting in my /usr/local/bin, and I have no idea how it\n\u003egot there.  It\u0027s full of pretty comments so I know it isn\u0027t mine, but\n\u003eyou can grab it here:\n\u003e\n\u003ehttp://oss.oracle.com/~mason/fiemap-test.c\n\u003e\n\u003exfsqa has a fiemap program too.\n\nAfter Fix, test results are as follows:\next:   0 logical: [     256..     511] phys:        0..     255\nflags: 0x007 tot: 256\next:   0 logical: [     256..     511] phys:    33280..   33535\nflags: 0x001 tot: 256\n\n$ mkfs.ext4 /dev/xxx\n$ mount /dev/xxx /mnt\n$ dd if\u003d/dev/zero of\u003d/mnt/foo bs\u003d1M count\u003d1 seek\u003d1\n$ sync\n$ dd if\u003d/dev/zero of\u003d/mnt/foo bs\u003d1M count\u003d1 seek\u003d3\n$ dd if\u003d/dev/zero of\u003d/mnt/foo bs\u003d1M count\u003d1 seek\u003d5\n$ fiemap-test foo\next:   0 logical: [     256..     511] phys:    33280..   33535\nflags: 0x000 tot: 256\next:   1 logical: [     768..    1023] phys:        0..     255\nflags: 0x006 tot: 256\next:   2 logical: [    1280..    1535] phys:        0..     255\nflags: 0x007 tot: 256\n\nTested-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nReviewed-by: Andreas Dilger \u003cadilger@dilger.ca\u003e\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "7dc576158d7e5cdff3349f78598fdb4080536342",
      "tree": "e7be15a8ee8add729915c81e9cb39cd55d6b572d",
      "parents": [
        "da488945f4bf4096f4ab6091938469bd8822cfec"
      ],
      "author": {
        "name": "Peter Huewe",
        "email": "peterhuewe@gmx.de",
        "time": "Mon Feb 21 21:01:42 2011 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Feb 21 21:01:42 2011 -0500"
      },
      "message": "ext4: Fix sparse warning: Using plain integer as NULL pointer\n\nThis patch fixes the warning \"Using plain integer as NULL pointer\",\ngenerated by sparse, by replacing the offending 0s with NULL.\n\nSigned-off-by: Peter Huewe \u003cpeterhuewe@gmx.de\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "fd018fe8234e84e05ab05d4176525817c8779cd6",
      "tree": "890d15dd30ee81f2421949e9985b14437a3763db",
      "parents": [
        "68ba69740ba910caeff35452f991d25372dd0f96"
      ],
      "author": {
        "name": "Paul Bolle",
        "email": "pebolle@tiscali.nl",
        "time": "Tue Feb 15 00:05:43 2011 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Tue Feb 15 10:28:59 2011 +0100"
      },
      "message": "ext4: fix comment typo uninitized\n\nSigned-off-by: Paul Bolle \u003cpebolle@tiscali.nl\u003e\nReviewed-by: Jesper Juhl \u003cjj@chaosbits.net\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "0a9d59a2461477bd9ed143c01af9df3f8f00fa81",
      "tree": "df997d1cfb0786427a0df1fbd6f0640fa4248cf4",
      "parents": [
        "a23ce6da9677d245aa0aadc99f4197030350ab54",
        "795abaf1e4e188c4171e3cd3dbb11a9fcacaf505"
      ],
      "author": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Tue Feb 15 10:24:31 2011 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Tue Feb 15 10:24:31 2011 +0100"
      },
      "message": "Merge branch \u0027master\u0027 into for-next\n"
    },
    {
      "commit": "e9e3bcecf44c04b9e6b505fd8e2eb9cea58fb94d",
      "tree": "9f347a48889a00071dbe1f12be4c50ec7a45542b",
      "parents": [
        "2892c15ddda6a76dc10b7499e56c0f3b892e5a69"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Sat Feb 12 08:17:34 2011 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Feb 12 08:17:34 2011 -0500"
      },
      "message": "ext4: serialize unaligned asynchronous DIO\n\next4 has a data corruption case when doing non-block-aligned\nasynchronous direct IO into a sparse file, as demonstrated\nby xfstest 240.\n\nThe root cause is that while ext4 preallocates space in the\nhole, mappings of that space still look \"new\" and \ndio_zero_block() will zero out the unwritten portions.  When\nmore than one AIO thread is going, they both find this \"new\"\nblock and race to zero out their portion; this is uncoordinated\nand causes data corruption.\n\nDave Chinner fixed this for xfs by simply serializing all\nunaligned asynchronous direct IO.  I\u0027ve done the same here.\nThe difference is that we only wait on conversions, not all IO.\nThis is a very big hammer, and I\u0027m not very pleased with\nstuffing this into ext4_file_write().  But since ext4 is\nDIO_LOCKING, we need to serialize it at this high level.\n\nI tried to move this into ext4_ext_direct_IO, but by then\nwe have the i_mutex already, and we will wait on the\nwork queue to do conversions - which must also take the\ni_mutex.  So that won\u0027t work.\n\nThis was originally exposed by qemu-kvm installing to\na raw disk image with a normal sector-63 alignment.  I\u0027ve\ntested a backport of this patch with qemu, and it does\navoid the corruption.  It is also quite a lot slower\n(14 min for package installs, vs. 8 min for well-aligned)\nbut I\u0027ll take slow correctness over fast corruption any day.\n\nMingming suggested that we can track outstanding\nconversions, and wait on those so that non-sparse\nfiles won\u0027t be affected, and I\u0027ve implemented that here;\nunaligned AIO to nonsparse files won\u0027t take a perf hit.\n\n[tytso@mit.edu: Keep the mutex as a hashed array instead\n of bloating the ext4 inode]\n\n[tytso@mit.edu: Fix up namespace issues so that global\n variables are protected with an \"ext4_\" prefix.]\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "b8d6568a122ab7bd47b151ff9f9a40cebea579c0",
      "tree": "7fcabf1ee8797f388735b1e09bd69f1cfd9d601b",
      "parents": [
        "42b16b3fbb5ee4555f5dee6220f3ccaa6e1ebe47"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Fri Jan 21 23:21:31 2011 +0800"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Fri Jan 21 16:27:01 2011 +0100"
      },
      "message": "ext4: Fix comment typo \"especiially\".\n\nChange \"especiially\" to \"especially\".\n\nCc: Jiri Kosina \u003cjkosina@suse.cz\u003e\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "2fe17c1075836b66678ed2a305fd09b6773883aa",
      "tree": "eb5287be8138686682eef9622872cfc7657e0664",
      "parents": [
        "64c23e86873ee410554d6d1c76b60da47025e96f"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Jan 14 13:07:43 2011 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 17 02:25:31 2011 -0500"
      },
      "message": "fallocate should be a file operation\n\nCurrently all filesystems except XFS implement fallocate asynchronously,\nwhile XFS forced a commit.  Both of these are suboptimal - in case of O_SYNC\nI/O we really want our allocation on disk, especially for the !KEEP_SIZE\ncase where we actually grow the file with user-visible zeroes.  On the\nother hand always commiting the transaction is a bad idea for fast-path\nuses of fallocate like for example in recent Samba versions.   Given\nthat block allocation is a data plane operation anyway change it from\nan inode operation to a file operation so that we have the file structure\navailable that lets us check for O_SYNC.\n\nThis also includes moving the code around for a few of the filesystems,\nand remove the already unnedded S_ISDIR checks given that we only wire\nup fallocate for regular files.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "64c23e86873ee410554d6d1c76b60da47025e96f",
      "tree": "b30c5ff8782ebfdec6956d7834f796731fd3a1d4",
      "parents": [
        "eb745dbccce56f1bbe3f80b95ad2a325145171c2"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Jan 14 13:07:30 2011 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 17 02:25:30 2011 -0500"
      },
      "message": "make the feature checks in -\u003efallocate future proof\n\nInstead of various home grown checks that might need updates for new\nflags just check for any bit outside the mask of the features supported\nby the filesystem.  This makes the check future proof for any newly\nadded flag.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b2034d474b7e1e8578bd5c2977024b51693269d9",
      "tree": "e43969bf7c2ba89884c2580f56978826f1014520",
      "parents": [
        "27d189c02ba25851973c8582e419c0bded9f7e5b",
        "924241575a85249b9d410e38f5b2fcad9035e45c"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:27:28 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:27:28 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (41 commits)\n  fs: add documentation on fallocate hole punching\n  Gfs2: fail if we try to use hole punch\n  Btrfs: fail if we try to use hole punch\n  Ext4: fail if we try to use hole punch\n  Ocfs2: handle hole punching via fallocate properly\n  XFS: handle hole punching via fallocate properly\n  fs: add hole punching to fallocate\n  vfs: pass struct file to do_truncate on O_TRUNC opens (try #2)\n  fix signedness mess in rw_verify_area() on 64bit architectures\n  fs: fix kernel-doc for dcache::prepend_path\n  fs: fix kernel-doc for dcache::d_validate\n  sanitize ecryptfs -\u003emount()\n  switch afs\n  move internal-only parts of ncpfs headers to fs/ncpfs\n  switch ncpfs\n  switch 9p\n  pass default dentry_operations to mount_pseudo()\n  switch hostfs\n  switch affs\n  switch configfs\n  ...\n"
    },
    {
      "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": "d6dc8462f471f7bbb49c42c147bf84de0c977099",
      "tree": "64624b26b2c2f551e2b579013d149c51c0716583",
      "parents": [
        "db47fef2cd9aab76ab976e8b45a06a1b3ad0e3e4"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed Nov 17 20:46:18 2010 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jan 12 20:16:44 2011 -0500"
      },
      "message": "Ext4: fail if we try to use hole punch\n\nExt4 doesn\u0027t have the ability to punch holes yet, so make sure we return\nEOPNOTSUPP if we try to use hole punching through fallocate.  This support can\nbe added later.  Thanks,\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d002ebf1d8daa5a317645b1c4a3a0b7ea2abc9ac",
      "tree": "d7b51bc1be02cbd08c6740ef73f79892f8653c83",
      "parents": [
        "1c5b9e9065567876c2d4a7a16d78f0fed154a5bf"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Mon Jan 10 13:03:35 2011 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 10 13:03:35 2011 -0500"
      },
      "message": "ext4: don\u0027t pass entire map to check_eofblocks_fl\n\nSince check_eofblocks_fl() only uses the m_lblk portion of the map\nstructure, we may as well pass that directly, rather than passing the\nentire map, which IMHO obfuscates what parameters check_eofblocks_fl()\ncares about.  Not a big deal, but seems tidier and less confusing, to\nme.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "3889fd57ea3c58209354862523275774fca9db03",
      "tree": "1e68fb9b2691c0b792a36be7d87c987e8508dac6",
      "parents": [
        "b40971426a837e9dc9c66e1b6bbcb3874eafe4e0"
      ],
      "author": {
        "name": "Jiaying Zhang",
        "email": "jiayingz@google.com",
        "time": "Mon Jan 10 12:47:05 2011 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 10 12:47:05 2011 -0500"
      },
      "message": "ext4: flush the i_completed_io_list during ext4_truncate\n\nTed first found the bug when running 2.6.36 kernel with dioread_nolock\nmount option that xfstests #13 complained about wrong file size during fsck.\nHowever, the bug exists in the older kernels as well although it is\nsomehow harder to trigger.\n\nThe problem is that ext4_end_io_work() can happen after we have truncated an\ninode to a smaller size. Then when ext4_end_io_work() calls \next4_convert_unwritten_extents(), we may reallocate some blocks that have \nbeen truncated, so the inode size becomes inconsistent with the allocated\nblocks. \n\nThe following patch flushes the i_completed_io_list during truncate to reduce \nthe risk that some pending end_io requests are executed later and convert \nalready truncated blocks to initialized. \n\nNote that although the fix helps reduce the problem a lot there may still \nbe a race window between vmtruncate() and ext4_end_io_work(). The fundamental\nproblem is that if vmtruncate() is called without either i_mutex or i_alloc_sem\nheld, it can race with an ongoing write request so that the io_end request is\nprocessed later when the corresponding blocks have been truncated.\n\nTed and I have discussed the problem offline and we saw a few ways to fix\nthe race completely:\n\na) We guarantee that i_mutex lock and i_alloc_sem write lock are both hold \nwhenever vmtruncate() is called. The i_mutex lock prevents any new write\nrequests from entering writeback and the i_alloc_sem prevents the race\nfrom ext4_page_mkwrite(). Currently we hold both locks if vmtruncate()\nis called from do_truncate(), which is probably the most common case.\nHowever, there are places where we may call vmtruncate() without holding\neither i_mutex or i_alloc_sem. I would like to ask for other people\u0027s\nopinions on what locks are expected to be held before calling vmtruncate().\nThere seems a disagreement among the callers of that function.\n\nb) We change the ext4 write path so that we change the extent tree to contain \nthe newly allocated blocks and update i_size both at the same time --- when \nthe write of the data blocks is completed.\n\nc) We add some additional locking to synchronize vmtruncate() and \next4_end_io_work(). This approach may have performance implications so we\nneed to be careful.\n\nAll of the above proposals may require more substantial changes, so\nwe may consider to take the following patch as a bandaid.\n\nSigned-off-by: Jiaying Zhang \u003cjiayingz@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "b05e6ae58a13b56e3e11882c1fc71948c9b29760",
      "tree": "452cbadcbc8091b4db95f917f28b0f9de845dabf",
      "parents": [
        "01f49d0b9d0209dc1194255b11601e4b94447b36"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 10 12:13:26 2011 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 10 12:13:26 2011 -0500"
      },
      "message": "ext4: drop ec_type from the ext4_ext_cache structure\n\nWe can encode the ec_type information by using ee_len \u003d\u003d 0 to denote\nEXT4_EXT_CACHE_NO, ee_start \u003d\u003d 0 to denote EXT4_EXT_CACHE_GAP, and if\nneither is true, then the cache type must be EXT4_EXT_CACHE_EXTENT.\nThis allows us to reduce the size of ext4_ext_inode by another 8\nbytes.  (ec_type is 4 bytes, plus another 4 bytes of padding)\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\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"
    }
  ],
  "next": "ad4fb9cafe100a4a9de6e0529015e584d94ac8dc"
}
