)]}'
{
  "log": [
    {
      "commit": "4159175058987cb68aefd0e9eec2598b795363b4",
      "tree": "452a3ef5f8f2ae4c79095519078383fe766d69ab",
      "parents": [
        "de9a55b841132f7ae097f6e31ccebad2d5030cf5"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 15 03:41:23 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 15 03:41:23 2009 -0400"
      },
      "message": "ext4: Don\u0027t update ctime for non-extent-mapped inodes\n\nThe VFS handles updating ctime, so we don\u0027t need to update the inode\u0027s\nctime in ext4_splace_branch() to update the direct or indirect blocks.\nThis was harmless when we did this in ext3, but in ext4, thanks to\ndelayed allocation, updating the ctime in ext4_splice_branch() can\ncause the ctime to mysteriously jump when the blocks are finally\nallocated.\n\nThanks to Björn Steinbrink for pointing out this problem on the git\nmailing list.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "de9a55b841132f7ae097f6e31ccebad2d5030cf5",
      "tree": "9b66c7c68bff923a62d4c2b04114e22a8fa524e1",
      "parents": [
        "0610b6e99939828b77eec020ead0e1f44cba38ca"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jun 14 17:45:34 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jun 14 17:45:34 2009 -0400"
      },
      "message": "ext4: Fix up whitespace issues in fs/ext4/inode.c\n\nThis is a pure cleanup patch.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "4ab2f15b7f709c3626a7eed075a7225b4c775c7e",
      "tree": "bfefc592c4c2eb176162134c615132e75f810486",
      "parents": [
        "bc0b0d6d69ee9022f18ae264e62beb30ddeb322a"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jun 13 10:09:36 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jun 13 10:09:36 2009 -0400"
      },
      "message": "ext4: move the abort flag from s_mount_opts to s_mount_flags\n\nWe\u0027re running out of space in the mount options word, and\nEXT4_MOUNT_ABORT isn\u0027t really a mount option, but a run-time flag.  So\nmove it to become EXT4_MF_FS_ABORTED in s_mount_flags.\n\nAlso remove bogus ext2_fs.h / ext4.h simultaneous #include protection,\nwhich can never happen.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "7f4520cc6242780ce720aa440ad4b391f998b558",
      "tree": "c8f1d99e019f2e29a967851031f4a60bf7ab1467",
      "parents": [
        "748de6736c1e482e111f9d1b5a5d5b1787600cad"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jun 13 10:09:41 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jun 13 10:09:41 2009 -0400"
      },
      "message": "ext4: change s_mount_opt to be an unsigned int\n\nWe can only fit 32 options in s_mount_opt because an unsigned long is\n32-bits on a x86 machine.  So use an unsigned int to save space on\n64-bit platforms.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "9bffad1ed2a003a355ed1b42424a0ae3575275ed",
      "tree": "9016e7b0e04a0e5319680f9e1f89fc1abb13c765",
      "parents": [
        "879c5e6b7cb4c689d08ca9b2e353d8ab3dc425d5"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Jun 17 11:48:11 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Jun 17 11:48:11 2009 -0400"
      },
      "message": "ext4: convert instrumentation from markers to tracepoints\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "0eab928221bac8895a0b494a16a8810002bd8645",
      "tree": "733ca0ee831fffb3fd2c96b6715250e79e7a24fa",
      "parents": [
        "9aee2286071c23c535fe9928eec1a26e0bcf256d"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jun 09 09:54:40 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jun 09 09:54:40 2009 -0400"
      },
      "message": "ext4: Don\u0027t treat a truncation of a zero-length file as replace-via-truncate\n\nIf a non-existent file is opened via O_WRONLY|O_CREAT|O_TRUNC, there\u0027s\nno need to treat this as a true file truncation, so we shouldn\u0027t\nactivate the replace-via-truncate hueristic.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f8514083cd61daef12fba5ef883ad9352c450428",
      "tree": "46cbf0c28ea112229c3ee9209750c8017f1b9385",
      "parents": [
        "1938a150c25bf7c2c47182e753a1038945b70b0e"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Fri Jun 05 00:56:49 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jun 05 00:56:49 2009 -0400"
      },
      "message": "ext4: truncate the file properly if we fail to copy data from userspace\n\nIn generic_perform_write if we fail to copy the user data we don\u0027t\nupdate the inode-\u003ei_size.  We should truncate the file in the above\ncase so that we don\u0027t have blocks allocated outside inode-\u003ei_size.  Add\nthe inode to orphan list in the same transaction as block allocation\nThis ensures that if we crash in between the recovery would do the\ntruncate.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nCC:  Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "1938a150c25bf7c2c47182e753a1038945b70b0e",
      "tree": "cab711b2868d719c6f460a75387acf84f6b37576",
      "parents": [
        "b31e15527a9bb71b6a11a425d17ce139a62f5af5"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Fri Jun 05 01:00:26 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jun 05 01:00:26 2009 -0400"
      },
      "message": "ext4: Avoid leaking blocks after a block allocation failure\n\nWe should add inode to the orphan list in the same transaction\nas block allocation.  This ensures that if we crash after a failed\nblock allocation and before we do a vmtruncate we don\u0027t leak block\n(ie block marked as used in bitmap but not claimed by the inode).\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nCC:  Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "03f5d8bcf094a5e3b501bd2ae1553656efa8d1be",
      "tree": "04644e9008e7357fd87f14fee6404b7c306bc3e9",
      "parents": [
        "0b8e58a140cae2ba1c4a21ccae7c6c3c939c51f9"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue Jun 09 00:17:05 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jun 09 00:17:05 2009 -0400"
      },
      "message": "ext4: Get rid of EXTEND_DISKSIZE flag of ext4_get_blocks_handle()\n\nGet rid of EXTEND_DISKSIZE flag of ext4_get_blocks_handle(). This\nseems to be a relict from some old days and setting disksize in this\nfunction does not make much sense.  Currently it was set only by\next4_getblk().  Since the parameter has some effect only if create \u003d\u003d\n1, it is easy to check by grepping through the sources that the three\ncallers which end up calling ext4_getblk() with create \u003d\u003d 1\n(ext4_append, ext4_quota_write, ext4_mkdir) do the right thing and set\ndisksize themselves.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "759d427aa5a9d88a81afd11817cdeb40aea85234",
      "tree": "8e8316ed77c9ee21cce9058d5b477c0e7cf4462b",
      "parents": [
        "0f7ee7c17241915fdaff49d1a36f5aafd80a7dce"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon May 25 11:51:00 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon May 25 11:51:00 2009 -0400"
      },
      "message": "ext4: remove unused function __ext4_write_dirty_metadata\n\nThe __ext4_write_dirty_metadata() function was introduced by commit\n0390131b, \"ext4: Allow ext4 to run without a journal\", but nothing\never used the function, either then or since.  So let\u0027s remove it and\nsave a bit of space.\n\nCc: Frank Mayhar \u003cfmayhar@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "6fd058f7791087648c683eb8572edf3be3c4c23c",
      "tree": "0d80791532d2d022c91f20013003716eaf0afb40",
      "parents": [
        "2ac3b6e00acb46406c993d57921f86a594aafe08"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 17 15:38:01 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 17 15:38:01 2009 -0400"
      },
      "message": "ext4: Add a comprehensive block validity check to ext4_get_blocks()\n\nTo catch filesystem bugs or corruption which could lead to the\nfilesystem getting severly damaged, this patch adds a facility for\ntracking all of the filesystem metadata blocks by contiguous regions\nin a red-black tree.  This allows quick searching of the tree to\nlocate extents which might overlap with filesystem metadata blocks.\n\nThis facility is also used by the multi-block allocator to assure that\nit is not allocating blocks out of the system zone, as well as by the\nroutines used when reading indirect blocks and extents information\nfrom disk to make sure their contents are valid.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "2ac3b6e00acb46406c993d57921f86a594aafe08",
      "tree": "51f8a245caa53776fb9617973742ffc81023e007",
      "parents": [
        "2fa3cdfb319055fd8b25abdafa413e16f00ad493"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 13:57:08 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 13:57:08 2009 -0400"
      },
      "message": "ext4: Clean up ext4_get_blocks() so it does not depend on bh_result-\u003eb_state\n\nThe ext4_get_blocks() function was depending on the value of\nbh_result-\u003eb_state as an input parameter to decide whether or not\nupdate the delalloc accounting statistics by calling\next4_da_update_reserve_space().  We now use a separate flag,\nEXT4_GET_BLOCKS_UPDATE_RESERVE_SPACE, to requests this update, so that\nall callers of ext4_get_blocks() can clear map_bh.b_state before\ncalling ext4_get_blocks() without worrying about any consistency\nissues.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "2fa3cdfb319055fd8b25abdafa413e16f00ad493",
      "tree": "c85e56fa92eecc163a85084d11aef356a686c9b9",
      "parents": [
        "a2dc52b5d1d8cc280b3e795abf1c80ac8c49f30c"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 09:29:45 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 09:29:45 2009 -0400"
      },
      "message": "ext4: Merge ext4_da_get_block_write() into mpage_da_map_blocks()\n\nThe static function ext4_da_get_block_write() was only used by\nmpage_da_map_blocks().  So to simplify the code, merge that function\ninto mpage_da_map_blocks().\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a2dc52b5d1d8cc280b3e795abf1c80ac8c49f30c",
      "tree": "2f425d897dfdab9f2a5997f9801c6ccbea7c1323",
      "parents": [
        "b920c75502cb2c48654ef196d647c8eb81ab608a"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 12 13:51:29 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 12 13:51:29 2009 -0400"
      },
      "message": "ext4: Add BUG_ON debugging checks to noalloc_get_block_write()\n\nEnforce that noalloc_get_block_write() is only called to map one block\nat a time, and that it always is successful in finding a mapping for\ngiven an inode\u0027s logical block block number if it is called with\ncreate \u003d\u003d 1.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "b920c75502cb2c48654ef196d647c8eb81ab608a",
      "tree": "73105b8a1212001a3636d83b3f8e9e554e048170",
      "parents": [
        "c21770573319922e3f3fcb331cfaa290c49f1c81"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 00:54:29 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 00:54:29 2009 -0400"
      },
      "message": "ext4: Add documentation to the ext4_*get_block* functions\n\nThis adds more documentation to various internal functions in\nfs/ext4/inode.c, most notably ext4_ind_get_blocks(),\next4_da_get_block_write(), ext4_da_get_block_prep(),\next4_normal_get_block_write().\n\nIn addition, the static function ext4_normal_get_block_write() has\nbeen renamed noalloc_get_block_write(), since it is used in many\nplaces far beyond ext4_normal_writepage().\n\nPlenty of warnings have been added to the noalloc_get_block_write()\nfunction, since the way it is used is amazingly fragile.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c21770573319922e3f3fcb331cfaa290c49f1c81",
      "tree": "ee21ebb2d73d4d3b19d7e391e7accf00704371d9",
      "parents": [
        "12b7ac176831df1aa58a787e67c3e5d698b30163"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 00:58:52 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 00:58:52 2009 -0400"
      },
      "message": "ext4: Define a new set of flags for ext4_get_blocks()\n\nThe functions ext4_get_blocks(), ext4_ext_get_blocks(), and\next4_ind_get_blocks() used an ad-hoc set of integer variables used as\nboolean flags passed in as arguments.  Use a single flags parameter\nand a setandard set of bitfield flags instead.  This saves space on\nthe call stack, and it also makes the code a bit more understandable.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "12b7ac176831df1aa58a787e67c3e5d698b30163",
      "tree": "d8d3ab93fd28d5b84efff0b5c247da74c84788e0",
      "parents": [
        "e4d996ca806e93dddb5d76c0d3d859b494c559f6"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 00:57:44 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 00:57:44 2009 -0400"
      },
      "message": "ext4: Rename ext4_get_blocks_wrap() to be ext4_get_blocks()\n\nAnother function rename for clarity\u0027s sake.  The _wrap prefix simply\nconfuses people, and didn\u0027t add much people trying to follow the code\npaths.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "e4d996ca806e93dddb5d76c0d3d859b494c559f6",
      "tree": "dee33d8bb77bcd5ef5bebeab04d7fe95e3cb4dc5",
      "parents": [
        "f888e652d758bfe0c04c209b72a05972daeba386"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 12 00:25:28 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 12 00:25:28 2009 -0400"
      },
      "message": "ext4: Rename ext4_get_blocks_handle() to be ext4_ind_get_blocks()\n\nThe static function ext4_get_blocks_handle() is badly named.  Of\n*course* it takes a handle.  Since its counterpart for extent-based\nfile is ext4_ext_get_blocks(), rename it to be ext4_ind_get_blocks().\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f888e652d758bfe0c04c209b72a05972daeba386",
      "tree": "5d593d7ce0f4e58cf2c049b8635e55f3b5a0d415",
      "parents": [
        "bc8e67409ccdcff72c3f1656b1fb1aad7ff396db"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 12 00:21:29 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 12 00:21:29 2009 -0400"
      },
      "message": "ext4: Simplify function signature for ext4_da_get_block_write() \n\nThe function ext4_da_get_block_write() is called in exactly one write,\nand the last argument, create, is always 1.  Remove it to simplify the\ncode slightly.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "8df9675f8b498d0bfa1f0b5b06f56bf1ff366dd5",
      "tree": "38fd56a82049f50b4d774af47b9d39f116071755",
      "parents": [
        "9ca92389c5312a51e819c15c762f0abdc7f3129b"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri May 01 08:50:38 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri May 01 08:50:38 2009 -0400"
      },
      "message": "ext4: Avoid races caused by on-line resizing and SMP memory reordering\n\nExt4\u0027s on-line resizing adds a new block group and then, only at the\nlast step adjusts s_groups_count.  However, it\u0027s possible on SMP\nsystems that another CPU could see the updated the s_group_count and\nnot see the newly initialized data structures for the just-added block\ngroup.  For this reason, it\u0027s important to insert a SMP read barrier\nafter reading s_groups_count and before reading any (for example) the\nnew block group descriptors allowed by the increased value of\ns_groups_count.\n\nUnfortunately, we rather blatently violate this locking protocol\ndocumented in fs/ext4/resize.c.  Fortunately, (1) on-line resizes\nhappen relatively rarely, and (2) it seems rare that the filesystem\ncode will immediately try to use just-added block group before any\nmemory ordering issues resolve themselves.  So apparently problems\nhere are relatively hard to hit, since ext3 has been vulnerable to the\nsame issue for years with no one apparently complaining.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "29fa89d088941d79765d60f22d5ccdd6b8696e11",
      "tree": "3fbe031eec140c03dafa11f2416c4f6e3826f21d",
      "parents": [
        "8fb0e342481c4d80040670fec915f0b9c7c6499a"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Tue May 12 16:30:27 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 12 16:30:27 2009 -0400"
      },
      "message": "ext4: Mark the unwritten buffer_head as mapped during write_begin\n\nSetting BH_Unwritten buffer_heads as BH_Mapped avoids multiple\n(unnecessary) calls to get_block() during the call to the write(2)\nsystem call.  Setting BH_Unwritten buffer heads as BH_Mapped requires\nthat the writepages() functions can handle BH_Unwritten buffer_heads.\n\nAfter this commit, things work as follows:\n\next4_ext_get_block() returns unmapped, unwritten, buffer head when\ncalled with create \u003d 0 for prealloc space. This makes sure we handle\nthe read path and non-delayed allocation case correctly.  Even though\nthe buffer head is marked unmapped we have valid b_blocknr and b_bdev\nvalues in the buffer_head.\n\next4_da_get_block_prep() called for block resrevation will now return\nmapped, unwritten, new buffer_head for prealloc space. This avoids\nmultiple calls to get_block() for write to same offset. By making such\nbuffers as BH_New, we also assure that sub-block zeroing of buffered\nwrites happens correctly.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "79ffab34391933ee3b95dac7f25c0478fa2f8f1e",
      "tree": "8bc139928e172ef2ebd38e01f97dc01f886d8526",
      "parents": [
        "9fa7eb283c5cdc2b0f4a8cfe6387ed82e5e9a3d3"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Wed May 13 15:13:42 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed May 13 15:13:42 2009 -0400"
      },
      "message": "ext4: Properly initialize the buffer_head state\n\nThese struct buffer_heads are allocated on the stack (and hence are\ninitialized with stack garbage).  They are only used to call a\nget_blocks() function, so that\u0027s mostly OK, but b_state must be\ninitialized to be 0 so we don\u0027t have any unexpected BH_* flags set by\naccident, such as BH_Unwritten or BH_Delay.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "2a8964d63d50dd2d65d71d342bc7fb6ef4117614",
      "tree": "7dd80d63afd9adab61ba0695ac3e0c95485dc2ed",
      "parents": [
        "33b9817e2ae097c7b8d256e3510ac6c54fc6d9d0"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Thu May 14 17:05:39 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 17:05:39 2009 -0400"
      },
      "message": "ext4: Clear the unwritten buffer_head flag after the extent is initialized\n\nThe BH_Unwritten flag indicates that the buffer is allocated on disk\nbut has not been written; that is, the disk was part of a persistent\npreallocation area.  That flag should only be set when a get_blocks()\nfunction is looking up a inode\u0027s logical to physical block mapping.\n\nWhen ext4_get_blocks_wrap() is called with create\u003d1, the uninitialized\nextent is converted into an initialized one, so the BH_Unwritten flag\nis no longer appropriate.  Hence, we need to make sure the\nBH_Unwritten is not left set, since the combination of BH_Mapped and\nBH_Unwritten is not allowed; among other things, it will result ext4\u0027s\nget_block() to be called over and over again during the write_begin\nphase of write(2).\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "33b9817e2ae097c7b8d256e3510ac6c54fc6d9d0",
      "tree": "3de27ab9a089fb53503fdcc2746e396ee9fb78d0",
      "parents": [
        "9c1ee184a30394e54165fa4c15923cabd952c106"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Tue May 12 14:40:37 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 12 14:40:37 2009 -0400"
      },
      "message": "ext4: Use a fake block number for delayed new buffer_head\n\nUse a very large unsigned number (~0xffff) as as the fake block number\nfor the delayed new buffer. The VFS should never try to write out this\nnumber, but if it does, this will make it obvious.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "9c1ee184a30394e54165fa4c15923cabd952c106",
      "tree": "77fee66ccc5e4aec3aeff7c7d641691b116be091",
      "parents": [
        "091bf7624d1c90cec9e578a18529f615213ff847"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Wed May 13 18:36:58 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed May 13 18:36:58 2009 -0400"
      },
      "message": "ext4: Fix sub-block zeroing for writes into preallocated extents\n\nWe need to mark the buffer_head mapping preallocated space as new\nduring write_begin. Otherwise we don\u0027t zero out the page cache content\nproperly for a partial write. This will cause file corruption with\npreallocation.\n\nNow that we mark the buffer_head new we also need to have a valid\nbuffer_head blocknr so that unmap_underlying_metadata() unmaps the\ncorrect block.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c4b5a614316c505922a522b2e35ba05ea3e08a7c",
      "tree": "8b76988940551726ef05d311e02a06bb61464274",
      "parents": [
        "a9e817425dc0baede8ebe5fbc9984a640257432b"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Apr 24 18:45:35 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Apr 24 18:45:35 2009 -0400"
      },
      "message": "ext4: Do not try to validate extents on special files\n\nThe EXTENTS_FL flag should never be set on special files, but if it\nis, don\u0027t bother trying to validate that the extents tree is valid,\nsince only files, directories, and non-fast symlinks will ever have an\nextent data structure.  We perhaps should flag the filesystem as being\ncorrupted if we see a special file (named pipes, device nodes, Unix\ndomain sockets, etc.) with the EXTENTS_FL flag, but e2fsck doesn\u0027t\ncurrently check this case, so we\u0027ll just ignore this for now, since\nit\u0027s harmless.\n\nWithout this fix, a special device with the extents flag is flagged as\nan error by the kernel, so it is impossible to access or delete the\ninode, but e2fsck doesn\u0027t see it as a problem, leading to\nconfused/frustrated users.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a9e817425dc0baede8ebe5fbc9984a640257432b",
      "tree": "ff59f9cc8dcee908f58a136554323d8c8fbfcca8",
      "parents": [
        "485c26ec70f823f2a9cf45982b724893e53a859e"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Apr 24 16:11:18 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Apr 24 16:11:18 2009 -0400"
      },
      "message": "ext4: Ignore i_file_acl_high unless EXT4_FEATURE_INCOMPAT_64BIT is present\n\nDon\u0027t try to look at i_file_acl_high unless the INCOMPAT_64BIT feature\nbit is set.  The field is normally zero, but older versions of e2fsck\ndidn\u0027t automatically check to make sure of this, so in the spirit of\n\"be liberal in what you accept\", don\u0027t look at i_file_acl_high unless\nwe are using a 64-bit filesystem.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "485c26ec70f823f2a9cf45982b724893e53a859e",
      "tree": "545ee089625b9b4131773eb26c57a51889deda78",
      "parents": [
        "0c8454f56623505a99463405fd7d5664adfbb094"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Apr 24 13:43:20 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Apr 24 13:43:20 2009 -0400"
      },
      "message": "ext4: Fix softlockup caused by illegal i_file_acl value in on-disk inode\n\nIf the block containing external extended attributes (which is stored\nin i_file_acl and i_file_acl_high) is larger than the on-disk\nfilesystem, the process which tried to access the extended attributes\nwill endlessly issue kernel printks complaining that\n\"__find_get_block_slow() failed\", locking up that CPU until the system\nis forcibly rebooted.\n\nSo when we read in the inode, make sure the i_file_acl value is legal,\nand if not, flag the filesystem as being corrupted.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f73953c0656f2db9073c585c4df2884a8ecd101e",
      "tree": "3771470edbc40318c553468265151f4f2e27004e",
      "parents": [
        "e0724bf6e4a1f2e678d2b2aab01cae22e17862f0"
      ],
      "author": {
        "name": "Thiemo Nagel",
        "email": "thiemo.nagel@ph.tum.de",
        "time": "Tue Apr 07 18:46:47 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Apr 07 18:46:47 2009 -0400"
      },
      "message": "ext4: Fix big-endian problem in __ext4_check_blockref()\n\nCommit fe2c8191 introduced a regression on big-endian system, because\nthe checks to make sure block references in non-extent inodes are\nvalid failed to use le32_to_cpu().\n\nReported-by: Alexander Beregalov \u003ca.beregalov@gmail.com\u003e\nSigned-off-by: Thiemo Nagel \u003cthiemo.nagel@ph.tum.de\u003e\nTested-by: Alexander Beregalov \u003ca.beregalov@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "395d73413c5656c6d7706ae91dcb441f9b7e3074",
      "tree": "7fadabe996f70d7918583fa2312d4fad19397fcb",
      "parents": [
        "c226fd659fa7b6a7b038df5ae6856a68514bacde",
        "06705bff9114531a997a7d0c2520bea0f2927410"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 10:57:49 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 10:57:49 2009 -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: (33 commits)\n  ext4: Regularize mount options\n  ext4: fix locking typo in mballoc which could cause soft lockup hangs\n  ext4: fix typo which causes a memory leak on error path\n  jbd2: Update locking coments\n  ext4: Rename pa_linear to pa_type\n  ext4: add checks of block references for non-extent inodes\n  ext4: Check for an valid i_mode when reading the inode from disk\n  ext4: Use WRITE_SYNC for commits which are caused by fsync()\n  ext4: Add auto_da_alloc mount option\n  ext4: Use struct flex_groups to calculate get_orlov_stats()\n  ext4: Use atomic_t\u0027s in struct flex_groups\n  ext4: remove /proc tuning knobs\n  ext4: Add sysfs support\n  ext4: Track lifetime disk writes\n  ext4: Fix discard of inode prealloc space with delayed allocation.\n  ext4: Automatically allocate delay allocated blocks on rename\n  ext4: Automatically allocate delay allocated blocks on close\n  ext4: add EXT4_IOC_ALLOC_DA_BLKS ioctl\n  ext4: Simplify delalloc code by removing mpage_da_writepages()\n  ext4: Save stack space by removing fake buffer heads\n  ...\n"
    },
    {
      "commit": "c2ec175c39f62949438354f603f4aa170846aabb",
      "tree": "f2c9bf1bec2deabe2d3a5092405b027637b6ead3",
      "parents": [
        "c2fdf3a9b2d52842808a8e551b53b55dd9b45030"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Tue Mar 31 15:23:21 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:14 2009 -0700"
      },
      "message": "mm: page_mkwrite change prototype to match fault\n\nChange the page_mkwrite prototype to take a struct vm_fault, and return\nVM_FAULT_xxx flags.  There should be no functional change.\n\nThis makes it possible to return much more detailed error information to\nthe VM (and also can provide more information eg.  virtual_address to the\ndriver, which might be important in some special cases).\n\nThis is required for a subsequent fix.  And will also make it easier to\nmerge page_mkwrite() with fault() in future.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nCc: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nCc: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\nCc: Mark Fasheh \u003cmfasheh@suse.com\u003e\nCc: Joel Becker \u003cjoel.becker@oracle.com\u003e\nCc: Artem Bityutskiy \u003cdedekind@infradead.org\u003e\nCc: Felix Blyakher \u003cfelixb@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fe2c8191faa29d7a09f4962198f6dfab973ceec4",
      "tree": "ed1b9cf3997fb6e90bf889f028d27e1d3e5f2b63",
      "parents": [
        "563bdd61fe4dbd6b58cf7eb06f8d8f14479ae1dc"
      ],
      "author": {
        "name": "Thiemo Nagel",
        "email": "thiemo.nagel@ph.tum.de",
        "time": "Tue Mar 31 08:36:10 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Mar 31 08:36:10 2009 -0400"
      },
      "message": "ext4: add checks of block references for non-extent inodes\n\nCheck block references in the inode and indorect blocks for non-extent\ninodes to make sure they are valid, and flag an error if they are\ninvalid.\n\nSigned-off-by: Thiemo Nagel \u003cthiemo.nagel@ph.tum.de\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "563bdd61fe4dbd6b58cf7eb06f8d8f14479ae1dc",
      "tree": "a0b768373b06f5c86757076d7de3502c589c4d5c",
      "parents": [
        "7058548cd50e5bda8db086bb2e5c1d82f746d047"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Mar 26 00:06:19 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Mar 26 00:06:19 2009 -0400"
      },
      "message": "ext4: Check for an valid i_mode when reading the inode from disk\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a269eb18294d35874c53311acc2cd0b5ef477ce5",
      "tree": "4da256ba45385688bd7f1e8b638ce76f884c8313",
      "parents": [
        "81a052273998f94b098945c4c313e05246956eb2"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Jan 26 17:04:39 2009 +0100"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Thu Mar 26 02:18:36 2009 +0100"
      },
      "message": "ext4: Use lowercase names of quota functions\n\nUse lowercase names of quota functions instead of old uppercase ones.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nAcked-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nCC: linux-ext4@vger.kernel.org\n"
    },
    {
      "commit": "60e58e0f30e723464c2a7d34b71b8675566c572d",
      "tree": "2797ae1bccdad12d53c989a6dccea1c8ffd2bce3",
      "parents": [
        "643d00ccc311664188c8209bf8b596a30e139c3a"
      ],
      "author": {
        "name": "Mingming Cao",
        "email": "cmm@us.ibm.com",
        "time": "Thu Jan 22 18:13:05 2009 +0100"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Thu Mar 26 02:18:34 2009 +0100"
      },
      "message": "ext4: quota reservation for delayed allocation\n\nUses quota reservation/claim/release to handle quota properly for delayed\nallocation in the three steps: 1) quotas are reserved when data being copied\nto cache when block allocation is defered 2) when new blocks are allocated.\nreserved quotas are converted to the real allocated quota, 2) over-booked\nquotas for metadata blocks are released back.\n\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nAcked-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "afd4672dc7610b7feef5190168aa917cc2e417e4",
      "tree": "53a3aa709232b00473c8da70b792b350150956ff",
      "parents": [
        "7d39db14a42cbd719c7515b9da8f85a2eb6a0633"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Mar 16 23:12:23 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Mar 16 23:12:23 2009 -0400"
      },
      "message": "ext4: Add auto_da_alloc mount option\n\nAdd a mount option which allows the user to disable automatic\nallocation of blocks whose allocation by delayed allocation when the\nfile was originally truncated or when the file is renamed over an\nexisting file.  This feature is intended to save users from the\neffects of naive application writers, but it reduces the effectiveness\nof the delayed allocation code.  This mount option disables this\nsafety feature, which may be desirable for prodcutions systems where\nthe risk of unclean shutdowns or unexpected system crashes is low.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "b713a5ec55bf73c833f9883cdd761b20ee61a1ab",
      "tree": "77bbc689f442cad3ce8ca21d7b2c7cea2738d519",
      "parents": [
        "3197ebdb130473a92760100cbfe0d7e671838f48"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Mar 31 09:11:14 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Mar 31 09:11:14 2009 -0400"
      },
      "message": "ext4: remove /proc tuning knobs\n\nRemove tuning knobs in /proc/fs/ext4/\u003cdev/* since they have been\nreplaced by knobs in sysfs at /sys/fs/ext4/\u003cdev\u003e/*.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "d6014301b5599fba395c42a1e96a7fe86f7d0b2d",
      "tree": "5b3f8c034c69dfbcc0f4e155dc991179a95e170b",
      "parents": [
        "8750c6d5fcbd3342b3d908d157f81d345c5325a7"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Fri Mar 27 22:36:43 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Mar 27 22:36:43 2009 -0400"
      },
      "message": "ext4: Fix discard of inode prealloc space with delayed allocation.\n\nWith delayed allocation we should not/cannot discard inode prealloc\nspace during file close. We would still have dirty pages for which we\nhaven\u0027t allocated blocks yet. With this fix after each get_blocks\nrequest we check whether we have zero reserved blocks and if yes and\nwe don\u0027t have any writers on the file we discard inode prealloc space.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "8f64b32eb73fbfe9f38c4123121b63ee409278a7",
      "tree": "1c856ed32d7a282dbde0cea2e8839e2c2de51ba9",
      "parents": [
        "d8ae4601a4b7ea1fa17fa395c3468c0e144d1275"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Thu Feb 26 00:57:35 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Feb 26 00:57:35 2009 -0500"
      },
      "message": "ext4: don\u0027t call jbd2_journal_force_commit_nested without journal\n\nRunning without a journal, I oopsed when I ran out of space,\nbecause we called jbd2_journal_force_commit_nested() from\next4_should_retry_alloc() without a journal.\n\nThis should take care of it, I think.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "7d8f9f7d150dded7b68e61ca6403a1f166fb4edf",
      "tree": "79572041ae1b5737bc8d75037ff86903469430eb",
      "parents": [
        "ccd2506bd43113659aa904d5bea5d1300605e2a6"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Feb 24 08:21:14 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Feb 24 08:21:14 2009 -0500"
      },
      "message": "ext4: Automatically allocate delay allocated blocks on close\n\nWhen closing a file that had been previously truncated, force any\ndelay allocated blocks that to be allocated so that if the filesystem\nis mounted with data\u003dordered, the data blocks will be pushed out to\ndisk along with the journal commit.  Many application programs expect\nthis, so we do this to avoid zero length files if the system crashes\nunexpectedly.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "ccd2506bd43113659aa904d5bea5d1300605e2a6",
      "tree": "99a95645b3c2c092427b7c537c5628d502cd9c22",
      "parents": [
        "f63e6005bc63acc0a6bc3bdb8f971dcfbd827185"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Feb 26 01:04:07 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Feb 26 01:04:07 2009 -0500"
      },
      "message": "ext4: add EXT4_IOC_ALLOC_DA_BLKS ioctl\n\nAdd an ioctl which forces all of the delay allocated blocks to be\nallocated.  This also provides a function ext4_alloc_da_blocks() which\nwill be used by the following commits to force files to be fully\nallocated to preserve application-expected ext3 behaviour.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f63e6005bc63acc0a6bc3bdb8f971dcfbd827185",
      "tree": "22f40e4c70fd9d6fecd36926ae1087d59522098d",
      "parents": [
        "8dc207c0e7a259e7122ddfaf56b8bbbc3c92d685"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Feb 23 16:42:39 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Feb 23 16:42:39 2009 -0500"
      },
      "message": "ext4: Simplify delalloc code by removing mpage_da_writepages()\n\nThe mpage_da_writepages() function is only used in one place, so\ninline it to simplify the call stack and make the code easier to\nunderstand.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "8dc207c0e7a259e7122ddfaf56b8bbbc3c92d685",
      "tree": "68f3cfcf4d2f55c3e7fd8128b30c80b6d54679b1",
      "parents": [
        "ed5bde0bf8995d7d8c0b5a9c33e624a945f333ef"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Feb 23 06:46:01 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Feb 23 06:46:01 2009 -0500"
      },
      "message": "ext4: Save stack space by removing fake buffer heads\n\nStruct mpage_da_data and mpage_add_bh_to_extent() use a fake struct\nbuffer_head which is 104 bytes on an x86_64 system, but only use 24\nbytes of the structure.  On systems that use a spinlock for atomic_t,\nthe stack savings will be even greater.\n\nIt turns out that using a fake struct buffer_head doesn\u0027t even save\nthat much code, and it makes the code more confusing since it\u0027s not\nused as a \"real\" buffer head.  So just store pass b_size and b_state\nin mpage_add_bh_to_extent(), and store b_size, b_state, and b_block_nr\nin the mpage_da_data structure.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "ed5bde0bf8995d7d8c0b5a9c33e624a945f333ef",
      "tree": "1e4ba09b0e10860c051ab4eb558b0e58f8037866",
      "parents": [
        "722bde6875bfb49a0c84e5601eb82dd7ac02d27c"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Feb 23 10:48:07 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Feb 23 10:48:07 2009 -0500"
      },
      "message": "ext4: Simplify delalloc implementation by removing mpd.get_block\n\nThis parameter was always set to ext4_da_get_block_write().\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "7a262f7c69163cd4811f2f838faef5c5b18439c9",
      "tree": "1d048ed0fa78d8d768c149cf414bd4325315f184",
      "parents": [
        "56b19868aca856a7d7bf20c3a7a1030e4fd75b2b"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Fri Mar 27 16:39:58 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Mar 27 16:39:58 2009 -0400"
      },
      "message": "ext4: Validate extent details only when read from the disk\n\nMake sure we validate extent details only when read from the disk.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Thiemo Nagel \u003cthiemo.nagel@ph.tum.de\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a4912123b688e057084e6557cef8924f7ae5bbde",
      "tree": "34e88705d6617b52caa0f87692b480119a9c9e2e",
      "parents": [
        "2dc6b0d48ca0599837df21b14bb8393d0804af57"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Mar 12 12:18:34 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Mar 12 12:18:34 2009 -0400"
      },
      "message": "ext4: New inode/block allocation algorithms for flex_bg filesystems\n\nThe find_group_flex() inode allocator is now only used if the\nfilesystem is mounted using the \"oldalloc\" mount option.  It is\nreplaced with the original Orlov allocator that has been updated for\nflex_bg filesystems (it should behave the same way if flex_bg is\ndisabled).  The inode allocator now functions by taking into account\neach flex_bg group, instead of each block group, when deciding whether\nor not it\u0027s time to allocate a new directory into a fresh flex_bg.\n\nThe block allocator has also been changed so that the first block\ngroup in each flex_bg is preferred for use for storing directory\nblocks.  This keeps directory blocks close together, which is good for\nspeeding up e2fsck since large directories are more likely to look\nlike this:\n\ndebugfs:  stat /home/tytso/Maildir/cur\nInode: 1844562   Type: directory    Mode:  0700   Flags: 0x81000\nGeneration: 1132745781    Version: 0x00000000:0000ad71\nUser: 15806   Group: 15806   Size: 1060864\nFile ACL: 0    Directory ACL: 0\nLinks: 2   Blockcount: 2072\nFragment:  Address: 0    Number: 0    Size: 0\n ctime: 0x499c0ff4:164961f4 -- Wed Feb 18 08:41:08 2009\n atime: 0x499c0ff4:00000000 -- Wed Feb 18 08:41:08 2009\n mtime: 0x49957f51:00000000 -- Fri Feb 13 09:10:25 2009\ncrtime: 0x499c0f57:00d51440 -- Wed Feb 18 08:38:31 2009\nSize of extra inode fields: 28\nBLOCKS:\n(0):7348651, (1-258):7348654-7348911\nTOTAL: 259\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "ebd3610b110bbb18ea6f9f2aeed1e1068c537227",
      "tree": "a7ecd4c6ef1d05619abeefea831e8f73ffadda11",
      "parents": [
        "05bf9e839d9de4e8a094274a0a2fd07beb47eaf1"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Sun Feb 22 21:09:59 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Feb 22 21:09:59 2009 -0500"
      },
      "message": "ext4: Fix deadlock in ext4_write_begin() and ext4_da_write_begin()\n\nFunctions ext4_write_begin() and ext4_da_write_begin() call\ngrab_cache_page_write_begin() without AOP_FLAG_NOFS. Thus it\ncan happen that page reclaim is triggered in that function\nand it recurses back into the filesystem (or some other filesystem).\nBut this can lead to various problems as a transaction is already\nstarted at that point. Add the necessary flag.\n\nhttp://bugzilla.kernel.org/show_bug.cgi?id\u003d11688\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "2acf2c261b823d9d9ed954f348b97620297a36b5",
      "tree": "01bcc80ee26a9cc25df9b9a215081943f3fcbd6c",
      "parents": [
        "d794bf8e0936dce45104565cd48c571061f4c1e3"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sat Feb 14 10:42:58 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Feb 14 10:42:58 2009 -0500"
      },
      "message": "ext4: Implement range_cyclic in ext4_da_writepages instead of write_cache_pages\n\nWith delayed allocation we lock the page in write_cache_pages() and\ntry to build an in memory extent of contiguous blocks.  This is needed\nso that we can get large contiguous blocks request.  If range_cyclic\nmode is enabled, write_cache_pages() will loop back to the 0 index if\nno I/O has been done yet, and try to start writing from the beginning\nof the range.  That causes an attempt to take the page lock of lower\nindex page while holding the page lock of higher index page, which can\ncause a dead lock with another writeback thread.\n\nThe solution is to implement the range_cyclic behavior in\next4_da_writepages() instead.\n\nhttp://bugzilla.kernel.org/show_bug.cgi?id\u003d12579\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "7f5aa215088b817add9c71914b83650bdd49f8a9",
      "tree": "9b811d1f0b41a2738fc68654ae605bf5d8cf2a72",
      "parents": [
        "9eddacf9e9c03578ef2c07c9534423e823d677f8"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue Feb 10 11:15:34 2009 -0500"
      },
      "committer": {
        "name": "Theodore Tso",
        "email": "tytso@mit.edu",
        "time": "Tue Feb 10 11:15:34 2009 -0500"
      },
      "message": "jbd2: Avoid possible NULL dereference in jbd2_journal_begin_ordered_truncate()\n\nIf we race with commit code setting i_transaction to NULL, we could\npossibly dereference it.  Proper locking requires the journal pointer\n(to access journal-\u003ej_list_lock), which we don\u0027t have.  So we have to\nchange the prototype of the function so that filesystem passes us the\njournal pointer.  Also add a more detailed comment about why the\nfunction jbd2_journal_begin_ordered_truncate() does what it does and\nhow it should be used.\n\nThanks to Dan Carpenter \u003cerror27@gmail.com\u003e for pointing to the\nsuspitious code.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nAcked-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nCC: linux-ext4@vger.kernel.org\nCC: ocfs2-devel@oss.oracle.com\nCC: mfasheh@suse.de\nCC: Dan Carpenter \u003cerror27@gmail.com\u003e\n"
    },
    {
      "commit": "b9ec63f78b425c0e16cc95605b5d4ff2dc228b97",
      "tree": "702f3b10c7462a94fb130133257a063a289d495f",
      "parents": [
        "9fd9784c91db79e953ea3fe3741f885bdc390a72"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jan 30 00:00:24 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jan 30 00:00:24 2009 -0500"
      },
      "message": "ext4: Remove bogus BUG() check in ext4_bmap()\n\nThe code to support journal-less ext4 operation added a BUG to\next4_bmap() which fired if there was no journal and the\nEXT4_STATE_JDATA bit was set in the i_state field.  This caused\nrunning the filefrag program (which uses the FIMBAP ioctl) to trigger\na BUG().\n\nThe EXT4_STATE_JDATA bit is only used for ext4_bmap(), and it\u0027s\nharmless for the bit to be set.  We could add a check in\n__ext4_journalled_writepage() and ext4_journalled_write_end() to only\nset the EXT4_STATE_JDATA bit if the journal is present, but that adds\nan extra test and jump instruction.  It\u0027s easier to simply remove the\nBUG check.\n\nhttp://bugzilla.kernel.org/show_bug.cgi?id\u003d12568\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: stable@kernel.org\n\n"
    },
    {
      "commit": "e7f07968c16bdd9480001c0a9de013ba56889cf9",
      "tree": "89aaa3c147d8f6abd10711a030aa0a57b630176d",
      "parents": [
        "08ec8c3878cea0bf91f2ba3c0badf44b383752d0"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jan 20 09:50:19 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jan 20 09:50:19 2009 -0500"
      },
      "message": "ext4: Fix ext4_free_blocks() w/o a journal when files have indirect blocks\n\nWhen trying to unlink a file with indirect blocks on a filesystem\nwithout a journal, the \"circular indirect block\" sanity test was\ngetting falsely triggered.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "06a279d636734da32bb62dd2f7b0ade666f65d7c",
      "tree": "e3fb1a899ea7a9d527ff0d8edf3ca23778321728",
      "parents": [
        "c225aa57ff4ffe715df4692676b77c815a337236"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jan 17 18:41:37 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jan 17 18:41:37 2009 -0500"
      },
      "message": "ext4: only use i_size_high for regular files\n\nDirectories are not allowed to be bigger than 2GB, so don\u0027t use\ni_size_high for anything other than regular files.  E2fsck should\ncomplain about these inodes, but the simplest thing to do for the\nkernel is to only use i_size_high for regular files.\n\nThis prevents an intentially corrupted filesystem from causing the\nkernel to burn a huge amount of CPU and issuing error messages such\nas:\n\nEXT4-fs warning (device loop0): ext4_block_to_path: block 135090028 \u003e max\n\nThanks to David Maciejak from Fortinet\u0027s FortiGuard Global Security\nResearch Team for reporting this issue.\n\nhttp://bugzilla.kernel.org/show_bug.cgi?id\u003d12375\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "2150edc6c5cf00f7adb54538b9ea2a3e9cedca3f",
      "tree": "f72a0d85e66f500b4cead348a231e3d3b9f357bc",
      "parents": [
        "cd764695b67386a81964f68e9c66efd9f13f4d29",
        "4b905671d2ea09fd48fed72c581df17e40823f39"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 08 17:14:59 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 08 17:14:59 2009 -0800"
      },
      "message": "Merge branch \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4\n\n* \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: (57 commits)\n  jbd2: Fix oops in jbd2_journal_init_inode() on corrupted fs\n  ext4: Remove \"extents\" mount option\n  block: Add Kconfig help which notes that ext4 needs CONFIG_LBD\n  ext4: Make printk\u0027s consistently prefixed with \"EXT4-fs: \"\n  ext4: Add sanity checks for the superblock before mounting the filesystem\n  ext4: Add mount option to set kjournald\u0027s I/O priority\n  jbd2: Submit writes to the journal using WRITE_SYNC\n  jbd2: Add pid and journal device name to the \"kjournald2 starting\" message\n  ext4: Add markers for better debuggability\n  ext4: Remove code to create the journal inode\n  ext4: provide function to release metadata pages under memory pressure\n  ext3: provide function to release metadata pages under memory pressure\n  add releasepage hooks to block devices which can be used by file systems\n  ext4: Fix s_dirty_blocks_counter if block allocation failed with nodelalloc\n  ext4: Init the complete page while building buddy cache\n  ext4: Don\u0027t allow new groups to be added during block allocation\n  ext4: mark the blocks/inode bitmap beyond end of group as used\n  ext4: Use new buffer_head flag to check uninit group bitmaps initialization\n  ext4: Fix the race between read_inode_bitmap() and ext4_new_inode()\n  ext4: code cleanup\n  ...\n"
    },
    {
      "commit": "179f7ebff6be45738c6e2fa68c8d2cc5c2c6308e",
      "tree": "3d48b5f825cfa29f5b39656503c5157872454e9f",
      "parents": [
        "e3d5a27d5862b6425d0879272e24abecf7245105"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "dada1@cosmosbay.com",
        "time": "Tue Jan 06 14:41:04 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:13 2009 -0800"
      },
      "message": "percpu_counter: FBC_BATCH should be a variable\n\nFor NR_CPUS \u003e\u003d 16 values, FBC_BATCH is 2*NR_CPUS\n\nConsidering more and more distros are using high NR_CPUS values, it makes\nsense to use a more sensible value for FBC_BATCH, and get rid of NR_CPUS.\n\nA sensible value is 2*num_online_cpus(), with a minimum value of 32 (This\nminimum value helps branch prediction in __percpu_counter_add())\n\nWe already have a hotcpu notifier, so we can adjust FBC_BATCH dynamically.\n\nWe rename FBC_BATCH to percpu_counter_batch since its not a constant\nanymore.\n\nSigned-off-by: Eric Dumazet \u003cdada1@cosmosbay.com\u003e\nAcked-by: David S. Miller \u003cdavem@davemloft.net\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "54566b2c1594c2326a645a3551f9d989f7ba3c5e",
      "tree": "b373f3283fe5e197d0df29cd6b645c35adf1076c",
      "parents": [
        "e687d691cb3790d25e31c74f5941fd7c565e9df5"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Sun Jan 04 12:00:53 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 04 13:33:20 2009 -0800"
      },
      "message": "fs: symlink write_begin allocation context fix\n\nWith the write_begin/write_end aops, page_symlink was broken because it\ncould no longer pass a GFP_NOFS type mask into the point where the\nallocations happened.  They are done in write_begin, which would always\nassume that the filesystem can be entered from reclaim.  This bug could\ncause filesystem deadlocks.\n\nThe funny thing with having a gfp_t mask there is that it doesn\u0027t really\nallow the caller to arbitrarily tinker with the context in which it can be\ncalled.  It couldn\u0027t ever be GFP_ATOMIC, for example, because it needs to\ntake the page lock.  The only thing any callers care about is __GFP_FS\nanyway, so turn that into a single flag.\n\nAdd a new flag for write_begin, AOP_FLAG_NOFS.  Filesystems can now act on\nthis flag in their write_begin function.  Change __grab_cache_page to\naccept a nofs argument as well, to honour that flag (while we\u0027re there,\nchange the name to grab_cache_page_write_begin which is more instructive\nand does away with random leading underscores).\n\nThis is really a more flexible way to go in the end anyway -- if a\nfilesystem happens to want any extra allocations aside from the pagecache\nones in ints write_begin function, it may now use GFP_KERNEL (rather than\nGFP_NOFS) for common case allocations (eg.  ocfs2_alloc_write_ctxt, for a\nrandom example).\n\n[kosaki.motohiro@jp.fujitsu.com: fix ubifs]\n[kosaki.motohiro@jp.fujitsu.com: fix fuse]\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: \u003cstable@kernel.org\u003e\t\t[2.6.28.x]\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\n[ Cleaned up the calling convention: just pass in the AOP flags\n  untouched to the grab_cache_page_write_begin() function.  That\n  just simplifies everybody, and may even allow future expansion of the\n  logic.   - Linus ]\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ba80b1019aa722b24506db1ee755e0bb2f513022",
      "tree": "0c9a7dfd3af0f5991f3eaaeb65d735b11e9cf777",
      "parents": [
        "c31910672376dfb8d020e32afa7249763bcd924a"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jan 03 20:03:21 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jan 03 20:03:21 2009 -0500"
      },
      "message": "ext4: Add markers for better debuggability\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "560671a0d3c9ad2d647fa6d09375a262e1f19c4f",
      "tree": "a52673326726062d53b35643d51a16739cd804fc",
      "parents": [
        "e8134b27e351e813414da3b95aa8eac6d3908088"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Mon Jan 05 22:20:24 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 05 22:20:24 2009 -0500"
      },
      "message": "ext4: Use high 16 bits of the block group descriptor\u0027s free counts fields\n\nRename the lower bits with suffix _lo and add helper\nto access the values. Also rename bg_itable_unused_hi\nto bg_pad as in e2fsprogs.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "e83c1397cafc4e44f868289db5e417463c0d09a4",
      "tree": "1e5673897d0c7bcaad4a7e6927a7277e78525924",
      "parents": [
        "b5ed3112b5f74c8ec1c7aa03a76c596635e85197"
      ],
      "author": {
        "name": "Duane Griffin",
        "email": "duaneg@dghda.com",
        "time": "Fri Dec 19 20:47:15 2008 +0000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 31 18:07:39 2008 -0500"
      },
      "message": "ext4: ensure fast symlinks are NUL-terminated\n\nEnsure fast symlink targets are NUL-terminated, even if corrupted\non-disk.\n\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Theodore Ts\u0027o \u003ctytso@mit.edu\u003e\nCc: adilger@sun.com\nCc: linux-ext4@vger.kernel.org\nSigned-off-by: Duane Griffin \u003cduaneg@dghda.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ed9b3e3379731e9f9d2f73f3d7fd9e7d2ce3df4a",
      "tree": "d17381e45fe8843646ca70424095a9aa36711ee7",
      "parents": [
        "ac51d83705c2a38c71f39cde99708b14e6212a60"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Fri Nov 07 09:06:45 2008 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Nov 07 09:06:45 2008 -0500"
      },
      "message": "ext4: Mark the buffer_heads as dirty and uptodate after prepare_write\n\nWe need to make sure we mark the buffer_heads as dirty and uptodate\nso that block_write_full_page write them correctly.\n\nThis fixes mmap corruptions that can occur in low memory situations.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "3a06d778dfeda7eaeeb79bfa49cf97f2aae132b4",
      "tree": "08c813063950404356c9c64678eed72f21f217b9",
      "parents": [
        "1a0d3786dd57dbd74f340322054c3d618b999dcf"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sat Nov 22 15:04:59 2008 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Nov 22 15:04:59 2008 -0500"
      },
      "message": "ext4: sparse fixes\n\n* Change EXT4_HAS_*_FEATURE to return a boolean\n* Add a function prototype for ext4_fiemap() in ext4.h\n* Make ext4_ext_fiemap_cb() and ext4_xattr_fiemap() be static functions\n* Add lock annotations to mb_free_blocks()\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "ac51d83705c2a38c71f39cde99708b14e6212a60",
      "tree": "e540265888154d1f1b4613a118252b19a31db5db",
      "parents": [
        "14ce0cb411c88681ab8f3a4c9caa7f42e97a3184"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Nov 06 16:49:36 2008 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Nov 06 16:49:36 2008 -0500"
      },
      "message": "ext4: calculate journal credits correctly\n\nThis fixes a 2.6.27 regression which was introduced in commit a02908f1.\n\nWe weren\u0027t passing the chunk parameter down to the two subections,\next4_indirect_trans_blocks() and ext4_ext_index_trans_blocks(), with\nthe result that massively overestimate the amount of credits needed by\next4_da_writepages, especially in the non-extents case.  This causes\nfailures especially on /boot partitions, which tend to be small and\nnon-extent using since GRUB doesn\u0027t handle extents.\n\nThis patch fixes the bug reported by Joseph Fannin at:\nhttp://bugzilla.kernel.org/show_bug.cgi?id\u003d11964\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "498e5f24158da7bf8fa48074a70e370e22844492",
      "tree": "1434b349c8eca3b0667af0b385533cbcd599c1c3",
      "parents": [
        "a9df9a49102f3578909cba7bd33784eb3b9caaa4"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Nov 05 00:14:04 2008 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Nov 05 00:14:04 2008 -0500"
      },
      "message": "ext4: Change unsigned long to unsigned int\n\nConvert the unsigned longs that are most responsible for bloating the\nstack usage on 64-bit systems.\n\nNearly all places in the ext3/4 code which uses \"unsigned long\" is\nprobably a bug, since on 32-bit systems a ulong a 32-bits, which means\nwe are wasting stack space on 64-bit systems.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "0390131ba84fd3f726f9e24fc4553828125700bb",
      "tree": "4c90afad4e8690e25aec0ce069fd450e92ab5f96",
      "parents": [
        "ff7ef329b268b603ea4a2303241ef1c3829fd574"
      ],
      "author": {
        "name": "Frank Mayhar",
        "email": "fmayhar@google.com",
        "time": "Wed Jan 07 00:06:22 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Jan 07 00:06:22 2009 -0500"
      },
      "message": "ext4: Allow ext4 to run without a journal\n\nA few weeks ago I posted a patch for discussion that allowed ext4 to run\nwithout a journal.  Since that time I\u0027ve integrated the excellent\ncomments from Andreas and fixed several serious bugs.  We\u0027re currently\nrunning with this patch and generating some performance numbers against\nboth ext2 (with backported reservations code) and ext4 with and without\na journal.  It just so happens that running without a journal is\nslightly faster for most everything.\n\nWe did\n\tiozone -T -t 4 s 2g -r 256k -T -I -i0 -i1 -i2\n\nwhich creates 4 threads, each of which create and do reads and writes on\na 2G file, with a buffer size of 256K, using O_DIRECT for all file opens\nto bypass the page cache.  Results:\n\n                     ext2        ext4, default   ext4, no journal\n  initial writes   13.0 MB/s        15.4 MB/s          15.7 MB/s\n  rewrites         13.1 MB/s        15.6 MB/s          15.9 MB/s\n  reads            15.2 MB/s        16.9 MB/s          17.2 MB/s\n  re-reads         15.3 MB/s        16.9 MB/s          17.2 MB/s\n  random readers    5.6 MB/s         5.6 MB/s           5.7 MB/s\n  random writers    5.1 MB/s         5.3 MB/s           5.4 MB/s \n\nSo it seems that, so far, this was a useful exercise.\n\nSigned-off-by: Frank Mayhar \u003cfmayhar@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "791b7f08954869d7b8ff438f3dac3cfb39778297",
      "tree": "9e5e9414e6b102940dea0f6c3103fee7fcc0df1d",
      "parents": [
        "2a21e37e48b94388f2cc8c0392f104f5443d4bb8"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Mon Jan 05 21:50:43 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 05 21:50:43 2009 -0500"
      },
      "message": "ext4: Fix the delalloc writepages to allocate blocks at the right offset.\n\nWhen iterating through the pages which have mapped buffer_heads, we\nfailed to update the b_state value. This results in allocating blocks\nat logical offset 0.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "2a21e37e48b94388f2cc8c0392f104f5443d4bb8",
      "tree": "271e6b7c181213bc9ffbd7793aef275b924cf63c",
      "parents": [
        "97df5d155dee478efe33b001f502e9630e1bba92"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Nov 05 09:22:24 2008 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Nov 05 09:22:24 2008 -0500"
      },
      "message": "ext4: tone down ext4_da_writepages warnings\n\nIf the filesystem has errors, ext4_da_writepages() will return a *lot*\nof errors, including lots and lots of stack dumps.  While it\u0027s true\nthat we are dropping user data on the floor, which is unfortunate, the\nstack dumps aren\u0027t helpful, and they tend to obscure the true original\nroot cause of the problem.  So in the case where the filesystem has\naborted, return an EROFS right away.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "815a1130687ffac2c3e91513ce64aab629d6a54d",
      "tree": "9abc15c6e1e44a5e5fcf1feb0f9328b09657ad59",
      "parents": [
        "8e1a4857cd92e32e642b3e7184c7f6bf85c96e2e"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Jan 01 23:59:43 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Jan 01 23:59:43 2009 -0500"
      },
      "message": "ext4: remove ext4_new_blocks() and call ext4_mb_new_blocks() directly\n\nThere was only one caller of the compatibility function\next4_new_blocks(), in balloc.c\u0027s ext4_alloc_blocks().  Change it to\ncall ext4_mb_new_blocks() directly, and remove ext4_new_blocks()\naltogether.  This cleans up the code, by removing two extra functions\nfrom the call chain, and hopefully saving some stack usage.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "8f72fbdf0d92e6127583cc548bf043c60cd4720f",
      "tree": "1e640222c04efb9cd0e56fccee5a23084d006c38",
      "parents": [
        "fe0bdec68b77020281dc814805edfe594ae89e0f"
      ],
      "author": {
        "name": "Alexander Beregalov",
        "email": "a.beregalov@gmail.com",
        "time": "Wed Oct 29 17:13:08 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 29 17:13:08 2008 -0400"
      },
      "message": "ext4: fix printk format warning\n\nfs/ext4/balloc.c:607: warning: format \u0027%lld\u0027 expects type \u0027long long int\u0027, but argument 2 has type \u0027s64\u0027\nfs/ext4/inode.c:1822: warning: format \u0027%lld\u0027 expects type \u0027long long int\u0027, but argument 2 has type \u0027s64\u0027\nfs/ext4/inode.c:1824: warning: format \u0027%lld\u0027 expects type \u0027long long int\u0027, but argument 2 has type \u0027s64\u0027\n\nSigned-off-by: Alexander Beregalov \u003ca.beregalov@gmail.com\u003e\nSigned-off-by: Theodore Ts\u0027o \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "f287a1a56130be5fdb96a4a62d1290bd064f308e",
      "tree": "992ac8f5fef83cafae53b8fe00844f2ad3e79d07",
      "parents": [
        "3e624fc72fba09b6f999a9fbb87b64efccd38036"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Oct 16 22:50:48 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Oct 16 22:50:48 2008 -0400"
      },
      "message": "ext4: Remove automatic enabling of the HUGE_FILE feature flag\n\nIf the HUGE_FILE feature flag is not set, don\u0027t allow the creation of\nlarge files, instead of automatically enabling the feature flag.\nRecent versions of mke2fs will set the HUGE_FILE flag automatically\nanyway for ext4 filesystems.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "22208dedbd7626e5fc4339c417f8d24cc21f79d7",
      "tree": "d03fc8524dc7cb2f18c2038ffe4d2146903f630e",
      "parents": [
        "17bc6c30cf6bfffd816bdc53682dd46fc34a2cf4"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Thu Oct 16 10:10:36 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Oct 16 10:10:36 2008 -0400"
      },
      "message": "ext4: Fix file fragmentation during large file write.\n\nThe range_cyclic writeback mode uses the address_space writeback_index\nas the start index for writeback.  With delayed allocation we were\nupdating writeback_index wrongly resulting in highly fragmented file.\nThis patch reduces the number of extents reduced from 4000 to 27 for a\n3GB file.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Theodore Ts\u0027o \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "af6f029d3836eb7264cd3fbb13a6baf0e5fdb5ea",
      "tree": "b7c1334ad5fab10eaf4962c79ad6025d334b902c",
      "parents": [
        "8a0aba733db1adb5e1f0e828889a18f4c1c512de"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Tue Oct 14 09:20:19 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Oct 14 09:20:19 2008 -0400"
      },
      "message": "ext4: Use tag dirty lookup during mpage_da_submit_io\n\nThis enables us to drop the range_cont writeback mode\nuse from ext4_da_writepages.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "03010a3350301baac2154fa66de925ae2981b7e3",
      "tree": "b1af2cecbb540faab4bd67dc1a28ad3384341d72",
      "parents": [
        "39d80c33a068d9fa63a36c3b2c0d718d38440dd1"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Oct 10 20:02:48 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Oct 10 20:02:48 2008 -0400"
      },
      "message": "ext4: Rename ext4dev to ext4\n\nThe ext4 filesystem is getting stable enough that it\u0027s time to drop\nthe \"dev\" prefix.  Also remove the requirement for the TEST_FILESYS\nflag.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "6873fa0de14e49c433f1f181c54e511f4f3d459d",
      "tree": "4759862db403c037c11f570f0b2ca5e25198073e",
      "parents": [
        "68c9d702bb72f367f3b148963ec6cf5e07ff7f65"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Tue Oct 07 00:46:36 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Oct 07 00:46:36 2008 -0400"
      },
      "message": "Hook ext4 to the vfs fiemap interface.\n\next4_ext_walk_space() was reinstated to be used for iterating over file\nextents with a callback; it is used by the ext4 fiemap implementation.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: linux-ext4@vger.kernel.org\nCc: linux-fsdevel@vger.kernel.org\n"
    },
    {
      "commit": "c2ea3fde61f1df1dbf062345f23277dcd6f01dfe",
      "tree": "53ecbf57416326810540494e814c05753bf30874",
      "parents": [
        "240799cdf22bd789ea6852653c3b879d35ad0a6c"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Oct 10 09:40:52 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Oct 10 09:40:52 2008 -0400"
      },
      "message": "ext4: Remove old legacy block allocator\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "240799cdf22bd789ea6852653c3b879d35ad0a6c",
      "tree": "e696b60cc103f23838b5c14d8d397f692abffbc3",
      "parents": [
        "37515facd001942221d68171c81c1f46d54ffdd0"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Oct 09 23:53:47 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Oct 09 23:53:47 2008 -0400"
      },
      "message": "ext4: Use readahead when reading an inode from the inode table\n\nWith modern hard drives, reading 64k takes roughly the same time as\nreading a 4k block.  So request readahead for adjacent inode table\nblocks to reduce the time it takes when iterating over directories\n(especially when doing this in htree sort order) in a cold cache case.\nWith this patch, the time it takes to run \"git status\" on a kernel\ntree after flushing the caches via \"echo 3 \u003e /proc/sys/vm/drop_caches\"\nis reduced by 21%.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "cf17fea6575cb1739552e1d0cb2b446305ee3d0c",
      "tree": "319e1044e271aeb31ad14847f369776ac5db74db",
      "parents": [
        "ae4d537211ff250a8c23c4f1227c4276cd2508ab"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sat Sep 13 13:06:18 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Sep 13 13:06:18 2008 -0400"
      },
      "message": "ext4: Properly update i_disksize.\n\nWith delayed allocation we use i_data_sem to update i_disksize.  We need\nto update i_disksize only if the new size specified is greater than the\ncurrent value and we need to make sure we don\u0027t race with other\ni_disksize update.  With delayed allocation we will switch to the\nwrite_begin function for non-delayed allocation if we are low on free\nblocks.  This means the write_begin function for non-delayed allocation\nalso needs to use the same locking.\n\nWe also need to check and update i_disksize even if the new size is less\nthat inode.i_size because of delayed allocation.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "ae4d537211ff250a8c23c4f1227c4276cd2508ab",
      "tree": "58aeb4ba30d0ae5b3bff93933200001349547721",
      "parents": [
        "df22291ff0fde0d350cf15dac3e5cc33ac528875"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sat Sep 13 13:10:25 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Sep 13 13:10:25 2008 -0400"
      },
      "message": "ext4: truncate block allocated on a failed ext4_write_begin\n\nFor blocksize \u003c pagesize we need to remove blocks that got allocated in\nblock_write_begin() if we fail with ENOSPC for later blocks.\nblock_write_begin() internally does this if it allocated pages locally.\nThis makes sure we don\u0027t have blocks outside inode.i_size during ENOSPC.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "df22291ff0fde0d350cf15dac3e5cc33ac528875",
      "tree": "723d781b430e7ab796b67eec4e956b6a2e47bf93",
      "parents": [
        "166348dd37a4baacfb6fe495954b56f56b116f0c"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Mon Sep 08 23:05:34 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Sep 08 23:05:34 2008 -0400"
      },
      "message": "ext4: Retry block allocation if we have free blocks left\n\nWhen we truncate files, the meta-data blocks released are not reused\nuntill we commit the truncate transaction.  That means delayed get_block\nrequest will return ENOSPC even if we have free blocks left.  Force a\njournal commit and retry block allocation if we get ENOSPC with free\nblocks left.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "166348dd37a4baacfb6fe495954b56f56b116f0c",
      "tree": "afb36ca25ec3bdbd4397a5b952bc78be1e5feff9",
      "parents": [
        "68629f29c6764c37ebdceec2f6bbef6637eaf420"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Mon Sep 08 23:08:40 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Sep 08 23:08:40 2008 -0400"
      },
      "message": "ext4: Don\u0027t add the inode to journal handle until after the block is allocated\n    \nMake sure we don\u0027t add the inode to the journal handle until after the\nblock allocation, so that a journal commit will not include the inode in\ncase of block allocation failure.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "79f0be8d2e6ebde27dfb3beff18eb689d5c4e36c",
      "tree": "7ddadff1a3f0f4f6814104aed42f20c52a7f5f24",
      "parents": [
        "6bc6e63fcd7dac9e633ea29f1fddd9580ab28f3f"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Wed Oct 08 23:13:30 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 08 23:13:30 2008 -0400"
      },
      "message": "ext4: Switch to non delalloc mode when we are low on free blocks count.\n\nThe delayed allocation code allocates blocks during writepages(), which\ncan not handle block allocation failures.  To deal with this, we switch\naway from delayed allocation mode when we are running low on free\nblocks.  This also allows us to avoid needing to reserve a large number\nof meta-data blocks in case all of the requested blocks are\ndiscontiguous.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "6bc6e63fcd7dac9e633ea29f1fddd9580ab28f3f",
      "tree": "144d53023af5faeb94b9b3aa28e186a33e6c5b98",
      "parents": [
        "030ba6bc67b4f2bc5cd174f57785a1745c929abe"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Fri Oct 10 09:39:00 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Oct 10 09:39:00 2008 -0400"
      },
      "message": "ext4: Add percpu dirty block accounting.\n\nThis patch adds dirty block accounting using percpu_counters.  Delayed\nallocation block reservation is now done by updating dirty block\ncounter.  In a later patch we switch to non delalloc mode if the\nfilesystem free blocks is greater than 150% of total filesystem dirty\nblocks\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Mingming Cao\u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "030ba6bc67b4f2bc5cd174f57785a1745c929abe",
      "tree": "14c57b4f6f8afddac0bd2415bfa050fba8d25980",
      "parents": [
        "a30d542a0035b886ffaafd0057ced0a2b28c3a4f"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Mon Sep 08 23:14:50 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Sep 08 23:14:50 2008 -0400"
      },
      "message": "ext4: Retry block reservation\n\nDuring block reservation if we don\u0027t have enough blocks left, retry\nblock reservation with smaller block counts.  This makes sure we try\nfallocate and DIO with smaller request size and don\u0027t fail early.  The\ndelayed allocation reservation cannot try with smaller block count. So\nretry block reservation to handle temporary disk full conditions.  Also\nprint free blocks details if we fail block allocation during writepages.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a30d542a0035b886ffaafd0057ced0a2b28c3a4f",
      "tree": "9e677eaf4eb1611701828554b27a1b0b0ae523fd",
      "parents": [
        "c4a0c46ec92c194c873232b88debce4e1a448483"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Thu Oct 09 10:56:23 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Oct 09 10:56:23 2008 -0400"
      },
      "message": "ext4: Make sure all the block allocation paths reserve blocks\n\nWith delayed allocation we need to make sure block are reserved before\nwe attempt to allocate them. Otherwise we get block allocation failure\n(ENOSPC) during writepages which cannot be handled. This would mean\nsilent data loss (We do a printk stating data will be lost). This patch\nupdates the DIO and fallocate code path to do block reservation before\nblock allocation. This is needed to make sure parallel DIO and fallocate\nrequest doesn\u0027t take block out of delayed reserve space.\n\nWhen free blocks count go below a threshold we switch to a slow patch\nwhich looks at other CPU\u0027s accumulated percpu counter values.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c4a0c46ec92c194c873232b88debce4e1a448483",
      "tree": "ebde1cc191b1af97bcd9189067b23205fa6cefdc",
      "parents": [
        "af5bc92dded4d98dfeabc8b5b9812571345b263d"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Tue Aug 19 21:08:18 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Aug 19 21:08:18 2008 -0400"
      },
      "message": "ext4: invalidate pages if delalloc block allocation fails.\n\nWe are a bit agressive in invalidating all the pages. But\nit is ok because we really don\u0027t know why the block allocation\nfailed and it is better to come of the writeback path\nso that user can look for more info.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "af5bc92dded4d98dfeabc8b5b9812571345b263d",
      "tree": "5cfaf27e673a09d3ad1341c175559be0a3ea990d",
      "parents": [
        "e5f8eab8851dff162e7ade46f084cb8575dc45f7"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Sep 08 22:25:24 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Sep 08 22:25:24 2008 -0400"
      },
      "message": "ext4: Fix whitespace checkpatch warnings/errors\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "5e745b041f2ccad63077118b40468521306f3962",
      "tree": "2a4d53c884f92899ee8e4f541c32861a4a577e1d",
      "parents": [
        "91246c009094142f95ecc7573b7caed2bcef52c7"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Mon Aug 18 18:00:57 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 18 18:00:57 2008 -0400"
      },
      "message": "ext4: Fix small file fragmentation\n\nFor small file block allocations, mballoc uses per cpu prealloc\nspace.  Use goal block when searching for the right prealloc\nspace.  Also make sure ext4_da_writepages tries to write\nall the pages for small files in single attempt\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "525f4ed8dcb72c71b306a78ecbf06f41d08fe441",
      "tree": "d4d74dc7b109c5d74fa955970a8528ec90e20b06",
      "parents": [
        "a1d6cc563bfdf1bf2829d3e6ce4d8b774251796b"
      ],
      "author": {
        "name": "Mingming Cao",
        "email": "cmm@us.ibm.com",
        "time": "Tue Aug 19 22:15:58 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Aug 19 22:15:58 2008 -0400"
      },
      "message": "ext4: journal credit fix for the delayed allocation\u0027s writepages() function\n\nPrevious delalloc writepages implementation started a new transaction\noutside of a loop which called get_block() to do the block allocation.\nSince we didn\u0027t know exactly how many blocks would need to be allocated,\nthe estimated journal credits required was very conservative and caused\nmany issues.\n\nWith the reworked delayed allocation, a new transaction is created for\neach get_block(), thus we don\u0027t need to guess how many credits for the\nmultiple chunk of allocation.  We start every transaction with enough\ncredits for inserting a single exent.  When estimate the credits for\nindirect blocks to allocate a chunk of blocks, we need to know the\nnumber of data blocks to allocate.  We use the total number of reserved\ndelalloc datablocks; if that is too big, for non-extent files, we need\nto limit the number of blocks to EXT4_MAX_TRANS_BLOCKS.\n\nCode cleanup from Aneesh.\n\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nReviewed-off-by:  Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a1d6cc563bfdf1bf2829d3e6ce4d8b774251796b",
      "tree": "ee81b6842191beb85f3f3baab817d115633ba456",
      "parents": [
        "f3bd1f3fa8ca7ec70cfd87aa94dc5e1a260901f2"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Tue Aug 19 21:55:02 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Aug 19 21:55:02 2008 -0400"
      },
      "message": "ext4: Rework the ext4_da_writepages() function\n\nWith the below changes we reserve credit needed to insert only one\nextent resulting from a call to single get_block.  This makes sure we\ndon\u0027t take too much journal credits during writeout.  We also don\u0027t\nlimit the pages to write.  That means we loop through the dirty pages\nbuilding largest possible contiguous block request.  Then we issue a\nsingle get_block request.  We may get less block that we requested.  If\nso we would end up not mapping some of the buffer_heads.  That means\nthose buffer_heads are still marked delay.  Later in the writepage\ncallback via __mpage_writepage we redirty those pages.\n\nWe should also not limit/throttle wbc-\u003enr_to_write in the filesystem\nwritepages callback. That cause wrong behaviour in\ngeneric_sync_sb_inodes caused by wbc-\u003enr_to_write being \u003c\u003d 0\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nReviewed-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f3bd1f3fa8ca7ec70cfd87aa94dc5e1a260901f2",
      "tree": "a0f0ce2e044f8a75009e94d5f788b45a3948bbe3",
      "parents": [
        "ee12b630687d510f6f4b6d4acdc4e267fd4adeda"
      ],
      "author": {
        "name": "Mingming Cao",
        "email": "cmm@us.ibm.com",
        "time": "Tue Aug 19 22:16:03 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Aug 19 22:16:03 2008 -0400"
      },
      "message": "ext4: journal credits reservation fixes for DIO, fallocate\n\nDIO and fallocate credit calculation is different than writepage, as\nthey do start a new journal right for each call to ext4_get_blocks_wrap().\nThis patch uses the helper function in DIO and fallocate case, passing\na flag indicating that the modified data are contigous thus could account\nless indirect/index blocks.\n\nThis patch also fixed the journal credit reservation for direct I/O\n(DIO).  Previously the estimated credits for DIO only was calculated for\nnon-extent files, which was not enough if the file is extent-based.\n\nAlso fixed was fallocate double-counting credits for modifying the the\nsuperblock.\n\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nReviewed-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a02908f19c819aeec5e3dcf238adaa6deddd70b0",
      "tree": "78764672019b22a5a8925abc702d7c54244138e8",
      "parents": [
        "c001077f4003fa75793bb62979baa6241dd8eb19"
      ],
      "author": {
        "name": "Mingming Cao",
        "email": "cmm@us.ibm.com",
        "time": "Tue Aug 19 22:16:07 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Aug 19 22:16:07 2008 -0400"
      },
      "message": "ext4: journal credits calulation cleanup and fix for non-extent writepage\n\nWhen considering how many journal credits are needed for modifying a\nchunk of data, we need to account for the super block, inode block,\nquota blocks and xattr block, indirect/index blocks, also, group bitmap\nand group descriptor blocks for new allocation (including data and\nindirect/index blocks). There are many places in ext4 do the calculation\non their own and often missed one or two meta blocks, and often they\nassume single block allocation, and did not considering the multile\nchunk of allocation case.\n\nThis patch is trying to cleanup current journal credit code, provides\nsome common helper funtion to calculate the journal credits, to be used\nfor writepage, writepages, DIO, fallocate, migration, defrag, and for\nboth nonextent and extent files.\n\nThis patch modified the writepage/write_begin credit caculation for\nnonextent files, to use the new helper function. It also fixed the\nproblem that writepage on nonextent files did not consider the case\nblocksize \u003cpagesize, thus could possibelly need multiple block\nallocation in a single transaction.\n\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nReviewed-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "cd21322616c3af265d39bf15321d436e667a5dd1",
      "tree": "2e293b838191785a0ecf3b19f204731c73589139",
      "parents": [
        "b4df2030858bde986cb6ff2e4b45945f84649e32"
      ],
      "author": {
        "name": "Mingming Cao",
        "email": "cmm@us.ibm.com",
        "time": "Tue Aug 19 22:16:59 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Aug 19 22:16:59 2008 -0400"
      },
      "message": "ext4: Fix delalloc release block reservation for truncate\n\nExt4 will release the reserved blocks for delayed allocations when\ninode is truncated/unlinked.  If there is no reserved block at all, we\nshouldn\u0027t need to do so.  But current code still tries to release the\nreserved blocks regardless whether the counters\u0027s value is 0.\nContinue to do that causes the later calculation to go wrong and a\nkernel BUG_ON() caught that. This doesn\u0027t happen for extent-based\nfiles, as the calculation for 0 reserved blocks was right for extent\nbased file.\n\nThis patch fixed the kernel BUG() due to above reason.  It adds checks\nfor 0 to avoid unnecessary release and fix calculation for non-extent\nfiles.\n\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "b4df2030858bde986cb6ff2e4b45945f84649e32",
      "tree": "3f078df884f234383c6708ddc54695700f270417",
      "parents": [
        "bf068ee266f9dbaa6dacb8433a366bb399e7ae5b"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Aug 13 21:44:34 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Aug 13 21:44:34 2008 -0400"
      },
      "message": "ext4: Fix potential truncate BUG due to i_prealloc_list being non-empty\n\nWe need to call ext4_discard_reservation() earlier in ext4_truncate(),\nto avoid a BUG() in ext4_mb_return_to_preallocation(), which is called\n(ultimately) by ext4_free_blocks().  So we must ditch the blocks on\ni_prealloc_list before we start freeing the data blocks.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "bf068ee266f9dbaa6dacb8433a366bb399e7ae5b",
      "tree": "dbbf7b4b8a65fd74bdb478bd62e94e5a79f41041",
      "parents": [
        "30a2f3c60a84092c8084dfe788b710f8d0768cd4"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Tue Aug 19 22:16:43 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Aug 19 22:16:43 2008 -0400"
      },
      "message": "ext4: Handle unwritten extent properly with delayed allocation\n\nWhen using fallocate the buffer_heads are marked unwritten and unmapped.\nWe need to map them in the writepages after a get_block.  Otherwise we\nsplit the uninit extents, but never write the content to disk.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "7d55992d60caa390460bad1a974eb2b3c11538f4",
      "tree": "587447550232932e083074eaf6f486bfba27fcf8",
      "parents": [
        "00b32b7fb671e797bdd2736524a497f18a8df7bf"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Sat Aug 02 21:22:18 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Aug 02 21:22:18 2008 -0400"
      },
      "message": "ext4: remove write-only variables from ext4_ordered_write_end\n\nThe variables \u0027from\u0027 and \u0027to\u0027 are not used anywhere.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nAcked-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "2b2d6d019724de6e51ac5bcf22b5ef969daefa8b",
      "tree": "71145b61b73b200fd3d4bae520bb988f5f7d21f5",
      "parents": [
        "ec05e868ac80cc8fc7de6e5cf773b232198e49af"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jul 26 16:15:44 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jul 26 16:15:44 2008 -0400"
      },
      "message": "ext4: Cleanup whitespace and other miscellaneous style issues\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "12219aea6b944e36795267be31d43f9c484841be",
      "tree": "0a9970929358fc8f0105334f2969888ecdf894e6",
      "parents": [
        "34071da71a665d8c81e3b3467c9a2e7c56386fec"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Thu Jul 17 16:12:08 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Jul 17 16:12:08 2008 -0400"
      },
      "message": "ext4: Cleanup the block reservation code path\n\nThe truncate patch should not use the i_allocated_meta_blocks\nvalue. So add seperate functions to be used in the truncate\nand alloc path. We also need to release the meta-data block\nthat we reserved for the blocks that we are truncating.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Theodore Ts\u0027o \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "bc965ab3f2b4b7bb898b11d61d25295c2053b8ac",
      "tree": "7f8cbd4e5d9c2a4e63fb35d5444f77bfb667c00f",
      "parents": [
        "0123c93998511978556b03d2bb023af92aa24d55"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Aug 02 21:10:38 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Aug 02 21:10:38 2008 -0400"
      },
      "message": "ext4: Fix lack of credits BUG() when deleting a badly fragmented inode\n\nThe extents codepath for ext4_truncate() requests journal transaction\ncredits in very small chunks, requesting only what is needed.  This\nmeans there may not be enough credits left on the transaction handle\nafter ext4_truncate() returns and then when ext4_delete_inode() tries\nfinish up its work, it may not have enough transaction credits,\ncausing a BUG() oops in the jbd2 core.\n\nAlso, reserve an extra 2 blocks when starting an ext4_delete_inode()\nsince we need to update the inode bitmap, as well as update the\norphaned inode linked list.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "d5a0d4f732af3438e592efab4cb80076d1dd81b5",
      "tree": "f156408767d8f59ecf991b3f71b51531c04d8f06",
      "parents": [
        "e9e34f4e8f42177c66754fec1edfd35e70c18f99"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Sat Aug 02 18:51:06 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Aug 02 18:51:06 2008 -0400"
      },
      "message": "ext4: fix ext4_da_write_begin error path\n\next4_da_write_begin needs to call journal_stop before returning,\nif the page allocation fails.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nAcked-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "9c83a923c67df311c467ec956009f0eb4019195d",
      "tree": "fbe6cbcfae2406ebbd842859ae445aa6f59276b6",
      "parents": [
        "6be2ded1d7c51b39144b9f07d2c839e1bd8707f1"
      ],
      "author": {
        "name": "Hidehiro Kawai",
        "email": "hidehiro.kawai.ez@hitachi.com",
        "time": "Sat Jul 26 16:39:26 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jul 26 16:39:26 2008 -0400"
      },
      "message": "ext4: don\u0027t read inode block if the buffer has a write error\n\nA transient I/O error can corrupt inode data.  Here is the scenario:\n\n(1) update inode_A at the block_B\n(2) pdflush writes out new inode_A to the filesystem, but it results\n    in write I/O error, at this point, BH_Uptodate flag of the buffer\n    for block_B is cleared and BH_Write_EIO is set\n(3) create new inode_C which located at block_B, and\n    __ext4_get_inode_loc() tries to read on-disk block_B because the\n    buffer is not uptodate\n(4) if it can read on-disk block_B successfully, inode_A is\n    overwritten by old data\n\nThis patch makes __ext4_get_inode_loc() not read the inode block if the\nbuffer has BH_Write_EIO flag.  In this case, the buffer should have the\nlatest information, so setting the uptodate flag to the buffer (this\navoids WARN_ON_ONCE() in mark_buffer_dirty().)\n\nAccording to this change, we would need to test BH_Write_EIO flag for the\nerror checking.  Currently nobody checks write I/O errors on metadata\nbuffers, but it will be done in other patches I\u0027m working on.\n\nSigned-off-by: Hidehiro Kawai \u003chidehiro.kawai.ez@hitachi.com\u003e\nCc: sugita \u003cyumiko.sugita.yf@hitachi.com\u003e\nCc: Satoshi OSHIMA \u003csatoshi.oshima.fk@hitachi.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Jan Kara \u003cjack@ucw.cz\u003e\nCc: \u003clinux-ext4@vger.kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Theodore Ts\u0027o \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "8ab22b9abb5c55413802e4adc9aa6223324547c3",
      "tree": "cff3319e1275e8a7c083d492889ec6bd0c7712d3",
      "parents": [
        "d84a52f62f6a396ed77aa0052da74ca9e760b28a"
      ],
      "author": {
        "name": "Hisashi Hifumi",
        "email": "hifumi.hisashi@oss.ntt.co.jp",
        "time": "Mon Jul 28 15:46:36 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 28 16:30:21 2008 -0700"
      },
      "message": "vfs: pagecache usage optimization for pagesize!\u003dblocksize\n\nWhen we read some part of a file through pagecache, if there is a\npagecache of corresponding index but this page is not uptodate, read IO\nis issued and this page will be uptodate.\n\nI think this is good for pagesize \u003d\u003d blocksize environment but there is\nroom for improvement on pagesize !\u003d blocksize environment.  Because in\nthis case a page can have multiple buffers and even if a page is not\nuptodate, some buffers can be uptodate.\n\nSo I suggest that when all buffers which correspond to a part of a file\nthat we want to read are uptodate, use this pagecache and copy data from\nthis pagecache to user buffer even if a page is not uptodate.  This can\nreduce read IO and improve system throughput.\n\nI wrote a benchmark program and got result number with this program.\n\nThis benchmark do:\n\n  1: mount and open a test file.\n\n  2: create a 512MB file.\n\n  3: close a file and umount.\n\n  4: mount and again open a test file.\n\n  5: pwrite randomly 300000 times on a test file.  offset is aligned\n     by IO size(1024bytes).\n\n  6: measure time of preading randomly 100000 times on a test file.\n\nThe result was:\n\t2.6.26\n        330 sec\n\n\t2.6.26-patched\n        226 sec\n\nArch:i386\nFilesystem:ext3\nBlocksize:1024 bytes\nMemory: 1GB\n\nOn ext3/4, a file is written through buffer/block.  So random read/write\nmixed workloads or random read after random write workloads are optimized\nwith this patch under pagesize !\u003d blocksize environment.  This test result\nshowed this.\n\nThe benchmark program is as follows:\n\n#include \u003cstdio.h\u003e\n#include \u003csys/types.h\u003e\n#include \u003csys/stat.h\u003e\n#include \u003cfcntl.h\u003e\n#include \u003cunistd.h\u003e\n#include \u003ctime.h\u003e\n#include \u003cstdlib.h\u003e\n#include \u003cstring.h\u003e\n#include \u003csys/mount.h\u003e\n\n#define LEN 1024\n#define LOOP 1024*512 /* 512MB */\n\nmain(void)\n{\n\tunsigned long i, offset, filesize;\n\tint fd;\n\tchar buf[LEN];\n\ttime_t t1, t2;\n\n\tif (mount(\"/dev/sda1\", \"/root/test1/\", \"ext3\", 0, 0) \u003c 0) {\n\t\tperror(\"cannot mount\\n\");\n\t\texit(1);\n\t}\n\tmemset(buf, 0, LEN);\n\tfd \u003d open(\"/root/test1/testfile\", O_CREAT|O_RDWR|O_TRUNC);\n\tif (fd \u003c 0) {\n\t\tperror(\"cannot open file\\n\");\n\t\texit(1);\n\t}\n\tfor (i \u003d 0; i \u003c LOOP; i++)\n\t\twrite(fd, buf, LEN);\n\tclose(fd);\n\tif (umount(\"/root/test1/\") \u003c 0) {\n\t\tperror(\"cannot umount\\n\");\n\t\texit(1);\n\t}\n\tif (mount(\"/dev/sda1\", \"/root/test1/\", \"ext3\", 0, 0) \u003c 0) {\n\t\tperror(\"cannot mount\\n\");\n\t\texit(1);\n\t}\n\tfd \u003d open(\"/root/test1/testfile\", O_RDWR);\n\tif (fd \u003c 0) {\n\t\tperror(\"cannot open file\\n\");\n\t\texit(1);\n\t}\n\n\tfilesize \u003d LEN * LOOP;\n\tfor (i \u003d 0; i \u003c 300000; i++){\n\t\toffset \u003d (random() % filesize) \u0026 (~(LEN - 1));\n\t\tpwrite(fd, buf, LEN, offset);\n\t}\n\tprintf(\"start test\\n\");\n\ttime(\u0026t1);\n\tfor (i \u003d 0; i \u003c 100000; i++){\n\t\toffset \u003d (random() % filesize) \u0026 (~(LEN - 1));\n\t\tpread(fd, buf, LEN, offset);\n\t}\n\ttime(\u0026t2);\n\tprintf(\"%ld sec\\n\", t2-t1);\n\tclose(fd);\n\tif (umount(\"/root/test1/\") \u003c 0) {\n\t\tperror(\"cannot umount\\n\");\n\t\texit(1);\n\t}\n}\n\nSigned-off-by: Hisashi Hifumi \u003chifumi.hisashi@oss.ntt.co.jp\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Jan Kara \u003cjack@ucw.cz\u003e\nCc: \u003clinux-ext4@vger.kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3e3398a08d6e516675d5af853d625dc7dd90eab1",
      "tree": "d8a37dbaea105cd36e02827b057a0f9fcad62adc",
      "parents": [
        "632eaeab1feb5d78c1e2bfb1d2dfc0ebb8ac187f"
      ],
      "author": {
        "name": "Mingming Cao",
        "email": "cmm@us.ibm.com",
        "time": "Fri Jul 11 19:27:31 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jul 11 19:27:31 2008 -0400"
      },
      "message": "ext4: delayed allocation i_blocks fix for stat\n\nRight now i_blocks is not getting updated until the blocks are actually\nallocaed on disk.  This means with delayed allocation, right after files\nare copied, \"ls -sF\" shoes the file as taking 0 blocks on disk.  \"du\"\nalso shows the files taking zero space, which is highly confusing to the\nuser.\n\nSince delayed allocation already keeps track of per-inode total\nnumber of blocks that are subject to delayed allocation, this patch fix\nthis by using that to adjust the value returned by stat(2). When real\nblock allocation is done, the i_blocks will get updated. Since the\nreserved blocks for delayed allocation will be decreased, this will be\nkeep value returned by stat(2) consistent.\n\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    }
  ],
  "next": "632eaeab1feb5d78c1e2bfb1d2dfc0ebb8ac187f"
}
