)]}'
{
  "log": [
    {
      "commit": "8c20871998c082f6fbc963f1449a5ba5140ee39a",
      "tree": "bbc61fb11c8e9f5e02843dbf20bded2c01430ac6",
      "parents": [
        "d2db60df1e7eb39cf0f378dfc4dd8813666d46ef"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Thu Aug 11 09:54:31 2011 -0500"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 11 17:23:40 2011 -0700"
      },
      "message": "ext4: Properly count journal credits for long symlinks\n\nCommit df5e6223407e (\"ext4: fix deadlock in ext4_symlink() in ENOSPC\nconditions\") recalculated the number of credits needed for a long\nsymlink, in the process of splitting it into two transactions.  However,\nthe first credit calculation under-counted because if selinux is\nenabled, credits are needed to create the selinux xattr as well.\n\nOverrunning the reservation will result in an OOPS in\njbd2_journal_dirty_metadata() due to this assert:\n\n  J_ASSERT_JH(jh, handle-\u003eh_buffer_credits \u003e 0);\n\nFix this by increasing the reservation size.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nReviewed-by: Jan Kara \u003cjack@suse.cz\u003e\nAcked-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: stable@kernel.org\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "db9481c0476c6475d058ac7ecebb5a822b43cc99",
      "tree": "d3115cab19ab99912618428d9f9e76bbf3572857",
      "parents": [
        "ed8f37370d83e695c0a4fa5d5fc7a83ecb947526"
      ],
      "author": {
        "name": "Mathias Krause",
        "email": "minipli@googlemail.com",
        "time": "Wed Aug 03 14:57:11 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Aug 03 14:57:11 2011 -0400"
      },
      "message": "ext4: use kzalloc in ext4_kzalloc()\n\nCommit 9933fc0i (ext4: introduce ext4_kvmalloc(), ext4_kzalloc(), and\next4_kvfree()) intruduced wrappers around k*alloc/vmalloc but introduced\na typo for ext4_kzalloc() by not using kzalloc() but kmalloc().\n\nSigned-off-by: Mathias Krause \u003cminipli@googlemail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "60ad4466821a96913a9b567115e194ed1087c2d7",
      "tree": "cd488ba72a60f856b85a467763fb633cbe7ef2d9",
      "parents": [
        "1b8e94993c4752d98c33903aa836acc15f7e6d5c",
        "79a77c5ac34cc27ccbfbdf7113b41cdd93534eab"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Aug 01 13:56:03 2011 -1000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Aug 01 13:56:03 2011 -1000"
      },
      "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: (60 commits)\n  ext4: prevent memory leaks from ext4_mb_init_backend() on error path\n  ext4: use EXT4_BAD_INO for buddy cache to avoid colliding with valid inode #\n  ext4: use ext4_msg() instead of printk in mballoc\n  ext4: use ext4_kvzalloc()/ext4_kvmalloc() for s_group_desc and s_group_info\n  ext4: introduce ext4_kvmalloc(), ext4_kzalloc(), and ext4_kvfree()\n  ext4: use the correct error exit path in ext4_init_inode_table()\n  ext4: add missing kfree() on error return path in add_new_gdb()\n  ext4: change umode_t in tracepoint headers to be an explicit __u16\n  ext4: fix races in ext4_sync_parent()\n  ext4: Fix overflow caused by missing cast in ext4_fallocate()\n  ext4: add action of moving index in ext4_ext_rm_idx for Punch Hole\n  ext4: simplify parameters of reserve_backup_gdb()\n  ext4: simplify parameters of add_new_gdb()\n  ext4: remove lock_buffer in bclean() and setup_new_group_blocks()\n  ext4: simplify journal handling in setup_new_group_blocks()\n  ext4: let setup_new_group_blocks() set multiple bits at a time\n  ext4: fix a typo in ext4_group_extend()\n  ext4: let ext4_group_add_blocks() handle 0 blocks quickly\n  ext4: let ext4_group_add_blocks() return an error code\n  ext4: rename ext4_add_groupblocks() to ext4_group_add_blocks()\n  ...\n\nFix up conflict in fs/ext4/inode.c: commit aacfc19c626e (\"fs: simplify\nthe blockdev_direct_IO prototype\") had changed the ext4_ind_direct_IO()\nfunction for the new simplified calling convention, while commit\ndae1e52cb126 (\"ext4: move ext4_ind_* functions from inode.c to\nindirect.c\") moved the function to another file.\n"
    },
    {
      "commit": "79a77c5ac34cc27ccbfbdf7113b41cdd93534eab",
      "tree": "0217516fde94d1dea524ee4f40279cc03fc5cefa",
      "parents": [
        "48e6061bf4bb25eec151b91f22fd90a5b9a4920a"
      ],
      "author": {
        "name": "Yu Jian",
        "email": "yujian@whamcloud.com",
        "time": "Mon Aug 01 17:41:46 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 01 17:41:46 2011 -0400"
      },
      "message": "ext4: prevent memory leaks from ext4_mb_init_backend() on error path\n\nIn ext4_mb_init(), if the s_locality_group allocation fails it will\ncurrently cause the allocations made in ext4_mb_init_backend() to\nbe leaked.  Moving the ext4_mb_init_backend() allocation after the\ns_locality_group allocation avoids that problem.\n\nSigned-off-by: Yu Jian \u003cyujian@whamcloud.com\u003e\nSigned-off-by: Andreas Dilger \u003cadilger@whamcloud.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "48e6061bf4bb25eec151b91f22fd90a5b9a4920a",
      "tree": "b0515505a3eee15adcc38325d309553e57e40975",
      "parents": [
        "9d8b9ec44234b2f6e0225300632d250210c04f11"
      ],
      "author": {
        "name": "Yu Jian",
        "email": "yujian@whamcloud.com",
        "time": "Mon Aug 01 17:41:39 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 01 17:41:39 2011 -0400"
      },
      "message": "ext4: use EXT4_BAD_INO for buddy cache to avoid colliding with valid inode #\n\nSigned-off-by: Yu Jian \u003cyujian@whamcloud.com\u003e\nSigned-off-by: Andreas Dilger \u003cadilger@whamcloud.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "9d8b9ec44234b2f6e0225300632d250210c04f11",
      "tree": "8b07c2cd2f664ebd2772e3d2299ef69e8c5a1e74",
      "parents": [
        "f18a5f21c25707b4fe64b326e2b4d150565e7300"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 01 17:41:35 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 01 17:41:35 2011 -0400"
      },
      "message": "ext4: use ext4_msg() instead of printk in mballoc\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f18a5f21c25707b4fe64b326e2b4d150565e7300",
      "tree": "b17baa6c8476eb2a3fbc6b1d65c7fd59950a2dcd",
      "parents": [
        "9933fc0ac1ac14b795819cd63d05ea92112f690a"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 01 08:45:38 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 01 08:45:38 2011 -0400"
      },
      "message": "ext4: use ext4_kvzalloc()/ext4_kvmalloc() for s_group_desc and s_group_info\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "9933fc0ac1ac14b795819cd63d05ea92112f690a",
      "tree": "bff42e3494fd5401e6b171ddae8f52ecd1defd91",
      "parents": [
        "33853a0dde359ded0534204eb6857ad5166d515b"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 01 08:45:02 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 01 08:45:02 2011 -0400"
      },
      "message": "ext4: introduce ext4_kvmalloc(), ext4_kzalloc(), and ext4_kvfree()\n\nIntroduce new helper functions which try kmalloc, and then fall back\nto vmalloc if necessary, and use them for allocating and deallocating\ns_flex_groups.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "33853a0dde359ded0534204eb6857ad5166d515b",
      "tree": "2c7ab2e9bddc5418af1356bd579dd0d22605c1d9",
      "parents": [
        "c49bafa3842751b8955a962859f42d307673d75d"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Mon Aug 01 06:32:19 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 01 06:32:19 2011 -0400"
      },
      "message": "ext4: use the correct error exit path in ext4_init_inode_table()\n\nThis patch lets ext4_init_inode_table() handle errors right.\next4_init_inode_table() should down_write() alloc_sem which\nhas been up_write()ed and stop the started journal handle.\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "d6952123b53cc8b334df69bba2cd0063b0d88f68",
      "tree": "b1ccaa7e3d65dbf4af093202044da65bc4deb34e",
      "parents": [
        "d3fb612076eebec6f67257db0c7a9666ac7e5892"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jul 23 18:56:36 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 01 02:10:06 2011 -0400"
      },
      "message": "switch posix_acl_equiv_mode() to umode_t *\n\n... so that \u0026inode-\u003ei_mode could be passed to it\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d3fb612076eebec6f67257db0c7a9666ac7e5892",
      "tree": "5265fca258a74ffa75b845998492abb9446db72c",
      "parents": [
        "782b94cdf577b4df1feb376f372dccc28e66a771"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jul 23 18:37:50 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 01 02:09:42 2011 -0400"
      },
      "message": "switch posix_acl_create() to umode_t *\n\nso we can pass \u0026inode-\u003ei_mode to it\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c49bafa3842751b8955a962859f42d307673d75d",
      "tree": "6c738a314fd1e15043c0b1c3a1cc527758a38d56",
      "parents": [
        "59be8e7280c10fd8f078ba6dc2bcdc2b1453b6ab"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "error27@gmail.com",
        "time": "Sat Jul 30 12:58:41 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jul 30 12:58:41 2011 -0400"
      },
      "message": "ext4: add missing kfree() on error return path in add_new_gdb()\n\nWe added some more error handling in b40971426a \"ext4: add error\nchecking to calls to ext4_handle_dirty_metadata()\".  But we need to\ncall kfree() as well to avoid a memory leak.\n\nSigned-off-by: Dan Carpenter \u003cerror27@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "d59729f4e794f814b25ccd2aebfbe606242c4544",
      "tree": "96b7cfef8124c23b6a17ded73fddffc567d6f2a1",
      "parents": [
        "29ae07b702cb77dbc24b0843f15ee8cf8a642311"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jul 30 12:34:19 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jul 30 12:34:19 2011 -0400"
      },
      "message": "ext4: fix races in ext4_sync_parent()\n\nFix problems if fsync() races against a rename of a parent directory\nas pointed out by Al Viro in his own inimitable way:\n\n\u003eWhile we are at it, could somebody please explain what the hell is ext4\n\u003edoing in\n\u003estatic int ext4_sync_parent(struct inode *inode)\n\u003e{\n\u003e        struct writeback_control wbc;\n\u003e        struct dentry *dentry \u003d NULL;\n\u003e        int ret \u003d 0;\n\u003e\n\u003e        while (inode \u0026\u0026 ext4_test_inode_state(inode, EXT4_STATE_NEWENTRY)) {\n\u003e                ext4_clear_inode_state(inode, EXT4_STATE_NEWENTRY);\n\u003e                dentry \u003d list_entry(inode-\u003ei_dentry.next,\n\u003e                                    struct dentry, d_alias);\n\u003e                if (!dentry || !dentry-\u003ed_parent || !dentry-\u003ed_parent-\u003ed_inode)\n\u003e                        break;\n\u003e                inode \u003d dentry-\u003ed_parent-\u003ed_inode;\n\u003e                ret \u003d sync_mapping_buffers(inode-\u003ei_mapping);\n\u003e                ...\n\u003eNote that dentry obviously can\u0027t be NULL there.  dentry-\u003ed_parent is never\n\u003eNULL.  And dentry-\u003ed_parent would better not be negative, for crying out\n\u003eloud!  What\u0027s worse, there\u0027s no guarantees that dentry-\u003ed_parent will\n\u003eremain our parent over that sync_mapping_buffers() *and* that inode won\u0027t\n\u003ejust be freed under us (after rename() and memory pressure leading to\n\u003eeviction of what used to be our dentry-\u003ed_parent)......\n\nReported-by: Al Viro \u003cviro@ZenIV.linux.org.uk\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "29ae07b702cb77dbc24b0843f15ee8cf8a642311",
      "tree": "4d9d3717e2be5cb335fd4f32c9207bf0b55caac9",
      "parents": [
        "0e1147b001793593624e80b3c0a1790822b6baca"
      ],
      "author": {
        "name": "Utako Kusaka",
        "email": "u-kusaka@wm.jp.nec.com",
        "time": "Wed Jul 27 22:11:20 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Jul 27 22:11:20 2011 -0400"
      },
      "message": "ext4: Fix overflow caused by missing cast in ext4_fallocate()\n\nThe logical block number in map.l_blk is a __u32, and so before we\nshift it left, by the block size, we neeed cast it to a 64-bit size.\n\nOtherwise i_size can be corrupted on an ENOSPC.\n\n# df -T /mnt/mp1\nFilesystem    Type   1K-blocks      Used Available Use% Mounted on\n/dev/sda6     ext4     9843276    153056   9190200   2% /mnt/mp1\n# fallocate -o 0 -l 2199023251456 /mnt/mp1/testfile\nfallocate: /mnt/mp1/testfile: fallocate failed: No space left on device\n# stat /mnt/mp1/testfile\n  File: `/mnt/mp1/testfile\u0027\n  Size: 4293656576\tBlocks: 19380440   IO Block: 4096   regular file\nDevice: 806h/2054d\tInode: 12          Links: 1\nAccess: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)\nAccess: 2011-07-25 13:01:31.414490496 +0900\nModify: 2011-07-25 13:01:31.414490496 +0900\nChange: 2011-07-25 13:01:31.454490495 +0900\n\nSigned-off-by: Utako Kusaka \u003cu-kusaka@wm.jp.nec.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n--\n fs/ext4/extents.c |    2 +-\n 1 files changed, 1 insertions(+), 1 deletions(-)\n\n"
    },
    {
      "commit": "0e1147b001793593624e80b3c0a1790822b6baca",
      "tree": "b43cf0a3f8cb4733386867c4b06d92eb0025f04a",
      "parents": [
        "668f4dc5593327fadc95b33189c375f7178ef88e"
      ],
      "author": {
        "name": "Robin Dong",
        "email": "sanbai@taobao.com",
        "time": "Wed Jul 27 21:29:33 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Jul 27 21:29:33 2011 -0400"
      },
      "message": "ext4: add action of moving index in ext4_ext_rm_idx for Punch Hole\n\nThe old function ext4_ext_rm_idx is used only for truncate case\nbecause it just remove last index in extent-index-block. When punching\nhole, it usually needed to remove \"middle\" index, therefore we must\nmove indexes which after it forward.\n\n(I create a file with 1 depth extent tree and punch hole in the middle\nof it, the last index in index-block strangly gone, so I find out this\nbug)\n\nSigned-off-by: Robin Dong \u003csanbai@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "668f4dc5593327fadc95b33189c375f7178ef88e",
      "tree": "b368734ce8ef044762887dcd740e2609c6eac893",
      "parents": [
        "2f919710143cb2025157c3c193ee22de86f3ed73"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Wed Jul 27 21:23:13 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Jul 27 21:23:13 2011 -0400"
      },
      "message": "ext4: simplify parameters of reserve_backup_gdb()\n\nThe reserve_backup_gdb() function only needs the block group number;\nthere\u0027s no need to pass a pointer to struct ext4_new_group_data to it.\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\n"
    },
    {
      "commit": "2f919710143cb2025157c3c193ee22de86f3ed73",
      "tree": "935314cca6ee1a5e29359fafcd1d4d934eeabbe0",
      "parents": [
        "e6075e984d100c12bb79267639c3f661d9788a67"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Wed Jul 27 21:16:33 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Jul 27 21:16:33 2011 -0400"
      },
      "message": "ext4: simplify parameters of add_new_gdb()\n\nadd_new_gdb() only needs the block group number; there is no need to\npass a pointer to struct ext4_new_group_data to add_new_gdb().\nInstead of filling in a pointer the struct buffer_head in\nadd_new_gdb(), it\u0027s simpler to have the caller fetch it from the\ns_group_desc[] array.\n\n[Fixed error path to handle the case where struct buffer_head *primary\n hasn\u0027t been set yet. -- Ted]\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "e6075e984d100c12bb79267639c3f661d9788a67",
      "tree": "6c50d26e084fc8b36817f33198f46469dcaa2857",
      "parents": [
        "6d40bc5a7e8fc71795d131e835f38f161ed7e1b1"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Wed Jul 27 20:40:18 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Jul 27 20:40:18 2011 -0400"
      },
      "message": "ext4: remove lock_buffer in bclean() and setup_new_group_blocks()\n\nThere is no need to lock the buffers since no one else should be\ntouching these buffers besides the file system.\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "6d40bc5a7e8fc71795d131e835f38f161ed7e1b1",
      "tree": "d66d509a10509bc09d8dc0ecdc4641b585c1bfa0",
      "parents": [
        "c3e94d1df9bdd9e2c4ba7e8f534f7925f1756f97"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Tue Jul 26 22:24:41 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 26 22:24:41 2011 -0400"
      },
      "message": "ext4: simplify journal handling in setup_new_group_blocks()\n\nThis patch simplifies journal handling in setup_new_group_blocks().\n\nIn previous code, block bitmap is modified everywhere in\nsetup_new_group_blocks(), ext4_get_write_access() in\nextend_or_restart_transaction() is used to guarantee that the block\nbitmap stays in the new handle, this makes things complicated.\n\nThe previous commit changed things so that the modifications on the\nblock bitmap are batched and done by ext4_set_bits() at the end of the\nfor loop.  This allows us to simplify things.\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c3e94d1df9bdd9e2c4ba7e8f534f7925f1756f97",
      "tree": "b0f23df82b491e04b64d7d67e4eecc80d1f4c6a0",
      "parents": [
        "2b79b09d13e35577151bd13ba08809911baccd1c"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Tue Jul 26 22:05:53 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 26 22:05:53 2011 -0400"
      },
      "message": "ext4: let setup_new_group_blocks() set multiple bits at a time\n\nRename mb_set_bits() to ext4_set_bits() and make it a global function\nso that setup_new_group_blocks() can use it.\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "2b79b09d13e35577151bd13ba08809911baccd1c",
      "tree": "52ccf2c03372dcb962d20a297deb3e06498cd75f",
      "parents": [
        "4740b830ed5720ade6c780dbf3fdfe9089b3552d"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Tue Jul 26 21:53:35 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 26 21:53:35 2011 -0400"
      },
      "message": "ext4: fix a typo in ext4_group_extend()\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "4740b830ed5720ade6c780dbf3fdfe9089b3552d",
      "tree": "7236a6b16db7d3cf8ef8cf5a6d86dac85df01b01",
      "parents": [
        "cc7365dfe48cb2191f1572bf69e30d3e58716313"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Tue Jul 26 21:51:08 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 26 21:51:08 2011 -0400"
      },
      "message": "ext4: let ext4_group_add_blocks() handle 0 blocks quickly\n\nIf ext4_group_add_blocks() is called with 0 block, make it return 0\nwithout doing any extra work.\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "cc7365dfe48cb2191f1572bf69e30d3e58716313",
      "tree": "1d0a533d6ffcee71900894741995a1d0cf91ab0f",
      "parents": [
        "0529155e8a4bcb77dfc9ceaea19c6501487e452b"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Tue Jul 26 21:46:07 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 26 21:46:07 2011 -0400"
      },
      "message": "ext4: let ext4_group_add_blocks() return an error code\n\nThis patch lets ext4_group_add_blocks() return an error code if it\nfails, so that upper functions can handle error correctly.\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "0529155e8a4bcb77dfc9ceaea19c6501487e452b",
      "tree": "a67262d87fcfa101ea8ea3af9d90725a9de22f2c",
      "parents": [
        "ce723c31b58f54fb865036805475ee7a8c5dc173"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Tue Jul 26 21:43:56 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 26 21:43:56 2011 -0400"
      },
      "message": "ext4: rename ext4_add_groupblocks() to ext4_group_add_blocks()\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "ce723c31b58f54fb865036805475ee7a8c5dc173",
      "tree": "d84f2de76ce1acc4072ce512636d686046066ee6",
      "parents": [
        "8f82f840ec6ab873f520364d443ff6fa1b3f8e22"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Tue Jul 26 21:39:09 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 26 21:39:09 2011 -0400"
      },
      "message": "ext4: prevent a fs with errors from being resized\n\nA filesystem with errors is not allowed to being resized, otherwise,\nit is easy to destroy the filesystem.\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "8f82f840ec6ab873f520364d443ff6fa1b3f8e22",
      "tree": "72d90cdc8f7311ef913b7471e53f718bebbf7414",
      "parents": [
        "2d859db3e4a82a365572592d57624a5f996ed0ec"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Tue Jul 26 21:35:44 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 26 21:35:44 2011 -0400"
      },
      "message": "ext4: prevent parallel resizers by atomic bit ops\n\nBefore this patch, parallel resizers are allowed and protected by a\nmutex lock, actually, there is no need to support parallel resizer, so\nthis patch prevents parallel resizers by atmoic bit ops, like\nlock_page() and unlock_page() do.\n\nTo do this, the patch removed the mutex lock s_resize_lock from struct\next4_sb_info and added a unsigned long field named s_resize_flags\nwhich inidicates if there is a resizer.\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f01ef569cddb1a8627b1c6b3a134998ad1cf4b22",
      "tree": "29ea1a0942c8549c24411e976cd6891c7e995e89",
      "parents": [
        "a93a1329271038f0e8337061d3b41b3b212a851e",
        "bcff25fc8aa47a13faff8b4b992589813f7b450a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 10:39:54 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 10:39:54 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/writeback\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/writeback: (27 commits)\n  mm: properly reflect task dirty limits in dirty_exceeded logic\n  writeback: don\u0027t busy retry writeback on new/freeing inodes\n  writeback: scale IO chunk size up to half device bandwidth\n  writeback: trace global_dirty_state\n  writeback: introduce max-pause and pass-good dirty limits\n  writeback: introduce smoothed global dirty limit\n  writeback: consolidate variable names in balance_dirty_pages()\n  writeback: show bdi write bandwidth in debugfs\n  writeback: bdi write bandwidth estimation\n  writeback: account per-bdi accumulated written pages\n  writeback: make writeback_control.nr_to_write straight\n  writeback: skip tmpfs early in balance_dirty_pages_ratelimited_nr()\n  writeback: trace event writeback_queue_io\n  writeback: trace event writeback_single_inode\n  writeback: remove .nonblocking and .encountered_congestion\n  writeback: remove writeback_control.more_io\n  writeback: skip balance_dirty_pages() for in-memory fs\n  writeback: add bdi_dirty_limit() kernel-doc\n  writeback: avoid extra sync work at enqueue time\n  writeback: elevate queue_io() into wb_writeback()\n  ...\n\nFix up trivial conflicts in fs/fs-writeback.c and mm/filemap.c\n"
    },
    {
      "commit": "2d859db3e4a82a365572592d57624a5f996ed0ec",
      "tree": "d725aca3ab9555b8ee92f753a797034ff79f580c",
      "parents": [
        "b7ca1e8ec53259359db5313f923a0a20fa04bdb6"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue Jul 26 09:07:11 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 26 09:07:11 2011 -0400"
      },
      "message": "ext4: fix data corruption in inodes with journalled data\n\nWhen journalling data for an inode (either because it is a symlink or\nbecause the filesystem is mounted in data\u003djournal mode), ext4_evict_inode()\ncan discard unwritten data by calling truncate_inode_pages(). This is\nbecause we don\u0027t mark the buffer / page dirty when journalling data but only\nadd the buffer to the running transaction and thus mm does not know there\nare still unwritten data.\n\nFix the problem by carefully tracking transaction containing inode\u0027s data,\ncommitting this transaction, and writing uncheckpointed buffers when inode\nshould be reaped.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "4e34e719e457f2e031297175410fc0bd4016a085",
      "tree": "ab969a371e0d2efc6bfbf503ca6cdfce3af3bf6c",
      "parents": [
        "edde854e8bb34a7f32fa993d721f1da0faf64165"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Jul 23 17:37:31 2011 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jul 25 14:30:23 2011 -0400"
      },
      "message": "fs: take the ACL checks to common code\n\nReplace the -\u003echeck_acl method with a -\u003eget_acl method that simply reads an\nACL from disk after having a cache miss.  This means we can replace the ACL\nchecking boilerplate code with a single implementation in namei.c.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "826cae2f2b4d726b925f43bc208a571639da4761",
      "tree": "b7f83eecf3bde8c4e455d89c7c535988b3e8bd59",
      "parents": [
        "95203befa8887997f14077d8557e67d78457ee02"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jul 23 03:10:32 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jul 25 14:27:32 2011 -0400"
      },
      "message": "kill boilerplates around posix_acl_create_masq()\n\nnew helper: posix_acl_create(\u0026acl, gfp, mode_p).  Replaces acl with\nmodified clone, on failure releases acl and replaces with NULL.\nReturns 0 or -ve on error.  All callers of posix_acl_create_masq()\nswitched.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "bc26ab5f65ae41b71df86ea46df3c3833d1d8d83",
      "tree": "85bbc4e0da4fac99ccf31b3609c61e2b148a8498",
      "parents": [
        "4482a087d4c5a6ffbc385c56b4a4e2f694d9fd5d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jul 23 00:18:02 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jul 25 14:27:30 2011 -0400"
      },
      "message": "kill boilerplate around posix_acl_chmod_masq()\n\nnew helper: posix_acl_chmod(\u0026acl, gfp, mode).  Replaces acl with modified\nclone or with NULL if that has failed; returns 0 or -ve on error.  All\ncallers of posix_acl_chmod_masq() switched to that - they\u0027d been doing\nexactly the same thing.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "e77819e57f0817c6dc7cadd061acd70c604cbce2",
      "tree": "f5d7aba2dfbb747a97d783b7cc6a486922c42559",
      "parents": [
        "3ca30d40a91fb9b9871e61d5dea2c1a895906a15"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 19:30:19 2011 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jul 25 14:23:39 2011 -0400"
      },
      "message": "vfs: move ACL cache lookup into generic code\n\nThis moves logic for checking the cached ACL values from low-level\nfilesystems into generic code.  The end result is a streamlined ACL\ncheck that doesn\u0027t need to load the inode-\u003ei_op-\u003echeck_acl pointer at\nall for the common cached case.\n\nThe filesystems also don\u0027t need to check for a non-blocking RCU walk\ncase in their acl_check() functions, because that is all handled at a\nVFS layer.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b7ca1e8ec53259359db5313f923a0a20fa04bdb6",
      "tree": "7e120d5a7c86c0f44460751dd9c2dba54874c122",
      "parents": [
        "0737964bc98202776f4d10bc8e108f45b3115037"
      ],
      "author": {
        "name": "Robin Dong",
        "email": "sanbai@taobao.com",
        "time": "Sat Jul 23 21:53:25 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jul 23 21:53:25 2011 -0400"
      },
      "message": "ext4: correct comment for ext4_ext_check_cache\n\nThe comment for ext4_ext_check_cache has a litte mistake.\n\nSigned-off-by: Robin Dong \u003csanbai@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "0737964bc98202776f4d10bc8e108f45b3115037",
      "tree": "b5cda05cd5ccc4bcfacb9e1b65f74c1bacfc7dee",
      "parents": [
        "5718789da5b94bd4148cb7ea0f457089c26bc1c3"
      ],
      "author": {
        "name": "Robin Dong",
        "email": "sanbai@taobao.com",
        "time": "Sat Jul 23 21:51:07 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jul 23 21:51:07 2011 -0400"
      },
      "message": "ext4: correct the debug message in ext4_ext_insert_extent\n\nThe debug message in ext4_ext_insert_extent before moving extent\nis incorrect (the \"from xx to xx\").\n\nSigned-off-by: Robin Dong \u003csanbai@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "5718789da5b94bd4148cb7ea0f457089c26bc1c3",
      "tree": "8daf6d7e0150915220deaa3847752606dc416192",
      "parents": [
        "6a0fe49308dcac10ab510b3c45e00eb8d5ef440e"
      ],
      "author": {
        "name": "Robin Dong",
        "email": "sanbai@taobao.com",
        "time": "Sat Jul 23 21:49:07 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jul 23 21:49:07 2011 -0400"
      },
      "message": "ext4: remove unused argument in ext4_ext_next_leaf_block\n\nThe argument \"inode\" in function ext4_ext_next_allocated_block looks useless,\nso clean it.\n\nSigned-off-by: Robin Dong \u003csanbai@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "6a0fe49308dcac10ab510b3c45e00eb8d5ef440e",
      "tree": "8cf58436e9ef7080c05c1907461b1a055c672aff",
      "parents": [
        "ced156e464e49b6b4153ede9aaa04d9a4ad24e0c"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Sat Jul 23 16:18:55 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jul 23 16:18:55 2011 -0400"
      },
      "message": "ext4: remove ac_repeats from ext4_allocation_context\n\nac_repeats isn\u0027t referenced in the mballoc code. So remove it.\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "ced156e464e49b6b4153ede9aaa04d9a4ad24e0c",
      "tree": "fd75128cb77e6634a5f22c16b601af5857182c35",
      "parents": [
        "529da704ad1ead755d9e40721f29446cb278e099"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Sat Jul 23 16:18:05 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jul 23 16:18:05 2011 -0400"
      },
      "message": "ext4: don\u0027t increment s_mb_buddies_generated in ext4_mb_release\n\nIn ext4_mb_release, we use s_mb_buddies_generated++.  Although\nthe output is OK, but I don\u0027t think we need this extra ++.\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "529da704ad1ead755d9e40721f29446cb278e099",
      "tree": "624e4cdafcbbe61441c1cf73395394caf736618f",
      "parents": [
        "d46203159ed376fdbe2b05aa57e58207bf27a8f9"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Sat Jul 23 16:07:26 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jul 23 16:07:26 2011 -0400"
      },
      "message": "ext4: remove unnecessary ext4_get_group_info in ext4_mb_load_buddy\n\next4_mb_load_buddy() calls ext4_get_group_info() for setting both\n\"grp\" and \"e4b-\u003ebd_info\", but it could do \"e4b-\u003ebd_info \u003d grp\".\n\nReported-by:  Andreas Dilger \u003cadilger@whamcloud.com\u003e\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "02c24a82187d5a628c68edfe71ae60dc135cd178",
      "tree": "c8dbaba4d82e2b20ed4335910a564a1f7d90fcf6",
      "parents": [
        "22735068d53c7115e384bc88dea95b17e76a6839"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Sat Jul 16 20:44:56 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:47:59 2011 -0400"
      },
      "message": "fs: push i_mutex and filemap_write_and_wait down into -\u003efsync() handlers\n\nBtrfs needs to be able to control how filemap_write_and_wait_range() is called\nin fsync to make it less of a painful operation, so push down taking i_mutex and\nthe calling of filemap_write_and_wait() down into the -\u003efsync() handlers.  Some\nfile systems can drop taking the i_mutex altogether it seems, like ext3 and\nocfs2.  For correctness sake I just pushed everything down in all cases to make\nsure that we keep the current behavior the same for everybody, and then each\nindividual fs maintainer can make up their mind about what to do from there.\nThanks,\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c334b1138bd44bea578eab7971c59bd9212a1093",
      "tree": "a91a04ce72a4f12bdb6c8ca26400a466dcce5120",
      "parents": [
        "b26751575a9aa55fd6dbf3febde3ff06dfadc44f"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon Jul 18 13:21:37 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:47:57 2011 -0400"
      },
      "message": "Ext4: handle SEEK_HOLE/SEEK_DATA generically\n\nSince Ext4 has its own lseek we need to make sure it handles\nSEEK_HOLE/SEEK_DATA.  For now just do the same thing that is done in the generic\ncase, somebody else can come along and make it do fancy things later.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "72c5052ddc3956d847f21c2b8d55c93664a51b2c",
      "tree": "47b381f3f746cdc1612f432bd902278f8901f84a",
      "parents": [
        "aacfc19c626ebd3daa675652457d71019a1f583f"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Jun 24 14:29:48 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:47:50 2011 -0400"
      },
      "message": "fs: move inode_dio_done to the end_io handler\n\nFor filesystems that delay their end_io processing we should keep our\ni_dio_count until the the processing is done.  Enable this by moving\nthe inode_dio_done call to the end_io handler if one exist.  Note that\nthe actual move to the workqueue for ext4 and XFS is not done in\nthis patch yet, but left to the filesystem maintainers.  At least\nfor XFS it\u0027s not needed yet either as XFS has an internal equivalent\nto i_dio_count.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "aacfc19c626ebd3daa675652457d71019a1f583f",
      "tree": "9c1cfb5945e939f1ba56b4c0101c211e84e544c0",
      "parents": [
        "df2d6f26586f12a24f3ae5df4e236dc5c08d6eb4"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Jun 24 14:29:47 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:47:49 2011 -0400"
      },
      "message": "fs: simplify the blockdev_direct_IO prototype\n\nSimple filesystems always pass inode-\u003ei_sb_bdev as the block device\nargument, and never need a end_io handler.  Let\u0027s simply things for\nthem and for my grepping activity by dropping these arguments.  The\nonly thing not falling into that scheme is ext4, which passes and\nend_io handler without needing special flags (yet), but given how\nmessy the direct I/O code there is use of __blockdev_direct_IO\nin one instead of two out of three cases isn\u0027t going to make a large\ndifference anyway.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "562c72aa57c36b178eacc3500a0215651eca9429",
      "tree": "2c522c53ab26fc72e85e08747a08e3dca1207c87",
      "parents": [
        "11b80f459adaf91a712f95e7734a17655a36bf30"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Jun 24 14:29:45 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:47:47 2011 -0400"
      },
      "message": "fs: move inode_dio_wait calls into -\u003esetattr\n\nLet filesystems handle waiting for direct I/O requests themselves instead\nof doing it beforehand.  This means filesystem-specific locks to prevent\nnew dio referenes from appearing can be held.  This is important to allow\ngeneralizing i_dio_count to non-DIO_LOCKING filesystems.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9ea7df534ed2a18157434a496a12cf073ca00c52",
      "tree": "f8fa09102093cbc60249f96ec4fb91985ae8659b",
      "parents": [
        "582686915803e34adc8fdcd90bff7ca7f6a42221"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Fri Jun 24 14:29:41 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:47:45 2011 -0400"
      },
      "message": "ext4: Rewrite ext4_page_mkwrite() to use generic helpers\n\nRewrite ext4_page_mkwrite() to use __block_page_mkwrite() helper. This\nremoves the need of using i_alloc_sem to avoid races with truncate which\nseems to be the wrong locking order according to lock ordering documented in\nmm/rmap.c. Also calling ext4_da_write_begin() as used by the old code seems to\nbe problematic because we can decide to flush delay-allocated blocks which\nwill acquire s_umount semaphore - again creating unpleasant lock dependency\nif not directly a deadlock.\n\nAlso add a check for frozen filesystem so that we don\u0027t busyloop in page fault\nwhen the filesystem is frozen.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a9049376ee05bf966bfe2b081b5071326856890a",
      "tree": "efb3cbfc7760537f201bb28dacbb0d39ec39f04c",
      "parents": [
        "0c1aa9a952c3608eb17bf990466f1491d1ee8b6c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jul 08 21:20:11 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:44:26 2011 -0400"
      },
      "message": "make d_splice_alias(ERR_PTR(err), dentry) \u003d ERR_PTR(err)\n\n... and simplify the living hell out of callers\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7e40145eb111a5192e6d819f764db9d6828d1abb",
      "tree": "3249952a751de12465e8d66c63328445e9242f3a",
      "parents": [
        "9c2c703929e4c41210cfa6e3f599514421bab8dc"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 19:12:17 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:21 2011 -0400"
      },
      "message": "-\u003epermission() sanitizing: don\u0027t pass flags to -\u003echeck_acl()\n\nnot used in the instances anymore.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9c2c703929e4c41210cfa6e3f599514421bab8dc",
      "tree": "2086738f22755ad18ba18ab2ee0f2b23d651da60",
      "parents": [
        "1fc0f78ca9f311c6277e2f1b7655bb4d43ceb311"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 19:06:22 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:19 2011 -0400"
      },
      "message": "-\u003epermission() sanitizing: pass MAY_NOT_BLOCK to -\u003echeck_acl()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d46203159ed376fdbe2b05aa57e58207bf27a8f9",
      "tree": "8bcbe5545066606b12d6cd250747471802520c0b",
      "parents": [
        "015861badd0db43d025bbb538f8fc62dfaf3f18d"
      ],
      "author": {
        "name": "Robin Dong",
        "email": "hao.bigrat@gmail.com",
        "time": "Sun Jul 17 23:43:42 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jul 17 23:43:42 2011 -0400"
      },
      "message": "ext4: avoid eh_entries overflow before insert extent_idx\n\nIf eh_entries is equal to (or greater than) eh_max, the operation of\ninserting new extent_idx will make number of entries overflow.\nSo check eh_entries before inserting the new extent_idx.\n\nAlthough there is no bug case according the code (function\next4_ext_insert_index is called by ext4_ext_split and ext4_ext_split\nis called only if the index block has free space), the right logic\nshould be \"lookup the capacity before insertion\".\n\nSigned-off-by: Robin Dong \u003csanbai@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "015861badd0db43d025bbb538f8fc62dfaf3f18d",
      "tree": "e1e7f6ea3f4cd41ecc030f07a4a454141dd2e158",
      "parents": [
        "c6a0371cbefade85376bbc326d18451860632dce"
      ],
      "author": {
        "name": "Robin Dong",
        "email": "hao.bigrat@gmail.com",
        "time": "Sun Jul 17 23:27:43 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jul 17 23:27:43 2011 -0400"
      },
      "message": "ext4: avoid wasted extent cache lookup if !PUNCH_OUT_EXT\n\nThis patch avoids an extraneous lookup of the extent cache\nin ext4_ext_map_blocks() when the flag\nEXT4_GET_BLOCKS_PUNCH_OUT_EXT is absent.\n\nThe existing logic was performing the lookup but not making\nuse of the result. The patch simply reverses the order of evaluation\nin the condition.\n\nSince ext4_ext_in_cache() does not initialize newex on misses, bypassing\nits invocation does not introduce any new issue in this regard.\n\nSigned-off-by: Robin Dong \u003csanbai@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nReviewed-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nReviewed-by: Eric Gouriou \u003cegouriou@google.com\u003e\n"
    },
    {
      "commit": "c6a0371cbefade85376bbc326d18451860632dce",
      "tree": "7580e70da75b508953c1c10c0636ae56188ba76e",
      "parents": [
        "f7d0d3797fac6cad24ad9f86dd9baf65c586b434"
      ],
      "author": {
        "name": "Allison Henderson",
        "email": "achender@linux.vnet.ibm.com",
        "time": "Sun Jul 17 23:21:03 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jul 17 23:21:03 2011 -0400"
      },
      "message": "ext4: remove unneeded parameter to ext4_ext_remove_space()\n\nThis patch removes the extra parameter in ext4_ext_remove_space()\nwhich is no longer needed.\n\nSigned-off-by: Allison Henderson \u003cachender@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f7d0d3797fac6cad24ad9f86dd9baf65c586b434",
      "tree": "73ae5f70c194399f9c8273d6681e7534400ffdc0",
      "parents": [
        "3eb08658431abd65c0fe6855d1860859c2d416f7"
      ],
      "author": {
        "name": "Allison Henderson",
        "email": "achender@linux.vnet.ibm.com",
        "time": "Sun Jul 17 23:17:02 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jul 17 23:17:02 2011 -0400"
      },
      "message": "ext4: punch hole optimizations: skip un-needed extent lookup\n\nThis patch optimizes the punch hole operation by skipping the\ntree walking code that is used by truncate.  Since punch hole\nis done through map blocks, the path to the extent is already\nknown in this function, so we do not need to look it up again.\n\nSigned-off-by: Allison Henderson \u003cachender@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "3eb08658431abd65c0fe6855d1860859c2d416f7",
      "tree": "5f7d21be65bcec29ac50918cadedd08a62cdf318",
      "parents": [
        "d7a1fee135771e6e5185642bdc17df19bbdbcc48"
      ],
      "author": {
        "name": "Dan Ehrenberg",
        "email": "dehrenberg@google.com",
        "time": "Sun Jul 17 21:18:51 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jul 17 21:18:51 2011 -0400"
      },
      "message": "ext4: ignore a stripe width of 1\n\nIf the stripe width was set to 1, then this patch will ignore\nthat stripe width and ext4 will act as if the stripe width\nwere 0 with respect to optimizing allocations.\n\nSigned-off-by: Dan Ehrenberg \u003cdehrenberg@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "d7a1fee135771e6e5185642bdc17df19bbdbcc48",
      "tree": "c037586b0db8324bac4ef11bcd8b3b1a631bbdf2",
      "parents": [
        "265c6a0f9290c8f470b839257dc6af3c46b24da1"
      ],
      "author": {
        "name": "Dan Ehrenberg",
        "email": "dehrenberg@google.com",
        "time": "Sun Jul 17 21:11:30 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jul 17 21:11:30 2011 -0400"
      },
      "message": "ext4: make the preallocation size be a multiple of stripe size\n\nPreviously, if a stripe width was provided, then it would be used\nas the preallocation granularity, with no santiy checking and no\nway to override this. Now, mb_prealloc_size defaults to the smallest\nmultiple of stripe size that is greater than or equal to the old\ndefault mb_prealloc_size, and this can be overridden with the sysfs\ninterface.\n\nSigned-off-by: Dan Ehrenberg \u003cdehrenberg@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "265c6a0f9290c8f470b839257dc6af3c46b24da1",
      "tree": "af9308e1ac7f6b4c195eed5950ecee6d4194c40c",
      "parents": [
        "afb86178cb9b6a7329cf8709aa210fb0a245b606"
      ],
      "author": {
        "name": "Bernd Schubert",
        "email": "bernd.schubert@itwm.fraunhofer.de",
        "time": "Sat Jul 16 19:41:23 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jul 16 19:41:23 2011 -0400"
      },
      "message": "ext4: fix compilation with -DDX_DEBUG\n\nCompilation of ext4/namei.c brought up an error and warning messages\nwhen compiled with -DDX_DEBUG\n\nSigned-off-by: Bernd Schubert \u003cbernd.schubert@itwm.fraunhofer.de\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "afb86178cb9b6a7329cf8709aa210fb0a245b606",
      "tree": "04fd42200679f1e74e0b310e716babb2f267b61b",
      "parents": [
        "caaf7a29d31da21bb8d8200d5e42d1c93d3c6e00"
      ],
      "author": {
        "name": "Lukas Czerner",
        "email": "lczerner@redhat.com",
        "time": "Mon Jul 11 18:47:04 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jul 11 18:47:04 2011 -0400"
      },
      "message": "ext4: remove unnecessary comments in ext4_orphan_add()\n\nThe comment from Al Viro about possible race in the ext4_orphan_add() is\nnot justified. There is no race possible as we always have either i_mutex\nlocked, or the inode can not be referenced from outside hence the\nJ_ASSERS should not be hit from the reason described in comment.\n\nThis commit replaces it with notion that we are holding i_mutex so it\nshould not be possible for i_nlink to be changed while waiting for\ns_orphan_lock.\n\nSigned-off-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "caaf7a29d31da21bb8d8200d5e42d1c93d3c6e00",
      "tree": "880f1cd67f0a8c1fb1dfbb1359358d930b0f611a",
      "parents": [
        "823ba01fc07751200c43e45733925a98b73eac3a"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Mon Jul 11 18:42:42 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jul 11 18:42:42 2011 -0400"
      },
      "message": "ext4: Fix a double free of sbi-\u003es_group_info in ext4_mb_init_backend\n\nIf we meet with an error in ext4_mb_add_groupinfo, we kfree\nsbi-\u003es_group_info[group \u003e\u003e EXT4_DESC_PER_BLOCK_BITS(sb)], but fail to\nreset it to NULL. So the caller ext4_mb_init_backend will try to kfree\nit again and causes a double free. So fix it by resetting it to NULL.\n\nSome typo in comments of mballoc.c are also changed.\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "823ba01fc07751200c43e45733925a98b73eac3a",
      "tree": "c84853512445f6f56aeb0fcf8f9207222e9c80c0",
      "parents": [
        "598dbdf2433cad55bd44d923f67a053871e3eabf"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Mon Jul 11 18:26:01 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jul 11 18:26:01 2011 -0400"
      },
      "message": "ext4: fix a race which could leak memory in ext4_groupinfo_create_slab()\n\nIn ext4_groupinfo_create_slab, we create ext4_groupinfo_caches within\next4_grpinfo_slab_create_mutex, but set it outside the lock, and there\ndoes exist some case that we may create it twice and causes a memory\nleak.  So set it before we call mutex_unlock.\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "598dbdf2433cad55bd44d923f67a053871e3eabf",
      "tree": "848036d87de48e271f6e23c1603100f4a75a2387",
      "parents": [
        "ffb505ff0f7b52318dea46dd139107a8371b4ad7"
      ],
      "author": {
        "name": "Robin Dong",
        "email": "sanbai@taobao.com",
        "time": "Mon Jul 11 18:24:01 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jul 11 18:24:01 2011 -0400"
      },
      "message": "ext4: avoid unneeded ext4_ext_next_leaf_block() while inserting extents\n\nOptimize ext4_ext_insert_extent() by avoiding\next4_ext_next_leaf_block() when the result is not used/needed.\n\nSigned-off-by: Robin Dong \u003csanbai@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "ffb505ff0f7b52318dea46dd139107a8371b4ad7",
      "tree": "e94a4af0c694d5ce79d512be8e8e390da43b9e66",
      "parents": [
        "22612283f7da1ce9849d9b3716010b07a0446fd9"
      ],
      "author": {
        "name": "Robin Dong",
        "email": "sanbai@taobao.com",
        "time": "Mon Jul 11 11:43:59 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jul 11 11:43:59 2011 -0400"
      },
      "message": "ext4: remove redundant goto in ext4_ext_insert_extent()\n\nIf eh-\u003eeh_entries is smaller than eh-\u003eeh_max, the routine will\ngo to the \"repeat\" and then go to \"has_space\" directlly ,\nsince argument \"depth\" and \"eh\" are not even changed.\n\nTherefore, goto \"has_space\" directly and remove redundant \"repeat\" tag.\n\nSigned-off-by: Robin Dong \u003csanbai@taobao.com\u003e\n"
    },
    {
      "commit": "22612283f7da1ce9849d9b3716010b07a0446fd9",
      "tree": "39205e0963c7a09af0914c885806772be068e2ac",
      "parents": [
        "3d56b8d2c74cc3f375ce332b3ac3519e009d79ee"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Mon Jul 11 00:04:34 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jul 11 00:04:34 2011 -0400"
      },
      "message": "ext4: Change the wrong param comment for ext4_trim_all_free\n\nat ext4_trim_all_free() comment, there is no longer an @e4b parameter,\ninstead it is @group.\n\nReported-by: Andreas Dilger \u003cadilger@dilger.ca\u003e\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "3d56b8d2c74cc3f375ce332b3ac3519e009d79ee",
      "tree": "47c13dc80779a3d8d93902897a500b056375689c",
      "parents": [
        "b3d4c2b10b68d205d3eb1b5c17dcb4649a502798"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Mon Jul 11 00:03:38 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jul 11 00:03:38 2011 -0400"
      },
      "message": "ext4: Speed up FITRIM by recording flags in ext4_group_info\n\nIn ext4, when FITRIM is called every time, we iterate all the\ngroups and do trim one by one. It is a bit time wasting if the\ngroup has been trimmed and there is no change since the last\ntrim.\n\nSo this patch adds a new flag in ext4_group_info-\u003ebb_state to\nindicate that the group has been trimmed, and it will be cleared\nif some blocks is freed(in release_blocks_on_commit). Another\ntrim_minlen is added in ext4_sb_info to record the last minlen\nwe use to trim the volume, so that if the caller provide a small\none, we will go on the trim regardless of the bb_state.\n\nA simple test with my intel x25m ssd:\ndf -h shows:\n/dev/sdb1              40G   21G   17G  56% /mnt/ext4\nBlock size:               4096\n\nrun the FITRIM with the following parameter:\nrange.start \u003d 0;\nrange.len \u003d UINT64_MAX;\nrange.minlen \u003d 1048576;\n\nwithout the patch:\n[root@boyu-tm linux-2.6]# time ./ftrim /mnt/ext4/a\nreal\t0m5.505s\nuser\t0m0.000s\nsys\t0m1.224s\n[root@boyu-tm linux-2.6]# time ./ftrim /mnt/ext4/a\nreal\t0m5.359s\nuser\t0m0.000s\nsys\t0m1.178s\n[root@boyu-tm linux-2.6]# time ./ftrim /mnt/ext4/a\nreal\t0m5.228s\nuser\t0m0.000s\nsys\t0m1.151s\n\nwith the patch:\n[root@boyu-tm linux-2.6]# time ./ftrim /mnt/ext4/a\nreal\t0m5.625s\nuser\t0m0.000s\nsys\t0m1.269s\n[root@boyu-tm linux-2.6]# time ./ftrim /mnt/ext4/a\nreal\t0m0.002s\nuser\t0m0.000s\nsys\t0m0.001s\n[root@boyu-tm linux-2.6]# time ./ftrim /mnt/ext4/a\nreal\t0m0.002s\nuser\t0m0.000s\nsys\t0m0.001s\n\nA big improvement for the 2nd and 3rd run.\n\nEven after I delete some big image files, it is still much\nfaster than iterating the whole disk.\n\n[root@boyu-tm test]# time ./ftrim /mnt/ext4/a\nreal\t0m1.217s\nuser\t0m0.000s\nsys\t0m0.196s\n\nCc: Lukas Czerner \u003clczerner@redhat.com\u003e\nReviewed-by: Andreas Dilger \u003cadilger.kernel@dilger.ca\u003e\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "b3d4c2b10b68d205d3eb1b5c17dcb4649a502798",
      "tree": "bd03e3dc922f62b019d5b1b5a0eb089f36e0502e",
      "parents": [
        "169ddc3ec83b5f732e51d975befb191d50795844"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Mon Jul 11 00:01:52 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jul 11 00:01:52 2011 -0400"
      },
      "message": "ext4: Add new ext4 trim tracepoints\n\nAdd ext4_trim_extent and ext4_trim_all_free.\n\nReviewed-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "169ddc3ec83b5f732e51d975befb191d50795844",
      "tree": "a7142c8996bb5428f883429c990ece5879eab8b4",
      "parents": [
        "22f10457432387615fa1ae6e0375d9cacc50819b"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Mon Jul 11 00:00:07 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jul 11 00:00:07 2011 -0400"
      },
      "message": "ext4: speed up group trim with the right free block count\n\nWhen we trim some free blocks in a group of ext4, we need to \ncalculate the free blocks properly and check whether there are\nenough freed blocks left for us to trim. Current solution will\nonly calculate free spaces if they are large for a trim which\nisn\u0027t appropriate.\n\nLet us see a small example:\na group has 1.5M free which are 300k, 300k, 300k, 300k, 300k.\nAnd minblocks is 1M.  With current solution, we have to iterate\nthe whole group since these 300k will never be subtracted from\n1.5M.  But actually we should exit after we find the first 2\nfree spaces since the left 3 chunks only sum up to 900K if we\nsubtract the first 600K although they can\u0027t be trimed.\n\nReviewed-by: Andreas Dilger \u003cadilger@dilger.ca\u003e\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "22f10457432387615fa1ae6e0375d9cacc50819b",
      "tree": "9977fe8b44a0467bd9f1d942951f0382773af744",
      "parents": [
        "12706394bcaa48e3d5e19c97d7b4e5683ebb12fb"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Sun Jul 10 23:52:37 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jul 10 23:52:37 2011 -0400"
      },
      "message": "ext4: fix trim length underflow with small trim length\n\nIn 0f0a25b, we adjust \u0027len\u0027 with s_first_data_block - start, but\nit could underflow in case blocksize\u003d1K, fstrim_range.len\u003d512 and\nfstrim_range.start \u003d 0. In this case, when we run the code:\nlen -\u003d first_data_blk - start; len will be underflow to -1ULL.\nIn the end, although we are safe that last_group check later will limit\nthe trim to the whole volume, but that isn\u0027t what the user really want.\n\nSo this patch fix it. It also adds the check for \u0027start\u0027 like ext3 so that\nwe can break immediately if the start is invalid.\n\nCc: Lukas Czerner \u003clczerner@redhat.com\u003e\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "12706394bcaa48e3d5e19c97d7b4e5683ebb12fb",
      "tree": "d2a9effccf0162de6b783cf40fadd0f27c1bd22e",
      "parents": [
        "4862fd6047ed02e2726667c54d35f538eecc56aa"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jul 10 22:37:50 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jul 10 22:37:50 2011 -0400"
      },
      "message": "ext4: add tracepoint for ext4_journal_start\n\nThis will help debug who is responsible for starting a jbd2 transaction.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "575a1d4bdfa2ea9fc10733013136145b497e1be0",
      "tree": "2491bacefb28e5990bc97f3f9598ee8e9b21e434",
      "parents": [
        "7132de744ba76930d13033061018ddd7e3e8cd91"
      ],
      "author": {
        "name": "Jiaying Zhang",
        "email": "jiayingz@google.com",
        "time": "Sun Jul 10 20:07:25 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jul 10 20:07:25 2011 -0400"
      },
      "message": "ext4: free allocated and pre-allocated blocks when check_eofblocks_fl fails\n\nUpon corrupted inode or disk failures, we may fail after we already\nallocate some blocks from the inode or take some blocks from the\ninode\u0027s preallocation list, but before we successfully insert the\ncorresponding extent to the extent tree. In this case, we should free\nany allocated blocks and discard the inode\u0027s preallocated blocks\nbecause the entries in the inode\u0027s preallocation list may be in an\ninconsistent state.\n\nSigned-off-by: Jiaying Zhang \u003cjiayingz@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "7132de744ba76930d13033061018ddd7e3e8cd91",
      "tree": "1da773f7293e056e4849dc590dac35854662f666",
      "parents": [
        "275d3ba6b40d0f098693b9089c6fee9bd4e55d74"
      ],
      "author": {
        "name": "Maxim Patlasov",
        "email": "maxim.patlasov@gmail.com",
        "time": "Sun Jul 10 19:37:48 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jul 10 19:37:48 2011 -0400"
      },
      "message": "ext4: fix i_blocks/quota accounting when extent insertion fails\n\nThe current implementation of ext4_free_blocks() always calls\ndquot_free_block This looks quite sensible in the most cases: blocks\nto be freed are associated with inode and were accounted in quota and\ni_blocks some time ago.\n\nHowever, there is a case when blocks to free were not accounted by the\ntime calling ext4_free_blocks() yet:\n\n1. delalloc is on, write_begin pre-allocated some space in quota\n2. write-back happens, ext4 allocates some blocks in ext4_ext_map_blocks()\n3. then ext4_ext_map_blocks() gets an error (e.g.  ENOSPC) from\n   ext4_ext_insert_extent() and calls ext4_free_blocks().\n\nIn this scenario, ext4_free_blocks() calls dquot_free_block() who, in\nturn, decrements i_blocks for blocks which were not accounted yet (due\nto delalloc) After clean umount, e2fsck reports something like:\n\n\u003e Inode 21, i_blocks is 5080, should be 5128.  Fix\u003cy\u003e?\nbecause i_blocks was erroneously decremented as explained above.\n\nThe patch fixes the problem by passing the new flag\nEXT4_FREE_BLOCKS_NO_QUOT_UPDATE to ext4_free_blocks(), to request\nthat the dquot_free_block() call be skipped.\n\nSigned-off-by: Maxim Patlasov \u003cmaxim.patlasov@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "275d3ba6b40d0f098693b9089c6fee9bd4e55d74",
      "tree": "0f78d9bc4fe10424a692370655d27ee6f509a470",
      "parents": [
        "9331b6261058eb85ae7c57ab8ac279e7fdaa9f04"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Jun 29 21:44:45 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Jun 29 21:44:45 2011 -0400"
      },
      "message": "ext4: remove loop around bio_alloc()\n\nThese days, bio_alloc() is guaranteed to never fail (as long as nvecs\nis less than BIO_MAX_PAGES), so we don\u0027t need the loop around the\nstruct bio allocation.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "9331b6261058eb85ae7c57ab8ac279e7fdaa9f04",
      "tree": "3be0d02e7e917ec84cca7260dacff754da579156",
      "parents": [
        "f86186b44b4164600cce03d0d93ad48ec21fa429"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Tue Jun 28 10:19:05 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jun 28 10:19:05 2011 -0400"
      },
      "message": "ext4: quiet \u0027unused variables\u0027 compile warnings\n\nUnused variables was deleted.\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f86186b44b4164600cce03d0d93ad48ec21fa429",
      "tree": "48aafabbbe46d22de84e4e9b3ebf7c5b35fd6d1e",
      "parents": [
        "dae1e52cb1267bf8f52e5e47a80fab566d7e8aa4"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Tue Jun 28 10:01:31 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jun 28 10:01:31 2011 -0400"
      },
      "message": "ext4: refactor duplicated block placement code\n\nI found that ext4_ext_find_goal() and ext4_find_near()\nshare the same code for returning a coloured start block\nbased on i_block_group.\n\nWe can refactor this into a common function so that they\ndon\u0027t diverge in the future.\n\nThanks to adilger for suggesting the new function name.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "dae1e52cb1267bf8f52e5e47a80fab566d7e8aa4",
      "tree": "2537e9f8f138e4935f88e605244174c9b2400bf4",
      "parents": [
        "9f125d641beb898f5bf2fe69583192c18043517a"
      ],
      "author": {
        "name": "Amir Goldstein",
        "email": "amir73il@users.sf.net",
        "time": "Mon Jun 27 19:40:50 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 27 19:40:50 2011 -0400"
      },
      "message": "ext4: move ext4_ind_* functions from inode.c to indirect.c\n\nThis patch moves functions from inode.c to indirect.c.\nThe moved functions are ext4_ind_* functions and their helpers.\nFunctions called from inode.c are declared extern.\n\nSigned-off-by: Amir Goldstein \u003camir73il@users.sf.net\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "9f125d641beb898f5bf2fe69583192c18043517a",
      "tree": "02259a4f538fbca0cbd6a9f0c4a9f96c82d738d6",
      "parents": [
        "1f7d1e77419050831a905353683807fa69a26625"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 27 19:16:04 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 27 19:16:04 2011 -0400"
      },
      "message": "ext4: move common truncate functions to header file\n\nMove two functions that will be needed by the indirect functions to be\nmoved to indirect.c as well as inode.c to truncate.h as inline\nfunctions, so that we can avoid having duplicate copies of the\nfunction (which can be a maintenance problem) without having to expose\nthem as globally functions.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "1f7d1e77419050831a905353683807fa69a26625",
      "tree": "0f32626160b1ecab1e6067ff0e94746c3da068c4",
      "parents": [
        "8bb2b247124ba6093455d4aef26743b1bef27bc5"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 27 19:16:02 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 27 19:16:02 2011 -0400"
      },
      "message": "ext4: move __ext4_check_blockref to block_validity.c\n\nIn preparation for moving the indirect functions to a separate file,\nmove __ext4_check_blockref() to block_validity.c and rename it to\next4_check_blockref() which is exported as globally visible function.\n\nAlso, rename the cpp macro ext4_check_inode_blockref() to\next4_ind_check_inode(), to make it clear that it is only valid for use\nwith non-extent mapped inodes.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "8bb2b247124ba6093455d4aef26743b1bef27bc5",
      "tree": "cb9dd91f6616b61bd71286e2f674eda8cad0f476",
      "parents": [
        "ff9893dc8aa622a4f122293a6861566a284edea5"
      ],
      "author": {
        "name": "Amir Goldstein",
        "email": "amir73il@users.sf.net",
        "time": "Mon Jun 27 17:10:28 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 27 17:10:28 2011 -0400"
      },
      "message": "ext4: rename ext4_indirect_* funcs to ext4_ind_*\n\nWe are going to move all ext4_ind_* functions to indirect.c.\nBefore we do that, let\u0027s rename 2 functions called ext4_indirect_*\nto ext4_ind_*, to keep to the naming convention.\n\nSigned-off-by: Amir Goldstein \u003camir73il@users.sf.net\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "ff9893dc8aa622a4f122293a6861566a284edea5",
      "tree": "ca7d798360c32379fb4d3d0913d349ac79f55c6d",
      "parents": [
        "ed7a7e16724a4123fce1fc0ff1f5131a0596f189"
      ],
      "author": {
        "name": "Amir Goldstein",
        "email": "amir73il@users.sf.net",
        "time": "Mon Jun 27 16:36:31 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 27 16:36:31 2011 -0400"
      },
      "message": "ext4: split ext4_ind_truncate from ext4_truncate\n\nWe are about to move all indirect inode functions to a new file.\nBefore we do that, let\u0027s split ext4_ind_truncate() out of ext4_truncate()\nleaving only generic code in the latter, so we will be able to move\next4_ind_truncate() to the new file.\n\nSigned-off-by: Amir Goldstein \u003camir73il@users.sf.net\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "ed7a7e16724a4123fce1fc0ff1f5131a0596f189",
      "tree": "3691bbb0d11e56ee94c659361a5c5b1e4edc5c9f",
      "parents": [
        "d3ad8434aa83ef7c88bc91edcfe012cdcbab9f3e"
      ],
      "author": {
        "name": "Robin Dong",
        "email": "hao.bigrat@gmail.com",
        "time": "Mon Jun 27 15:35:53 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 27 15:35:53 2011 -0400"
      },
      "message": "ext4: fix incorrect error msg in ext4_ext_insert_index\n\nIn function ext4_ext_insert_index when eh_entries of curp is\nbigger than eh_max, error messages will be printed out, but the content\nis about logical and ei_block, that\u0027s incorret.\n\nSigned-off-by: Robin Dong \u003csanbai@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "6e6938b6d3130305a5960c86b1a9b21e58cf6144",
      "tree": "de5546e8390ce31cd31412d2ef78ce732a42191c",
      "parents": [
        "59c5f46fbe01a00eedf54a23789634438bb80603"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sun Jun 06 10:38:15 2010 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Jun 08 08:25:20 2011 +0800"
      },
      "message": "writeback: introduce .tagged_writepages for the WB_SYNC_NONE sync stage\n\nsync(2) is performed in two stages: the WB_SYNC_NONE sync and the\nWB_SYNC_ALL sync. Identify the first stage with .tagged_writepages and\ndo livelock prevention for it, too.\n\nJan\u0027s commit f446daaea9 (\"mm: implement writeback livelock avoidance\nusing page tagging\") is a partial fix in that it only fixed the\nWB_SYNC_ALL phase livelock.\n\nAlthough ext4 is tested to no longer livelock with commit f446daaea9,\nit may due to some \"redirty_tail() after pages_skipped\" effect which\nis by no means a guarantee for _all_ the file systems.\n\nNote that writeback_inodes_sb() is called by not only sync(), they are\ntreated the same because the other callers also need livelock prevention.\n\nImpact:  It changes the order in which pages/inodes are synced to disk.\nNow in the WB_SYNC_NONE stage, it won\u0027t proceed to write the next inode\nuntil finished with the current inode.\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nCC: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "a9c667f8f0656631ee5438baaf21bf30d5f67375",
      "tree": "eb92465fcb50126802b66fb509ed51a1fe966ad5",
      "parents": [
        "c03f8aa9abdd517477c2021ea1251939b4da49e6"
      ],
      "author": {
        "name": "Lukas Czerner",
        "email": "lczerner@redhat.com",
        "time": "Mon Jun 06 09:51:52 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 06 09:51:52 2011 -0400"
      },
      "message": "ext4: fixed tracepoints cleanup\n\nWhile creating fixed tracepoints for ext3, basically by porting them\nfrom ext4, I found a lot of useless retyping, wrong type usage, useless\nvariable passing and other inconsistencies in the ext4 fixed tracepoint\ncode.\n\nThis patch cleans the fixed tracepoint code for ext4 and also simplify\nsome of them.\n\nSigned-off-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c03f8aa9abdd517477c2021ea1251939b4da49e6",
      "tree": "e68aabc965801c85fb2b2aa1cfd42ad32bcd0b1f",
      "parents": [
        "f17722f917b2f21497deb6edc62fb1683daa08e6"
      ],
      "author": {
        "name": "Lukas Czerner",
        "email": "lczerner@redhat.com",
        "time": "Mon Jun 06 00:06:52 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 06 00:06:52 2011 -0400"
      },
      "message": "ext4: use FIEMAP_EXTENT_LAST flag for last extent in fiemap \n\nCurrently we are not marking the extent as the last one\n(FIEMAP_EXTENT_LAST) if there is a hole at the end of the file. This is\nbecause we just do not check for it right now and continue searching for\nnext extent. But at the point we hit the hole at the end of the file, it\nis too late.\n\nThis commit adds check for the allocated block in subsequent extent and\nif there is no more extents (block \u003d EXT_MAX_BLOCKS) just flag the\ncurrent one as the last one.\n\nThis behaviour has been spotted unintentionally by 252 xfstest, when the\ntest hangs out, because of wrong loop condition. However on other\nfilesystems (like xfs) it will exit anyway, because we notice the last\nextent flag and exit.\n\nWith this patch xfstest 252 does not hang anymore, ext4 fiemap\nimplementation still reports bad extent type in some cases, however\nthis seems to be different issue.\n\nSigned-off-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f17722f917b2f21497deb6edc62fb1683daa08e6",
      "tree": "10509e066829e685b25d74239f490345d28603d2",
      "parents": [
        "5def1360252b974faeb438775c19c14338bc1903"
      ],
      "author": {
        "name": "Lukas Czerner",
        "email": "lczerner@redhat.com",
        "time": "Mon Jun 06 00:05:17 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 06 00:05:17 2011 -0400"
      },
      "message": "ext4: Fix max file size and logical block counting of extent format file\n\nKazuya Mio reported that he was able to hit BUG_ON(next \u003d\u003d lblock)\nin ext4_ext_put_gap_in_cache() while creating a sparse file in extent\nformat and fill the tail of file up to its end. We will hit the BUG_ON\nwhen we write the last block (2^32-1) into the sparse file.\n\nThe root cause of the problem lies in the fact that we specifically set\ns_maxbytes so that block at s_maxbytes fit into on-disk extent format,\nwhich is 32 bit long. However, we are not storing start and end block\nnumber, but rather start block number and length in blocks. It means\nthat in order to cover extent from 0 to EXT_MAX_BLOCK we need\nEXT_MAX_BLOCK+1 to fit into len (because we counting block 0 as well) -\nand it does not.\n\nThe only way to fix it without changing the meaning of the struct\next4_extent members is, as Kazuya Mio suggested, to lower s_maxbytes\nby one fs block so we can cover the whole extent we can get by the\non-disk extent format.\n\nAlso in many places EXT_MAX_BLOCK is used as length instead of maximum\nlogical block number as the name suggests, it is all a bit messy. So\nthis commit renames it to EXT_MAX_BLOCKS and change its usage in some\nplaces to actually be maximum number of blocks in the extent.\n\nThe bug which this commit fixes can be reproduced as follows:\n\n dd if\u003d/dev/zero of\u003d/mnt/mp1/file bs\u003d\u003cblocksize\u003e count\u003d1 seek\u003d$((2**32-2))\n sync\n dd if\u003d/dev/zero of\u003d/mnt/mp1/file bs\u003d\u003cblocksize\u003e count\u003d1 seek\u003d$((2**32-1))\n\nReported-by: Kazuya Mio \u003ck-mio@sx.jp.nec.com\u003e\nSigned-off-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "5def1360252b974faeb438775c19c14338bc1903",
      "tree": "d2b95eefc7920a01565654761c4b587503992f15",
      "parents": [
        "55922c9d1b84b89cb946c777fddccb3247e7df2c"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Sun Jun 05 23:26:40 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jun 05 23:26:40 2011 -0400"
      },
      "message": "ext4: correct comments for ext4_free_blocks()\n\nmetadata is not parameter of ext4_free_blocks() any more.\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "aa38572954ade525817fe88c54faebf85e5a61c0",
      "tree": "ef398ec06c97134592f62a49c99f3f80041b427c",
      "parents": [
        "d6e9bd256c88ce5f4b668249e363a74f51393daa"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri May 27 06:53:02 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri May 27 07:04:40 2011 -0400"
      },
      "message": "fs: pass exact type of data dirties to -\u003edirty_inode\n\nTell the filesystem if we just updated timestamp (I_DIRTY_SYNC) or\nanything else, so that the filesystem can track internally if it\nneeds to push out a transaction for fdatasync or not.\n\nThis is just the prototype change with no user for it yet.  I plan\nto push large XFS changes for the next merge window, and getting\nthis trivial infrastructure in this window would help a lot to avoid\ntree interdependencies.\n\nAlso remove incorrect comments that -\u003edirty_inode can\u0027t block.  That\nhas been changed a long time ago, and many implementations rely on it.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f8d613e2a665bf1be9628a3c3f9bafe7599b32c0",
      "tree": "98d4da8d0e1a5fb1d9064626b4b96d95ccf26375",
      "parents": [
        "8a0599dd2471f2a2e409498c08a0ab339057ad06",
        "5bc20fc59706214d9591c11e1938a629d3538c12"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 26 10:50:56 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 26 10:50:56 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/djm/tmem\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/djm/tmem:\n  xen: cleancache shim to Xen Transcendent Memory\n  ocfs2: add cleancache support\n  ext4: add cleancache support\n  btrfs: add cleancache support\n  ext3: add cleancache support\n  mm/fs: add hooks to support cleancache\n  mm: cleancache core ops functions and config\n  fs: add field to superblock to support cleancache\n  mm/fs: cleancache documentation\n\nFix up trivial conflict in fs/btrfs/extent_io.c due to includes\n"
    },
    {
      "commit": "7abc52c2ed169c65044d3a199879c8438ad82322",
      "tree": "a8b0ef1291c95c444f615ced2217a1e6ce44e81c",
      "parents": [
        "90a887c9a2e25bcb1fc658fad59dfbc6fb792734"
      ],
      "author": {
        "name": "Dan Magenheimer",
        "email": "dan.magenheimer@oracle.com",
        "time": "Thu May 26 10:02:03 2011 -0600"
      },
      "committer": {
        "name": "Dan Magenheimer",
        "email": "dan.magenheimer@oracle.com",
        "time": "Thu May 26 10:02:03 2011 -0600"
      },
      "message": "ext4: add cleancache support\n\nThis seventh patch of eight in this cleancache series \"opts-in\"\ncleancache for ext4.  Filesystems must explicitly enable cleancache\nby calling cleancache_init_fs anytime an instance of the filesystem\nis mounted. For ext4, all other cleancache hooks are in\nthe VFS layer including the matching cleancache_flush_fs\nhook which must be called on unmount.\n\nDetails and a FAQ can be found in Documentation/vm/cleancache.txt\n\n[v6-v8: no changes]\n[v5: jeremy@goop.org: simplify init hook and any future fs init changes]\nSigned-off-by: Dan Magenheimer \u003cdan.magenheimer@oracle.com\u003e\nReviewed-by: Jeremy Fitzhardinge \u003cjeremy@goop.org\u003e\nReviewed-by: Konrad Rzeszutek Wilk \u003ckonrad.wilk@oracle.com\u003e\nAcked-by: Andreas Dilger \u003cadilger@sun.com\u003e\nCc: Ted Ts\u0027o \u003ctytso@mit.edu\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Al Viro \u003cviro@ZenIV.linux.org.uk\u003e\nCc: Matthew Wilcox \u003cmatthew@wil.cx\u003e\nCc: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Rik Van Riel \u003criel@redhat.com\u003e\nCc: Jan Beulich \u003cJBeulich@novell.com\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nCc: Mark Fasheh \u003cmfasheh@suse.com\u003e\nCc: Joel Becker \u003cjoel.becker@oracle.com\u003e\nCc: Nitin Gupta \u003cngupta@vflare.org\u003e\n"
    },
    {
      "commit": "1b16da77f90328661fc7e556ad591f9ee6b7ef6a",
      "tree": "b86caf7fd1c4e0f205a69d8bb7ca1ebb883cab63",
      "parents": [
        "ae24f28d39610a4810c78185cf599a771cf6ee1f"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Wed May 25 17:41:48 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed May 25 17:41:48 2011 -0400"
      },
      "message": "ext4: teach ext4_ext_split to calculate extents efficiently\n\nMake ext4_ext_split() get extents to be moved by calculating in a statement\ninstead of counting in a loop.\n\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "ae24f28d39610a4810c78185cf599a771cf6ee1f",
      "tree": "a4969875b6345f6ee3eb8bdf3a0af823cab33e3f",
      "parents": [
        "556b27abf73833923d5cd4be80006292e1b31662"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Wed May 25 17:39:48 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed May 25 17:39:48 2011 -0400"
      },
      "message": "ext4: Convert ext4 to new truncate calling convention\n\n\nTrivial conversion.  Fixup one error handling case calling vmtruncate()\nand remove -\u003etruncate callback. We also fix a bug that IS_IMMUTABLE and\nIS_APPEND files could not be truncated during failed writes. In fact, the\ntest can be completely removed as upper layers do necessary permission\nchecks for truncate in do_sys_[f]truncate() and may_open() anyway.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "556b27abf73833923d5cd4be80006292e1b31662",
      "tree": "588fa7c3db66afb545921cdfc894f0a41e66dc49",
      "parents": [
        "a4bb6b64e39abc0e41ca077725f2a72c868e7622"
      ],
      "author": {
        "name": "Vivek Haldar",
        "email": "haldar@google.com",
        "time": "Wed May 25 07:41:54 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed May 25 07:41:54 2011 -0400"
      },
      "message": "ext4: do not normalize block requests from fallocate()\n\nCurrently, an fallocate request of size slightly larger than a power of\n2 is turned into two block requests, each a power of 2, with the extra\nblocks pre-allocated for future use. When an application calls\nfallocate, it already has an idea about how large the file may grow so\nthere is usually little benefit to reserve extra blocks on the\npreallocation list. This reduces disk fragmentation.\n\nTested: fsstress. Also verified manually that fallocat\u0027ed files are\ncontiguously laid out with this change (whereas without it they begin at\npower-of-2 boundaries, leaving blocks in between). CPU usage of\nfallocate is not appreciably higher.  In a tight fallocate loop, CPU\nusage hovers between 5%-8% with this change, and 5%-7% without it.\n\nUsing a simulated file system aging program which the file system to\n70%, the percentage of free extents larger than 8MB (as measured by\ne2freefrag) increased from 38.8% without this change, to 69.4% with\nthis change.\n\nSigned-off-by: Vivek Haldar \u003chaldar@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a4bb6b64e39abc0e41ca077725f2a72c868e7622",
      "tree": "0d911caa13d445d64cce5ea37f424bf066731ea6",
      "parents": [
        "e861304b8ed83fe43e36d46794d72641c82d4636"
      ],
      "author": {
        "name": "Allison Henderson",
        "email": "achender@linux.vnet.ibm.com",
        "time": "Wed May 25 07:41:50 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed May 25 07:41:50 2011 -0400"
      },
      "message": "ext4: enable \"punch hole\" functionality\n\nThis patch adds new routines: \"ext4_punch_hole\" \"ext4_ext_punch_hole\"\nand \"ext4_ext_check_cache\"\n\nfallocate has been modified to call ext4_punch_hole when the punch hole\nflag is passed.  At the moment, we only support punching holes in\nextents, so this routine is pretty much a wrapper for the ext4_ext_punch_hole\nroutine.\n\nThe ext4_ext_punch_hole routine first completes all outstanding writes\nwith the associated pages, and then releases them.  The unblock\naligned data is zeroed, and all blocks in between are punched out.\n\nThe ext4_ext_check_cache routine is very similar to ext4_ext_in_cache\nexcept it accepts a ext4_ext_cache parameter instead of a ext4_extent\nparameter.  This routine is used by ext4_ext_punch_hole to check and\nsee if a block in a hole that has been cached.  The ext4_ext_cache\nparameter is necessary because the members ext4_extent structure are\nnot large enough to hold a 32 bit value.  The existing\next4_ext_in_cache routine has become a wrapper to this new function.\n\n[ext4 punch hole patch series 5/5 v7] \n\nSigned-off-by: Allison Henderson \u003cachender@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nReviewed-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\n"
    },
    {
      "commit": "e861304b8ed83fe43e36d46794d72641c82d4636",
      "tree": "14a9c42ee5b6a531bc3202063bcd9c413e30c17e",
      "parents": [
        "d583fb87a3ff0ca50befd2f73f7a67fade1c8c56"
      ],
      "author": {
        "name": "Allison Henderson",
        "email": "achender@linux.vnet.ibm.com",
        "time": "Wed May 25 07:41:46 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed May 25 07:41:46 2011 -0400"
      },
      "message": "ext4: add \"punch hole\" flag to ext4_map_blocks()\n\nThis patch adds a new flag to ext4_map_blocks() that specifies the\ngiven range of blocks should be punched out.  Extents are first\nconverted to uninitialized extents before they are punched\nout. Because punching a hole may require that the extent be split, it\nis possible that the splitting may need more blocks than are\navailable.  To deal with this, use of reserved blocks are enabled to\nallow the split to proceed.\n\nThe routine then returns the number of blocks successfully\npunched out.\n\n[ext4 punch hole patch series 4/5 v7]\n\nSigned-off-by: Allison Henderson \u003cachender@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nReviewed-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\n"
    },
    {
      "commit": "d583fb87a3ff0ca50befd2f73f7a67fade1c8c56",
      "tree": "4e8cd6c05390d5355906d5657b87d82fcd4ea750",
      "parents": [
        "308488518dfcbe3be250085cd582f5b0c1ce72a9"
      ],
      "author": {
        "name": "Allison Henderson",
        "email": "achender@linux.vnet.ibm.com",
        "time": "Wed May 25 07:41:43 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed May 25 07:41:43 2011 -0400"
      },
      "message": "ext4: punch out extents\n\nThis patch modifies the truncate routines to support hole punching\nBelow is a brief summary of the patches changes:\n\n- Added end param to ext_ext4_rm_leaf\n        This function has been modified to accept an end parameter\n        which enables it to punch holes in leafs instead of just\n        truncating them.\n\n- Implemented the \"remove head\" case in the ext_remove_blocks routine\n        This routine is used by ext_ext4_rm_leaf to remove the tail\n        of an extent during a truncate.  The new ext_ext4_rm_leaf\n        routine will now also use it to remove the head of an extent in the\n        case that the hole covers a region of blocks at the beginning\n        of an extent.\n\n- Added \"end\" param to ext4_ext_remove_space routine\n        This function has been modified to accept a stop parameter, which\n        is passed through to ext4_ext_rm_leaf.\n\n[ext4 punch hole patch series 3/5 v6] \n\nSigned-off-by: Allison Henderson \u003cachender@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "308488518dfcbe3be250085cd582f5b0c1ce72a9",
      "tree": "4696b50debf9794f2cbb966cccbedadb93dc996a",
      "parents": [
        "55f020db66ce187fb8c8e4002a94b0eb714da450"
      ],
      "author": {
        "name": "Allison Henderson",
        "email": "achender@linux.vnet.ibm.com",
        "time": "Wed May 25 07:41:32 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed May 25 07:41:32 2011 -0400"
      },
      "message": "ext4: add new function ext4_block_zero_page_range()\n\nThis patch modifies the existing ext4_block_truncate_page() function\nwhich was used by the truncate code path, and which zeroes out block\nunaligned data, by adding a new length parameter, and renames it to\next4_block_zero_page_rage().  This function can now be used to zero out the\nhead of a block, the tail of a block, or the middle\nof a block.\n\nThe ext4_block_truncate_page() function is now a wrapper to\next4_block_zero_page_range().\n\n[ext4 punch hole patch series 2/5 v7] \n\nSigned-off-by: Allison Henderson \u003cachender@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nReviewed-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\n"
    },
    {
      "commit": "55f020db66ce187fb8c8e4002a94b0eb714da450",
      "tree": "e98214511542f57fa93074be12e27c4819520333",
      "parents": [
        "ae81230686282af745ebb7a74c0332349cb9131a"
      ],
      "author": {
        "name": "Allison Henderson",
        "email": "achender@linux.vnet.ibm.com",
        "time": "Wed May 25 07:41:26 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed May 25 07:41:26 2011 -0400"
      },
      "message": "ext4: add flag to ext4_has_free_blocks\n\nThis patch adds an allocation request flag to the ext4_has_free_blocks\nfunction which enables the use of reserved blocks.  This will allow a\npunch hole to proceed even if the disk is full.  Punching a hole may\nrequire additional blocks to first split the extents.\n\nBecause ext4_has_free_blocks is a low level function, the flag needs\nto be passed down through several functions listed below:\n\next4_ext_insert_extent\next4_ext_create_new_leaf\next4_ext_grow_indepth\next4_ext_split\next4_ext_new_meta_block\next4_mb_new_blocks\next4_claim_free_blocks\next4_has_free_blocks\n\n[ext4 punch hole patch series 1/5 v7]\n\nSigned-off-by: Allison Henderson \u003cachender@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nReviewed-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\n"
    },
    {
      "commit": "ae81230686282af745ebb7a74c0332349cb9131a",
      "tree": "bd293ae7a338e582991ecb2930397fb7b010c6cc",
      "parents": [
        "c5e06d101aaf72f1f2192a661414459775e9bd74"
      ],
      "author": {
        "name": "Aditya Kali",
        "email": "adityakali@google.com",
        "time": "Tue May 24 19:00:39 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 24 19:00:39 2011 -0400"
      },
      "message": "ext4: reserve inodes and feature code for \u0027quota\u0027 feature\n\nI am working on patch to add quota as a built-in feature for ext4\nfilesystem. The implementation is based on the design given at\nhttps://ext4.wiki.kernel.org/index.php/Design_For_1st_Class_Quota_in_Ext4.\nThis patch reserves the inode numbers 3 and 4 for quota purposes and\nalso reserves EXT4_FEATURE_RO_COMPAT_QUOTA feature code.\n\nSigned-off-by: Aditya Kali \u003cadityakali@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c5e06d101aaf72f1f2192a661414459775e9bd74",
      "tree": "96d05d41be2bfea6d51be915ce196f033a5d9bf3",
      "parents": [
        "d02a9391f79cab65cde74cd9e8ccd2290a565229"
      ],
      "author": {
        "name": "Johann Lombardi",
        "email": "johann@whamcloud.com",
        "time": "Tue May 24 18:31:25 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 24 18:31:25 2011 -0400"
      },
      "message": "ext4: add support for multiple mount protection\n\nPrevent an ext4 filesystem from being mounted multiple times.\nA sequence number is stored on disk and is periodically updated (every 5\nseconds by default) by a mounted filesystem.\nAt mount time, we now wait for s_mmp_update_interval seconds to make sure\nthat the MMP sequence does not change.\nIn case of failure, the nodename, bdevname and the time at which the MMP\nblock was last updated is displayed.\n\nSigned-off-by: Andreas Dilger \u003cadilger@whamcloud.com\u003e\nSigned-off-by: Johann Lombardi \u003cjohann@whamcloud.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "d02a9391f79cab65cde74cd9e8ccd2290a565229",
      "tree": "a70993ce201661a360ade69c3a5925b653e9c542",
      "parents": [
        "28739eea9cd42598b632972f5cc64a458c5d40b3"
      ],
      "author": {
        "name": "Kazuya Mio",
        "email": "k-mio@sx.jp.nec.com",
        "time": "Tue May 24 18:30:07 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 24 18:30:07 2011 -0400"
      },
      "message": "ext4: ensure f_bfree returned by ext4_statfs() is non-negative\n\nI found the issue that the number of free blocks went negative.\n# stat -f /mnt/mp1/\n  File: \"/mnt/mp1/\"\n    ID: e175ccb83a872efe Namelen: 255     Type: ext2/ext3\nBlock size: 4096       Fundamental block size: 4096\nBlocks: Total: 258022     Free: -15        Available: -13122\nInodes: Total: 65536      Free: 63029\n\nf_bfree in struct statfs will go negative when the filesystem has\nfew free blocks. Because the number of dirty blocks is bigger than\nthe number of free blocks in the following two cases.\n\nCASE 1:\next4_da_writepages\n  mpage_da_map_and_submit\n    ext4_map_blocks\n      ext4_ext_map_blocks\n        ext4_mb_new_blocks\n          ext4_mb_diskspace_used\n            percpu_counter_sub(\u0026sbi-\u003es_freeblocks_counter, ac-\u003eac_b_ex.fe_len);\n        \u003c--- interrupt statfs systemcall ---\u003e\n        ext4_da_update_reserve_space\n            percpu_counter_sub(\u0026sbi-\u003es_dirtyblocks_counter,\n                            used + ei-\u003ei_allocated_meta_blocks);\n\nCASE 2:\next4_write_begin\n  __block_write_begin\n    ext4_map_blocks\n      ext4_ext_map_blocks\n        ext4_mb_new_blocks\n          ext4_mb_diskspace_used\n            percpu_counter_sub(\u0026sbi-\u003es_freeblocks_counter, ac-\u003eac_b_ex.fe_len);\n            \u003c--- interrupt statfs systemcall ---\u003e\n            percpu_counter_sub(\u0026sbi-\u003es_dirtyblocks_counter, reserv_blks);\n\nTo avoid the issue, this patch ensures that f_bfree is non-negative.\n\nSigned-off-by: Kazuya Mio \u003ck-mio@sx.jp.nec.com\u003e\n"
    },
    {
      "commit": "28739eea9cd42598b632972f5cc64a458c5d40b3",
      "tree": "10d4db959544884e6612ea329920a2cf73a6f0b6",
      "parents": [
        "78944086663e6c1b03f3d60bf7610128149be5fc"
      ],
      "author": {
        "name": "Lukas Czerner",
        "email": "lczerner@redhat.com",
        "time": "Tue May 24 18:28:07 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 24 18:28:07 2011 -0400"
      },
      "message": "ext4: protect bb_first_free in ext4_trim_all_free() with group lock\n\nWe should protect reading bd_info-\u003ebb_first_free with the group lock\nbecause otherwise we might miss some free blocks. This is not a big deal\nat all, but the change to do right thing is really simple, so lets do\nthat.\n\nSigned-off-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "78944086663e6c1b03f3d60bf7610128149be5fc",
      "tree": "fac4b6257258ffc15b59c8d42b6c569948daaed2",
      "parents": [
        "c867516de5256e9cfba2ec5847fa27e0f0ddd2c5"
      ],
      "author": {
        "name": "Lukas Czerner",
        "email": "lczerner@redhat.com",
        "time": "Tue May 24 18:16:27 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 24 18:16:27 2011 -0400"
      },
      "message": "ext4: only load buddy bitmap in ext4_trim_fs() when it is needed\n\nCurrently we are loading buddy ext4_mb_load_buddy() for every block\ngroup we are going through in ext4_trim_fs() in many cases just to find\nout that there is not enough space to be bothered with. As Amir Goldstein\nsuggested we can use bb_free information directly from ext4_group_info.\n\nThis commit removes ext4_mb_load_buddy() from ext4_trim_fs() and rather\nget the ext4_group_info via ext4_get_group_info() and use the bb_free\ninformation directly from that. This avoids unnecessary call to load\nbuddy in the case the group does not have enough free space to trim.\nLoading buddy is now moved to ext4_trim_all_free().\n\nTested by me with xfstests 251.\n\nSigned-off-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "93628ffb9ba67c154849ac6c387f98f5e3198b84",
      "tree": "5aeeedb16744a901f945897fda4822e3b852cec5",
      "parents": [
        "bbd2be36910728f485ac78ea36e0f4f5a38e691e"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue May 24 12:00:54 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 24 12:00:54 2011 -0400"
      },
      "message": "ext4: fix waiting and sending of a barrier in ext4_sync_file()\n\njbd2_log_start_commit() returns 1 only when we really start a\ntransaction.  But we also need to wait for a transaction when the\ncommit is already running.  Fix this problem by waiting for\ntransaction commit unconditionally (which is just a quick check if the\ntransaction is already committed).\n\nAlso we have to be more careful with sending of a barrier because when\ntransaction is being committed in parallel to ext4_sync_file()\nrunning, we cannot be sure that the barrier the journalling code sends\nhappens after we wrote all the data for fsync (note that not every\ndata writeout needs to trigger metadata changes thus commit of some\nmetadata changes can be running while other data is still written\nout). So use jbd2_will_send_data_barrier() helper to detect the common\ncases when we can be sure barrier will be issued by the commit code\nand issue the barrier ourselves in the remaining cases.\n\nReported-by: Edward Goggin \u003cegoggin@vmware.com\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "b221349fa8b45d13c3650089f0514df7d1eb36c3",
      "tree": "5fb5e797c3f05294dd2e9352c05bb20b29a95d16",
      "parents": [
        "072bd7ea74d4b60149a33967d29666bbd84e7709"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Tue May 24 11:36:58 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 24 11:36:58 2011 -0400"
      },
      "message": "ext4: fix ext4_ext_fiemap_cb() to handle blocks before request range correctly\n\nTo get delayed-extent information, ext4_ext_fiemap_cb() looks up\npagecache, it thus collects information starting from a page\u0027s\nhead block.\n\nIf blocksize \u003c pagesize, the beginning blocks of a page may lies\nbefore the request range. So ext4_ext_fiemap_cb() should proceed\nignoring them, because they has been handled before. If no mapped\nbuffer in the range is found in the 1st page, we need to look up\nthe 2nd page, otherwise delayed-extents after a hole will be ignored.\n\nWithout this patch, xfstests 225 will hung on ext4 with 1K block.\n\nReported-by: Amir Goldstein \u003camir73il@users.sourceforge.net\u003e\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "072bd7ea74d4b60149a33967d29666bbd84e7709",
      "tree": "1d09215dcc30192254e62b84a8515220413cfa40",
      "parents": [
        "28e35e42fb255cbaeee8b9f89643f26fe376374d"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon May 23 15:13:02 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon May 23 15:13:02 2011 -0400"
      },
      "message": "ext4: use truncate_setsize() unconditionally\n\nIn commit c8d46e41 (ext4: Add flag to files with blocks intentionally\npast EOF), if the EOFBLOCKS_FL flag is set, we call ext4_truncate()\nbefore calling vmtruncate().  This caused any allocated but unwritten\nblocks created by calling fallocate() with the FALLOC_FL_KEEP_SIZE\nflag to be dropped.  This was done to make to make sure that\nEOFBLOCKS_FL would not be cleared while still leaving blocks past\ni_size allocated.  This was not necessary, since ext4_truncate()\nguarantees that blocks past i_size will be dropped, even in the case\nwhere truncate() has increased i_size before calling ext4_truncate().\n\nSo fix this by removing the EOFBLOCKS_FL special case treatment in\next4_setattr().  In addition, use truncate_setsize() followed by a\ncall to ext4_truncate() instead of using vmtruncate().  This is more\nefficient since it skips the call to inode_newsize_ok(), which has\nbeen checked already by inode_change_ok().  This is also in a win in\nthe case where EOFBLOCKS_FL is set since it avoids calling\next4_truncate() twice.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    }
  ],
  "next": "f6d2f6b327ceef5c689581529a852dc6ec3b74a6"
}
