)]}'
{
  "log": [
    {
      "commit": "1296cc85c26e94eb865d03f82140f27d598de467",
      "tree": "b8a2bc06ecd992a86179ebcd9c087994c676c291",
      "parents": [
        "5f634d064c709ea02c3cdaa850a08323a4a4bf28"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Fri Jan 15 01:27:59 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jan 15 01:27:59 2010 -0500"
      },
      "message": "ext4: Drop EXT4_GET_BLOCKS_UPDATE_RESERVE_SPACE flag\n\nWe should update reserve space if it is delalloc buffer\nand that is indicated by EXT4_GET_BLOCKS_DELALLOC_RESERVE flag.\nSo use EXT4_GET_BLOCKS_DELALLOC_RESERVE in place of\nEXT4_GET_BLOCKS_UPDATE_RESERVE_SPACE\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "5f634d064c709ea02c3cdaa850a08323a4a4bf28",
      "tree": "3f81e9c56cd8348b7bb94f1d54efff696374c929",
      "parents": [
        "1db913823c0f8360fccbd24ca67eb073966a5ffd"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Mon Jan 25 04:00:31 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 25 04:00:31 2010 -0500"
      },
      "message": "ext4: Fix quota accounting error with fallocate\n\nWhen we fallocate a region of the file which we had recently written,\nand which is still in the page cache marked as delayed allocated blocks\nwe need to make sure we don\u0027t do the quota update on writepage path.\nThis is because the needed quota updated would have already be done\nby fallocate.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "1db913823c0f8360fccbd24ca67eb073966a5ffd",
      "tree": "ec5f7be2cfa884b04ca3d26c2dee53283fe16ca7",
      "parents": [
        "74d2e4f8d79ae0c4b6ec027958d5b18058662eea"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Fri Jan 22 17:06:20 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jan 22 17:06:20 2010 -0500"
      },
      "message": "ext4: Handle -EDQUOT error on write\n\nWe need to release the journal before we do a write_inode.  Otherwise\nwe could deadlock.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "9d0be50230b333005635967f7ecd4897dbfd181b",
      "tree": "59aefe29e33284e1d904b23eaf2cc98994431374",
      "parents": [
        "ee5f4d9cdf32fd99172d11665c592a288c2b1ff4"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jan 01 02:41:30 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jan 01 02:41:30 2010 -0500"
      },
      "message": "ext4: Calculate metadata requirements more accurately\n\nIn the past, ext4_calc_metadata_amount(), and its sub-functions\next4_ext_calc_metadata_amount() and ext4_indirect_calc_metadata_amount()\nbadly over-estimated the number of metadata blocks that might be\nrequired for delayed allocation blocks.  This didn\u0027t matter as much\nwhen functions which managed the reserved metadata blocks were more\naggressive about dropping reserved metadata blocks as delayed\nallocation blocks were written, but unfortunately they were too\naggressive.  This was fixed in commit 0637c6f, but as a result the\nover-estimation by ext4_calc_metadata_amount() would lead to reserving\n2-3 times the number of pending delayed allocation blocks as\npotentially required metadata blocks.  So if there are 1 megabytes of\nblocks which have been not yet been allocation, up to 3 megabytes of\nspace would get reserved out of the user\u0027s quota and from the file\nsystem free space pool until all of the inode\u0027s data blocks have been\nallocated.\n\nThis commit addresses this problem by much more accurately estimating\nthe number of metadata blocks that will be required.  It will still\nsomewhat over-estimate the number of blocks needed, since it must make\na worst case estimate not knowing which physical blocks will be\nneeded, but it is much more accurate than before.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "ee5f4d9cdf32fd99172d11665c592a288c2b1ff4",
      "tree": "a1ae2af609d49524d6b807890852bc549889821f",
      "parents": [
        "0637c6f4135f592f094207c7c21e7c0fc5557834"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jan 01 02:36:15 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jan 01 02:36:15 2010 -0500"
      },
      "message": "ext4: Fix accounting of reserved metadata blocks\n\nCommit 0637c6f had a typo which caused the reserved metadata blocks to\nnot be released correctly.   Fix this.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "0637c6f4135f592f094207c7c21e7c0fc5557834",
      "tree": "ee76fc861dffa902e80d0d11c681f5dfa2fcc569",
      "parents": [
        "515f41c33a9d44a964264c9511ad2c869af1fac3"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Dec 30 14:20:45 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Dec 30 14:20:45 2009 -0500"
      },
      "message": "ext4: Patch up how we claim metadata blocks for quota purposes\n\nAs reported in Kernel Bugzilla #14936, commit d21cd8f triggered a BUG\nin the function ext4_da_update_reserve_space() found in\nfs/ext4/inode.c.  The root cause of this BUG() was caused by the fact\nthat ext4_calc_metadata_amount() can severely over-estimate how many\nmetadata blocks will be needed, especially when using direct\nblock-mapped files.\n\nIn addition, it can also badly *under* estimate how much space is\nneeded, since ext4_calc_metadata_amount() assumes that the blocks are\ncontiguous, and this is not always true.  If the application is\nwriting blocks to a sparse file, the number of metadata blocks\nnecessary can be severly underestimated by the functions\next4_da_reserve_space(), ext4_da_update_reserve_space() and\next4_da_release_space().  This was the cause of the dq_claim_space\nreports found on kerneloops.org.\n\nUnfortunately, doing this right means that we need to massively\nover-estimate the amount of free space needed.  So in some cases we\nmay need to force the inode to be written to disk asynchronously in\nto avoid spurious quota failures.\n\nhttp://bugzilla.kernel.org/show_bug.cgi?id\u003d14936\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "2faf2e19dd0e060eeb32442858ef495ac3083277",
      "tree": "cd8c28414036f2d8ad45663371e1544d4efad5d4",
      "parents": [
        "6d3b82f2d31f22085e5711b28dddcb9fb3d97a25"
      ],
      "author": {
        "name": "Richard Kennedy",
        "email": "richard@rsk.demon.co.uk",
        "time": "Fri Dec 25 15:46:07 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Dec 25 15:46:07 2009 -0500"
      },
      "message": "ext4: return correct wbc.nr_to_write in ext4_da_writepages\n\nWhen ext4_da_writepages increases the nr_to_write in writeback_control\nthen it must always re-base the return value.  Originally there was a\n(misguided) attempt prevent wbc.nr_to_write from going negative.  In\nfact, it\u0027s necessary to allow nr_to_write to be negative so that\nwb_writeback() can correctly calculate how many pages were actually\nwritten.  \n\nSigned-off-by: Richard Kennedy \u003crichard@rsk.demon.co.uk\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c8afb44682fcef6273e8b8eb19fab13ddd05b386",
      "tree": "44c170427e54b611d7f02a31bbd5733cc9cf1dd0",
      "parents": [
        "17bd55d037a02b04d9119511cfd1a4b985d20f63"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Wed Dec 23 07:58:12 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Dec 23 07:58:12 2009 -0500"
      },
      "message": "ext4: flush delalloc blocks when space is low\n\nCreating many small files in rapid succession on a small\nfilesystem can lead to spurious ENOSPC; on a 104MB filesystem:\n\nfor i in `seq 1 22500`; do\n    echo -n \u003e $SCRATCH_MNT/$i\n    echo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \u003e $SCRATCH_MNT/$i\ndone\n\nleads to ENOSPC even though after a sync, 40% of the fs is free\nagain.\n\nThis is because we reserve worst-case metadata for delalloc writes,\nand when data is allocated that worst-case reservation is not\nusually needed.\n\nWhen freespace is low, kicking off an async writeback will start\nconverting that worst-case space usage into something more realistic,\nalmost always freeing up space to continue.\n\nThis resolves the testcase for me, and survives all 4 generic\nENOSPC tests in xfstests.\n\nWe\u0027ll still need a hard synchronous sync to squeeze out the last bit,\nbut this fixes things up to a large degree.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "39bc680a8160bb9d6743f7873b535d553ff61058",
      "tree": "6aac2c11b09870bffb877dcaf6ae44b34b56d4db",
      "parents": [
        "d21cd8f163ac44b15c465aab7306db931c606908"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Thu Dec 10 16:36:27 2009 +0000"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Wed Dec 23 13:44:12 2009 +0100"
      },
      "message": "ext4: fix sleep inside spinlock issue with quota and dealloc (#14739)\n\nUnlock i_block_reservation_lock before vfs_dq_reserve_block().\nThis patch fixes http://bugzilla.kernel.org/show_bug.cgi?id\u003d14739\n\nCC: Theodore Ts\u0027o \u003ctytso@mit.edu\u003e\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "d21cd8f163ac44b15c465aab7306db931c606908",
      "tree": "72cbe30f358c93ed7cdae7d4061fc4fdb317959d",
      "parents": [
        "82fdfa928cfa19d9627526b2ce164a27f8e9d34b"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Thu Dec 10 03:31:45 2009 +0000"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Wed Dec 23 13:44:12 2009 +0100"
      },
      "message": "ext4: Fix potential quota deadlock\n\nWe have to delay vfs_dq_claim_space() until allocation context destruction.\nCurrently we have following call-trace:\next4_mb_new_blocks()\n  /* task is already holding ac-\u003ealloc_semp */\n -\u003eext4_mb_mark_diskspace_used\n    -\u003evfs_dq_claim_space()  /*  acquire dqptr_sem here. Possible deadlock */\n -\u003eext4_mb_release_context() /* drop ac-\u003ealloc_semp here */\n\nLet\u0027s move quota claiming to ext4_da_update_reserve_space()\n\n \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n [ INFO: possible circular locking dependency detected ]\n 2.6.32-rc7 #18\n -------------------------------------------------------\n write-truncate-/3465 is trying to acquire lock:\n  (\u0026s-\u003es_dquot.dqptr_sem){++++..}, at: [\u003cc025e73b\u003e] dquot_claim_space+0x3b/0x1b0\n\n but task is already holding lock:\n  (\u0026meta_group_info[i]-\u003ealloc_sem){++++..}, at: [\u003cc02ce962\u003e] ext4_mb_load_buddy+0xb2/0x370\n\n which lock already depends on the new lock.\n\n the existing dependency chain (in reverse order) is:\n\n -\u003e #3 (\u0026meta_group_info[i]-\u003ealloc_sem){++++..}:\n        [\u003cc017d04b\u003e] __lock_acquire+0xd7b/0x1260\n        [\u003cc017d5ea\u003e] lock_acquire+0xba/0xd0\n        [\u003cc0527191\u003e] down_read+0x51/0x90\n        [\u003cc02ce962\u003e] ext4_mb_load_buddy+0xb2/0x370\n        [\u003cc02d0c1c\u003e] ext4_mb_free_blocks+0x46c/0x870\n        [\u003cc029c9d3\u003e] ext4_free_blocks+0x73/0x130\n        [\u003cc02c8cfc\u003e] ext4_ext_truncate+0x76c/0x8d0\n        [\u003cc02a8087\u003e] ext4_truncate+0x187/0x5e0\n        [\u003cc01e0f7b\u003e] vmtruncate+0x6b/0x70\n        [\u003cc022ec02\u003e] inode_setattr+0x62/0x190\n        [\u003cc02a2d7a\u003e] ext4_setattr+0x25a/0x370\n        [\u003cc022ee81\u003e] notify_change+0x151/0x340\n        [\u003cc021349d\u003e] do_truncate+0x6d/0xa0\n        [\u003cc0221034\u003e] may_open+0x1d4/0x200\n        [\u003cc022412b\u003e] do_filp_open+0x1eb/0x910\n        [\u003cc021244d\u003e] do_sys_open+0x6d/0x140\n        [\u003cc021258e\u003e] sys_open+0x2e/0x40\n        [\u003cc0103100\u003e] sysenter_do_call+0x12/0x32\n\n -\u003e #2 (\u0026ei-\u003ei_data_sem){++++..}:\n        [\u003cc017d04b\u003e] __lock_acquire+0xd7b/0x1260\n        [\u003cc017d5ea\u003e] lock_acquire+0xba/0xd0\n        [\u003cc0527191\u003e] down_read+0x51/0x90\n        [\u003cc02a5787\u003e] ext4_get_blocks+0x47/0x450\n        [\u003cc02a74c1\u003e] ext4_getblk+0x61/0x1d0\n        [\u003cc02a7a7f\u003e] ext4_bread+0x1f/0xa0\n        [\u003cc02bcddc\u003e] ext4_quota_write+0x12c/0x310\n        [\u003cc0262d23\u003e] qtree_write_dquot+0x93/0x120\n        [\u003cc0261708\u003e] v2_write_dquot+0x28/0x30\n        [\u003cc025d3fb\u003e] dquot_commit+0xab/0xf0\n        [\u003cc02be977\u003e] ext4_write_dquot+0x77/0x90\n        [\u003cc02be9bf\u003e] ext4_mark_dquot_dirty+0x2f/0x50\n        [\u003cc025e321\u003e] dquot_alloc_inode+0x101/0x180\n        [\u003cc029fec2\u003e] ext4_new_inode+0x602/0xf00\n        [\u003cc02ad789\u003e] ext4_create+0x89/0x150\n        [\u003cc0221ff2\u003e] vfs_create+0xa2/0xc0\n        [\u003cc02246e7\u003e] do_filp_open+0x7a7/0x910\n        [\u003cc021244d\u003e] do_sys_open+0x6d/0x140\n        [\u003cc021258e\u003e] sys_open+0x2e/0x40\n        [\u003cc0103100\u003e] sysenter_do_call+0x12/0x32\n\n -\u003e #1 (\u0026sb-\u003es_type-\u003ei_mutex_key#7/4){+.+...}:\n        [\u003cc017d04b\u003e] __lock_acquire+0xd7b/0x1260\n        [\u003cc017d5ea\u003e] lock_acquire+0xba/0xd0\n        [\u003cc0526505\u003e] mutex_lock_nested+0x65/0x2d0\n        [\u003cc0260c9d\u003e] vfs_load_quota_inode+0x4bd/0x5a0\n        [\u003cc02610af\u003e] vfs_quota_on_path+0x5f/0x70\n        [\u003cc02bc812\u003e] ext4_quota_on+0x112/0x190\n        [\u003cc026345a\u003e] sys_quotactl+0x44a/0x8a0\n        [\u003cc0103100\u003e] sysenter_do_call+0x12/0x32\n\n -\u003e #0 (\u0026s-\u003es_dquot.dqptr_sem){++++..}:\n        [\u003cc017d361\u003e] __lock_acquire+0x1091/0x1260\n        [\u003cc017d5ea\u003e] lock_acquire+0xba/0xd0\n        [\u003cc0527191\u003e] down_read+0x51/0x90\n        [\u003cc025e73b\u003e] dquot_claim_space+0x3b/0x1b0\n        [\u003cc02cb95f\u003e] ext4_mb_mark_diskspace_used+0x36f/0x380\n        [\u003cc02d210a\u003e] ext4_mb_new_blocks+0x34a/0x530\n        [\u003cc02c83fb\u003e] ext4_ext_get_blocks+0x122b/0x13c0\n        [\u003cc02a5966\u003e] ext4_get_blocks+0x226/0x450\n        [\u003cc02a5ff3\u003e] mpage_da_map_blocks+0xc3/0xaa0\n        [\u003cc02a6ed6\u003e] ext4_da_writepages+0x506/0x790\n        [\u003cc01de272\u003e] do_writepages+0x22/0x50\n        [\u003cc01d766d\u003e] __filemap_fdatawrite_range+0x6d/0x80\n        [\u003cc01d7b9b\u003e] filemap_flush+0x2b/0x30\n        [\u003cc02a40ac\u003e] ext4_alloc_da_blocks+0x5c/0x60\n        [\u003cc029e595\u003e] ext4_release_file+0x75/0xb0\n        [\u003cc0216b59\u003e] __fput+0xf9/0x210\n        [\u003cc0216c97\u003e] fput+0x27/0x30\n        [\u003cc02122dc\u003e] filp_close+0x4c/0x80\n        [\u003cc014510e\u003e] put_files_struct+0x6e/0xd0\n        [\u003cc01451b7\u003e] exit_files+0x47/0x60\n        [\u003cc0146a24\u003e] do_exit+0x144/0x710\n        [\u003cc0147028\u003e] do_group_exit+0x38/0xa0\n        [\u003cc0159abc\u003e] get_signal_to_deliver+0x2ac/0x410\n        [\u003cc0102849\u003e] do_notify_resume+0xb9/0x890\n        [\u003cc01032d2\u003e] work_notifysig+0x13/0x21\n\n other info that might help us debug this:\n\n 3 locks held by write-truncate-/3465:\n  #0:  (jbd2_handle){+.+...}, at: [\u003cc02e1f8f\u003e] start_this_handle+0x38f/0x5c0\n  #1:  (\u0026ei-\u003ei_data_sem){++++..}, at: [\u003cc02a57f6\u003e] ext4_get_blocks+0xb6/0x450\n  #2:  (\u0026meta_group_info[i]-\u003ealloc_sem){++++..}, at: [\u003cc02ce962\u003e] ext4_mb_load_buddy+0xb2/0x370\n\n stack backtrace:\n Pid: 3465, comm: write-truncate- Not tainted 2.6.32-rc7 #18\n Call Trace:\n  [\u003cc0524cb3\u003e] ? printk+0x1d/0x22\n  [\u003cc017ac9a\u003e] print_circular_bug+0xca/0xd0\n  [\u003cc017d361\u003e] __lock_acquire+0x1091/0x1260\n  [\u003cc016bca2\u003e] ? sched_clock_local+0xd2/0x170\n  [\u003cc0178fd0\u003e] ? trace_hardirqs_off_caller+0x20/0xd0\n  [\u003cc017d5ea\u003e] lock_acquire+0xba/0xd0\n  [\u003cc025e73b\u003e] ? dquot_claim_space+0x3b/0x1b0\n  [\u003cc0527191\u003e] down_read+0x51/0x90\n  [\u003cc025e73b\u003e] ? dquot_claim_space+0x3b/0x1b0\n  [\u003cc025e73b\u003e] dquot_claim_space+0x3b/0x1b0\n  [\u003cc02cb95f\u003e] ext4_mb_mark_diskspace_used+0x36f/0x380\n  [\u003cc02d210a\u003e] ext4_mb_new_blocks+0x34a/0x530\n  [\u003cc02c601d\u003e] ? ext4_ext_find_extent+0x25d/0x280\n  [\u003cc02c83fb\u003e] ext4_ext_get_blocks+0x122b/0x13c0\n  [\u003cc016bca2\u003e] ? sched_clock_local+0xd2/0x170\n  [\u003cc016be60\u003e] ? sched_clock_cpu+0x120/0x160\n  [\u003cc016beef\u003e] ? cpu_clock+0x4f/0x60\n  [\u003cc0178fd0\u003e] ? trace_hardirqs_off_caller+0x20/0xd0\n  [\u003cc052712c\u003e] ? down_write+0x8c/0xa0\n  [\u003cc02a5966\u003e] ext4_get_blocks+0x226/0x450\n  [\u003cc016be60\u003e] ? sched_clock_cpu+0x120/0x160\n  [\u003cc016beef\u003e] ? cpu_clock+0x4f/0x60\n  [\u003cc017908b\u003e] ? trace_hardirqs_off+0xb/0x10\n  [\u003cc02a5ff3\u003e] mpage_da_map_blocks+0xc3/0xaa0\n  [\u003cc01d69cc\u003e] ? find_get_pages_tag+0x16c/0x180\n  [\u003cc01d6860\u003e] ? find_get_pages_tag+0x0/0x180\n  [\u003cc02a73bd\u003e] ? __mpage_da_writepage+0x16d/0x1a0\n  [\u003cc01dfc4e\u003e] ? pagevec_lookup_tag+0x2e/0x40\n  [\u003cc01ddf1b\u003e] ? write_cache_pages+0xdb/0x3d0\n  [\u003cc02a7250\u003e] ? __mpage_da_writepage+0x0/0x1a0\n  [\u003cc02a6ed6\u003e] ext4_da_writepages+0x506/0x790\n  [\u003cc016beef\u003e] ? cpu_clock+0x4f/0x60\n  [\u003cc016bca2\u003e] ? sched_clock_local+0xd2/0x170\n  [\u003cc016be60\u003e] ? sched_clock_cpu+0x120/0x160\n  [\u003cc016be60\u003e] ? sched_clock_cpu+0x120/0x160\n  [\u003cc02a69d0\u003e] ? ext4_da_writepages+0x0/0x790\n  [\u003cc01de272\u003e] do_writepages+0x22/0x50\n  [\u003cc01d766d\u003e] __filemap_fdatawrite_range+0x6d/0x80\n  [\u003cc01d7b9b\u003e] filemap_flush+0x2b/0x30\n  [\u003cc02a40ac\u003e] ext4_alloc_da_blocks+0x5c/0x60\n  [\u003cc029e595\u003e] ext4_release_file+0x75/0xb0\n  [\u003cc0216b59\u003e] __fput+0xf9/0x210\n  [\u003cc0216c97\u003e] fput+0x27/0x30\n  [\u003cc02122dc\u003e] filp_close+0x4c/0x80\n  [\u003cc014510e\u003e] put_files_struct+0x6e/0xd0\n  [\u003cc01451b7\u003e] exit_files+0x47/0x60\n  [\u003cc0146a24\u003e] do_exit+0x144/0x710\n  [\u003cc017b163\u003e] ? lock_release_holdtime+0x33/0x210\n  [\u003cc0528137\u003e] ? _spin_unlock_irq+0x27/0x30\n  [\u003cc0147028\u003e] do_group_exit+0x38/0xa0\n  [\u003cc017babb\u003e] ? trace_hardirqs_on+0xb/0x10\n  [\u003cc0159abc\u003e] get_signal_to_deliver+0x2ac/0x410\n  [\u003cc0102849\u003e] do_notify_resume+0xb9/0x890\n  [\u003cc0178fd0\u003e] ? trace_hardirqs_off_caller+0x20/0xd0\n  [\u003cc017b163\u003e] ? lock_release_holdtime+0x33/0x210\n  [\u003cc0165b50\u003e] ? autoremove_wake_function+0x0/0x50\n  [\u003cc017ba54\u003e] ? trace_hardirqs_on_caller+0x134/0x190\n  [\u003cc017babb\u003e] ? trace_hardirqs_on+0xb/0x10\n  [\u003cc0300ba4\u003e] ? security_file_permission+0x14/0x20\n  [\u003cc0215761\u003e] ? vfs_write+0x131/0x190\n  [\u003cc0214f50\u003e] ? do_sync_write+0x0/0x120\n  [\u003cc0103115\u003e] ? sysenter_do_call+0x27/0x32\n  [\u003cc01032d2\u003e] work_notifysig+0x13/0x21\n\nCC: Theodore Ts\u0027o \u003ctytso@mit.edu\u003e\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "a9e7f4472075fb6937c545af3f6329e9946bbe66",
      "tree": "399e294982e1c9691332eca72942910a7f74e9f8",
      "parents": [
        "fd8fbfc1709822bd94247c5b2ab15a5f5041e103"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Mon Dec 14 15:21:14 2009 +0300"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Wed Dec 23 13:33:55 2009 +0100"
      },
      "message": "ext4: Convert to generic reserved quota\u0027s space management.\n\nThis patch also fixes write vs chown race condition.\n\nAcked-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "4515c3069da5bfb6f08dbfca499464b4cbdfcb50",
      "tree": "0f067045a0e31f126aebcf3087028639ceb237b4",
      "parents": [
        "a5eba3f66f812cbc076a1170b3f888ad63f850b2",
        "fab3a549e204172236779f502eccb4f9bf0dc87d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 10 09:33:29 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 10 09:33:29 2009 -0800"
      },
      "message": "Merge branch \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4\n\n* \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: (47 commits)\n  ext4: Fix potential fiemap deadlock (mmap_sem vs. i_data_sem)\n  ext4: Do not override ext2 or ext3 if built they are built as modules\n  jbd2: Export jbd2_log_start_commit to fix ext4 build\n  ext4: Fix insufficient checks in EXT4_IOC_MOVE_EXT\n  ext4: Wait for proper transaction commit on fsync\n  ext4: fix incorrect block reservation on quota transfer.\n  ext4: quota macros cleanup\n  ext4: ext4_get_reserved_space() must return bytes instead of blocks\n  ext4: remove blocks from inode prealloc list on failure\n  ext4: wait for log to commit when umounting\n  ext4: Avoid data / filesystem corruption when write fails to copy data\n  ext4: Use ext4 file system driver for ext2/ext3 file system mounts\n  ext4: Return the PTR_ERR of the correct pointer in setup_new_group_blocks()\n  jbd2: Add ENOMEM checking in and for jbd2_journal_write_metadata_buffer()\n  ext4: remove unused parameter wbc from __ext4_journalled_writepage()\n  ext4: remove encountered_congestion trace\n  ext4: move_extent_per_page() cleanup\n  ext4: initialize moved_len before calling ext4_move_extents()\n  ext4: Fix double-free of blocks with EXT4_IOC_MOVE_EXT\n  ext4: use ext4_data_block_valid() in ext4_free_blocks()\n  ...\n"
    },
    {
      "commit": "d014d043869cdc591f3a33243d3481fa4479c2d0",
      "tree": "63626829498e647ba058a1ce06419fe7e4d5f97d",
      "parents": [
        "6ec22f9b037fc0c2e00ddb7023fad279c365324d",
        "6070d81eb5f2d4943223c96e7609a53cdc984364"
      ],
      "author": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Dec 07 18:36:35 2009 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Dec 07 18:36:35 2009 +0100"
      },
      "message": "Merge branch \u0027for-next\u0027 into for-linus\n\nConflicts:\n\n\tkernel/irq/chip.c\n"
    },
    {
      "commit": "b436b9bef84de6893e86346d8fbf7104bc520645",
      "tree": "50fb9ae167bcd622e9adf47646bcf3b4c7dd111d",
      "parents": [
        "194074acacebc169ded90a4657193f5180015051"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue Dec 08 23:51:10 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Dec 08 23:51:10 2009 -0500"
      },
      "message": "ext4: Wait for proper transaction commit on fsync\n\nWe cannot rely on buffer dirty bits during fsync because pdflush can come\nbefore fsync is called and clear dirty bits without forcing a transaction\ncommit. What we do is that we track which transaction has last changed\nthe inode and which transaction last changed allocation and force it to\ndisk on fsync.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "194074acacebc169ded90a4657193f5180015051",
      "tree": "6661f85c6ef4548abe348c2611ad8a43b17ec320",
      "parents": [
        "5aca07eb7d8f14d90c740834d15ca15277f4820c"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Tue Dec 08 22:42:28 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Dec 08 22:42:28 2009 -0500"
      },
      "message": "ext4: fix incorrect block reservation on quota transfer.\n\nInside -\u003esetattr() call both ATTR_UID and ATTR_GID may be valid\nThis means that we may end-up with transferring all quotas. Add\nwe have to reserve QUOTA_DEL_BLOCKS for all quotas, as we do in\ncase of QUOTA_INIT_BLOCKS.\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nReviewed-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "5aca07eb7d8f14d90c740834d15ca15277f4820c",
      "tree": "362ab7bb56cf0920ee27bbaf97e2657c022eb4b4",
      "parents": [
        "8aa6790f876e81f5a2211fe1711a5fe3fe2d7b20"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Tue Dec 08 22:42:15 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Dec 08 22:42:15 2009 -0500"
      },
      "message": "ext4: quota macros cleanup\n\nCurrently all quota block reservation macros contains hard-coded \"2\"\naka MAXQUOTAS value. This is no good because in some places it is not\nobvious to understand what does this digit represent. Let\u0027s introduce\nnew macro with self descriptive name.\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nAcked-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "8aa6790f876e81f5a2211fe1711a5fe3fe2d7b20",
      "tree": "d82eef7f6753858a08640b226bece35dfca3c52d",
      "parents": [
        "b844167edc7fcafda9623955c05e4c1b3c32ebc7"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Tue Dec 08 22:41:52 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Dec 08 22:41:52 2009 -0500"
      },
      "message": "ext4: ext4_get_reserved_space() must return bytes instead of blocks\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nReviewed-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nAcked-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "b9a4207d5e911b938f73079a83cc2ae10524ec7f",
      "tree": "6926354a2c6cc8e5f0e930845774ffe73d3766b8",
      "parents": [
        "24b584240a0006ea7436cd35f5e8983eb76f1e6f"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue Dec 08 21:24:33 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Dec 08 21:24:33 2009 -0500"
      },
      "message": "ext4: Avoid data / filesystem corruption when write fails to copy data\n\nWhen ext4_write_begin fails after allocating some blocks or\ngeneric_perform_write fails to copy data to write, we truncate blocks\nalready instantiated beyond i_size.  Although these blocks were never\ninside i_size, we have to truncate the pagecache of these blocks so\nthat corresponding buffers get unmapped.  Otherwise subsequent\n__block_prepare_write (called because we are retrying the write) will\nfind the buffers mapped, not call -\u003eget_block, and thus the page will\nbe backed by already freed blocks leading to filesystem and data\ncorruption.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "af901ca181d92aac3a7dc265144a9081a86d8f39",
      "tree": "380054af22521144fbe1364c3bcd55ad24c9bde4",
      "parents": [
        "972b94ffb90ea6d20c589d9a47215df103388ddd"
      ],
      "author": {
        "name": "André Goddard Rosa",
        "email": "andre.goddard@gmail.com",
        "time": "Sat Nov 14 13:09:05 2009 -0200"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Fri Dec 04 15:39:55 2009 +0100"
      },
      "message": "tree-wide: fix assorted typos all over the place\n\nThat is \"success\", \"unknown\", \"through\", \"performance\", \"[re|un]mapping\"\n, \"access\", \"default\", \"reasonable\", \"[con]currently\", \"temperature\"\n, \"channel\", \"[un]used\", \"application\", \"example\",\"hierarchy\", \"therefore\"\n, \"[over|under]flow\", \"contiguous\", \"threshold\", \"enough\" and others.\n\nSigned-off-by: André Goddard Rosa \u003candre.goddard@gmail.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "bf48aabb894fd0639ab72a26e8abbd7683ef23c2",
      "tree": "cd7ba4504558ed518126966fa79f18adf2f37fd6",
      "parents": [
        "fb3d38b9904888aa8e36d88b2388dc70934b2169"
      ],
      "author": {
        "name": "Uwe Kleine-König",
        "email": "u.kleine-koenig@pengutronix.de",
        "time": "Wed Oct 28 20:11:03 2009 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Fri Dec 04 15:39:50 2009 +0100"
      },
      "message": "tree-wide: fix typos \"offest\" -\u003e \"offset\"\n\nThis patch was generated by\n\n\tgit grep -E -i -l \u0027offest\u0027 | xargs -r perl -p -i -e \u0027s/offest/offset/\u0027\n\nSigned-off-by: Uwe Kleine-König \u003cu.kleine-koenig@pengutronix.de\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "3f0ca309858ee186435c608ee9eaafd1c8dcb53a",
      "tree": "747897214d2fda0ba36c36dc7be6352dacb3f5a0",
      "parents": [
        "b4d7241596ffb6398ac5535ae8cf80d845b0c254"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Nov 24 11:15:44 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Nov 24 11:15:44 2009 -0500"
      },
      "message": "ext4: remove unused parameter wbc from __ext4_journalled_writepage()\n\nCC: Jan Kara \u003cjack@suse.cz\u003e \nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "e6362609b6c71c5b802026be9cf263bbdd67a50e",
      "tree": "be908b6b0566f70d31378bf11b548a0d59ae0218",
      "parents": [
        "4433871130f36585fde38e7dd817433296648945"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Nov 23 07:17:05 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Nov 23 07:17:05 2009 -0500"
      },
      "message": "ext4: call ext4_forget() from ext4_free_blocks()\n\nAdd the facility for ext4_forget() to be called from\next4_free_blocks().  This simplifies the code in a large number of\nplaces, and centralizes most of the work of calling ext4_forget() into\na single place.\n\nAlso fix a bug in the extents migration code; it wasn\u0027t calling\next4_forget() when releasing the indirect blocks during the\nconversion.  As a result, if the system cashed during or shortly after\nthe extents migration, and the released indirect blocks get reused as\ndata blocks, the journal replay would corrupt the data blocks.  With\nthis new patch, fixing this bug was as simple as adding the\nEXT4_FREE_BLOCKS_FORGET flags to the call to ext4_free_blocks().\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: \"Aneesh Kumar K.V\" \u003caneesh.kumar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "b7e57e7c2a41826e51fe060fae5158bfc7a04e81",
      "tree": "2c7331402c731a9c6bb98827a4f6e5926fd90055",
      "parents": [
        "e4684b3fbb848446683feecb4aee133344c93933"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Nov 22 21:00:13 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Nov 22 21:00:13 2009 -0500"
      },
      "message": "ext4: fold ext4_journal_forget() into ext4_forget()\n\nConvert the last two callers of ext4_journal_forget() to use\next4_forget() instead, and then fold ext4_journal_forget() into\next4_forget().  This reduces are code complexity and shortens our call\nstack.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "d6797d14b1640d088652c72508b529a3aea479e3",
      "tree": "2e608c3e362b94439a2e7503b7d97cb3891bb101",
      "parents": [
        "e3bb52ae2bb9573e84c17b8e3560378d13a5c798"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Nov 22 20:52:12 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Nov 22 20:52:12 2009 -0500"
      },
      "message": "ext4: move ext4_forget() to ext4_jbd2.c\n\nThe ext4_forget() function better belongs in ext4_jbd2.c.  This will\nallow us to do some cleanup of the ext4_journal_revoke() and\next4_journal_forget() functions, as well as giving us better error\nreporting since we can report the caller of ext4_forget() when things\ngo wrong.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "2bba702d4f88d7b010ec37e2527b552588404ae7",
      "tree": "74f46ab1e70328f23f1abbeaf3bf1a49c15a10e8",
      "parents": [
        "6b17d902fdd241adfa4ce780df20547b28bf5801"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Nov 23 07:24:48 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Nov 23 07:24:48 2009 -0500"
      },
      "message": "ext4: fix error handling in ext4_ind_get_blocks()\n\nWhen an error happened in ext4_splice_branch we failed to notice that\nin ext4_ind_get_blocks and mapped the buffer anyway. Fix the problem\nby checking for error properly.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: stable@kernel.org\t       \n"
    },
    {
      "commit": "1032988c71f3f85483b2b4319684d1205a704c02",
      "tree": "ace311067686bf5b93e10ab793ee62b593d8660f",
      "parents": [
        "8dadb198cb70ef811916668fe67eeec82e8858dd"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Nov 15 15:29:56 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Nov 15 15:29:56 2009 -0500"
      },
      "message": "ext4: fix block validity checks so they work correctly with meta_bg\n\nThe block validity checks used by ext4_data_block_valid() wasn\u0027t\ncorrectly written to check file systems with the meta_bg feature.  Fix\nthis.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "30c6e07a92ea4cb87160d32ffa9bce172576ae4c",
      "tree": "5799d5f074bfe2dbde001f767bf675e6c11e8335",
      "parents": [
        "50689696867d95b38d9c7be640a311494a04fb86"
      ],
      "author": {
        "name": "Julia Lawall",
        "email": "julia@diku.dk",
        "time": "Sun Nov 15 15:30:58 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Nov 15 15:30:58 2009 -0500"
      },
      "message": "ext4: fix i_flags access in ext4_da_writepages_trans_blocks()\n\nWe need to be testing the i_flags field in the ext4 specific portion\nof the inode, instead of the (confusingly aliased) i_flags field in\nthe generic struct inode.\n\nSigned-off-by: Julia Lawall \u003cjulia@diku.dk\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "50689696867d95b38d9c7be640a311494a04fb86",
      "tree": "69e582bb6c95d8d0ac59bcad97b5f7f1d79e7126",
      "parents": [
        "beac2da7565e42be59963824899825d0cc624295"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Nov 23 07:17:34 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Nov 23 07:17:34 2009 -0500"
      },
      "message": "ext4: make sure directory and symlink blocks are revoked\n\nWhen an inode gets unlinked, the functions ext4_clear_blocks() and\next4_remove_blocks() call ext4_forget() for all the buffer heads\ncorresponding to the deleted inode\u0027s data blocks.  If the inode is a\ndirectory or a symlink, the is_metadata parameter must be non-zero so\next4_forget() will revoke them via jbd2_journal_revoke().  Otherwise,\nif these blocks are reused for a data file, and the system crashes\nbefore a journal checkpoint, the journal replay could end up\ncorrupting these data blocks.\n\nThanks to Curt Wohlgemuth for pointing out potential problems in this\narea.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "beac2da7565e42be59963824899825d0cc624295",
      "tree": "22b38198349bd000cd146243271f604708fbc3fb",
      "parents": [
        "cf40db137cc2b2a1b3f6850247ac2b181d9d3847"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Nov 23 07:25:08 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Nov 23 07:25:08 2009 -0500"
      },
      "message": "ext4: add tracepoint for ext4_forget()\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "567f3e9a70d71e5c9be03701b8578be77857293b",
      "tree": "1985907b6d9deffc9d38275c000d7f82d158a93f",
      "parents": [
        "92c28159dce22913aef6aa811ce6fb0f7f3790b1"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Nov 14 08:19:05 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Nov 14 08:19:05 2009 -0500"
      },
      "message": "ext4: plug a buffer_head leak in an error path of ext4_iget()\n\nOne of the invalid error paths in ext4_iget() forgot to brelse() the\ninode buffer head.  Fix it by adding a brelse() in the common error\nreturn path, which also simplifies function.\n\nThanks to Andi Kleen \u003cak@linux.intel.com\u003e reporting the problem.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "4b70df181611012a3556f017b57dfcef7e1d279f",
      "tree": "95da7ccaea96227b597078c1c5f2a7571d959e99",
      "parents": [
        "5f5249507e4b5c4fc0f9c93f33d133d8c95f47e1"
      ],
      "author": {
        "name": "Mingming",
        "email": "cmm@us.ibm.com",
        "time": "Tue Nov 03 14:44:54 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Nov 03 14:44:54 2009 -0500"
      },
      "message": "ext4: code clean up for dio fallocate handling\n\nThe ext4_debug() call in ext4_end_io_dio() should be moved after the\ncheck to make sure that io_end is non-NULL.\n\nThe comment above ext4_get_block_dio_write() (\"Maximum number of\nblocks...\") is a duplicate; the original and correct comment is above\nthe #define DIO_MAX_BLOCKS up above.\n\nBased on review comments from Curt Wohlgemuth.\n\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "5f5249507e4b5c4fc0f9c93f33d133d8c95f47e1",
      "tree": "0b0a790f568c07298c3a4122572e84392c787648",
      "parents": [
        "109f55651954def97fa41ee71c464d268c512ab0"
      ],
      "author": {
        "name": "Mingming",
        "email": "cmm@us.ibm.com",
        "time": "Tue Nov 10 10:48:04 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Nov 10 10:48:04 2009 -0500"
      },
      "message": "ext4: skip conversion of uninit extents after direct IO if there isn\u0027t any\n\nAt the end of direct I/O operation, ext4_ext_direct_IO() always called\next4_convert_unwritten_extents(), regardless of whether there were any\nunwritten extents involved in the I/O or not.\n\nThis commit adds a state flag so that ext4_ext_direct_IO() only calls\next4_convert_unwritten_extents() when necessary.\n\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "109f55651954def97fa41ee71c464d268c512ab0",
      "tree": "7c4aa2d8cb10c100bbd252e657ac410d30844bac",
      "parents": [
        "fa5d11133b07053270e18fa9c18560e66e79217e"
      ],
      "author": {
        "name": "Mingming",
        "email": "cmm@us.ibm.com",
        "time": "Tue Nov 10 10:48:08 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Nov 10 10:48:08 2009 -0500"
      },
      "message": "ext4: fix ext4_ext_direct_IO()\u0027s return value after converting uninit extents\n\nAfter a direct I/O request covering an uninitalized extent (i.e.,\ncreated using the fallocate system call) or a hole in a file, ext4\nwill convert the uninitialized extent so it is marked as initialized\nby calling ext4_convert_unwritten_extents().  This function returns\nzero on success.\n\nThis return value was getting returned by ext4_direct_IO(); however\nthe file system\u0027s direct_IO function is supposed to return the number\nof bytes read or written on a success.  By returning zero, it confused\nthe direct I/O code into falling back to buffered I/O unnecessarily.\n\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "fa5d11133b07053270e18fa9c18560e66e79217e",
      "tree": "1018ea7d0a2f511ae58934175dbc3815b7e63b5f",
      "parents": [
        "b419148e567728f6af0c3b01965c1cc141e3e13a"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Mon Nov 02 18:50:49 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Nov 02 18:50:49 2009 -0500"
      },
      "message": "ext4: discard preallocation when restarting a transaction during truncate\n\nWhen restart a transaction during a truncate operation, we drop and\nreacquire i_data_sem.  After reacquiring i_data_sem, we need to\ndiscard any inode-based preallocation that might have been grabbed\nwhile we released i_data_sem (for example, if pdflush is allocating\nblocks and racing against the truncate).\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "fbbf69456619de5d251cb9f1df609069178c62d5",
      "tree": "e0a5bc75a02dda7f46ba4d0e838c54f39b1fe4f6",
      "parents": [
        "74072d0a63553720dd3c70a8b8e9407eb2027dbe"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Fri Oct 02 21:20:55 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Oct 02 21:20:55 2009 -0400"
      },
      "message": "[PATCH] ext4: retry failed direct IO allocations\n\nOn a 256M filesystem, doing this in a loop:\n\n        xfs_io -F -f -d -c \u0027pwrite 0 64m\u0027 test\n        rm -f test\n\neventually leads to ENOSPC.  (the xfs_io command does a\n64m direct IO write to the file \"test\")\n\nAs with other block allocation callers, it looks like we need to\npotentially retry the allocations on the initial ENOSPC.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "74072d0a63553720dd3c70a8b8e9407eb2027dbe",
      "tree": "9895fcb17d44980a82b4daa7688c17da082b4d88",
      "parents": [
        "f0e2dfa7f3e1361ca8fc91c25e67fc4e92613cc9"
      ],
      "author": {
        "name": "Curt Wohlgemuth",
        "email": "curtw@google.com",
        "time": "Fri Oct 02 21:08:32 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Oct 02 21:08:32 2009 -0400"
      },
      "message": "ext4: Fix build warning in ext4_dirty_inode()\n\nThis fixes the following warning:\n\nfs/ext4/inode.c: In function \u0027ext4_dirty_inode\u0027:\nfs/ext4/inode.c:5615: warning: unused variable \u0027current_handle\u0027\n\nWe remove the jbd_debug() statement which does use current_handle, as\nit\u0027s not terribly important in the grand scheme of things.\n\nThanks to Stephen Rothwell for pointing this out.\n\nSigned-off-by: Curt Wohlgemuth \u003ccurtw@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "1f94533d9cd75f6d2826018d54a971b9cc085992",
      "tree": "16c85061eabfcdece2487909bc08c45d2c01d84f",
      "parents": [
        "c1fccc0696bcaff6008c11865091f5ec4b0937ab"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Sep 30 22:57:41 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Sep 30 22:57:41 2009 -0400"
      },
      "message": "ext4: fix a BUG_ON crash by checking that page has buffers attached to it\n\nIn ext4_num_dirty_pages() we were calling page_buffers() before\nchecking to see if the page actually had pages attached to it; this\nwould cause a BUG check crash in the inline function page_buffers().\n\nThanks to Markus Trippelsdorf for reporting this bug.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f3dc272fd5e2ae08244796bb39e7e1ce4b25d3b3",
      "tree": "795edae4030352dfea7cb79ed5a5b0b5ef3d3afb",
      "parents": [
        "830156c79b0a99ddf0f62496bcf4de640f9f52cd"
      ],
      "author": {
        "name": "Curt Wohlgemuth",
        "email": "curtw@google.com",
        "time": "Tue Sep 29 16:06:01 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Sep 29 16:06:01 2009 -0400"
      },
      "message": "ext4: Make sure ext4_dirty_inode() updates the inode in no journal mode\n\nThis patch a problem that ext4_dirty_inode() was not calling\next4_mark_inode_dirty() if the current_handle is not valid, which it\nis the case in no journal mode.\n\nIt also removes a test for non-matching transaction which can never\nhappen.\n\nSigned-off-by: Curt Wohlgemuth \u003ccurtw@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "830156c79b0a99ddf0f62496bcf4de640f9f52cd",
      "tree": "7af8e969f359afd8a4738e22b0374b567041a1fd",
      "parents": [
        "f3ce8064b388ccf420012c5a4907aae4f13fe9d0"
      ],
      "author": {
        "name": "Frank Mayhar",
        "email": "fmayhar@google.com",
        "time": "Tue Sep 29 10:07:47 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Sep 29 10:07:47 2009 -0400"
      },
      "message": "ext4: Avoid updating the inode table bh twice in no journal mode\n\nThis is a cleanup of commit 91ac6f4.  Since ext4_mark_inode_dirty()\nhas already called ext4_mark_iloc_dirty(), which in turn calls\next4_do_update_inode(), it\u0027s not necessary to have ext4_write_inode()\ncall ext4_do_update_inode() in no journal mode.  Indeed, it would be\nduplicated work.\n\nReviewed-by: \"Aneesh Kumar K.V\" \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Frank Mayhar \u003cfmayhar@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "8d5d02e6b176565c77ff03604908b1453a22044d",
      "tree": "0d29e4f28233f24960c7921c1c0a7608077bf713",
      "parents": [
        "4c0425ff68b1b87b802ffeda7b6a46ff7da7241c"
      ],
      "author": {
        "name": "Mingming Cao",
        "email": "cmm@us.ibm.com",
        "time": "Mon Sep 28 15:48:29 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Sep 28 15:48:29 2009 -0400"
      },
      "message": "ext4: async direct IO for holes and fallocate support\n\nFor async direct IO that covers holes or fallocate, the end_io\ncallback function now queued the convertion work on workqueue but\ndon\u0027t flush the work rightaway as it might take too long to afford.\n\nBut when fsync is called after all the data is completed, user expects\nthe metadata also being updated before fsync returns.\n\nThus we need to flush the conversion work when fsync() is called.\nThis patch keep track of a listed of completed async direct io that\nhas a work queued on workqueue.  When fsync() is called, it will go\nthrough the list and do the conversion.\n\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\n"
    },
    {
      "commit": "4c0425ff68b1b87b802ffeda7b6a46ff7da7241c",
      "tree": "a8718f5f4574af8e15fd876b24f4aec88d62451b",
      "parents": [
        "0031462b5b392f90d17f1d75abb795883c44e969"
      ],
      "author": {
        "name": "Mingming Cao",
        "email": "cmm@us.ibm.com",
        "time": "Mon Sep 28 15:48:41 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Sep 28 15:48:41 2009 -0400"
      },
      "message": "ext4: Use end_io callback to avoid direct I/O fallback to buffered I/O\n\nCurrently the DIO VFS code passes create \u003d 0 when writing to the\nmiddle of file.  It does this to avoid block allocation for holes, so\nas not to expose stale data out when there is a parallel buffered read\n(which does not hold the i_mutex lock).  Direct I/O writes into holes\nfalls back to buffered IO for this reason.\n\nSince preallocated extents are treated as holes when doing a\nget_block() look up (buffer is not mapped), direct IO over fallocate\nalso falls back to buffered IO.  Thus ext4 actually silently falls\nback to buffered IO in above two cases, which is undesirable.\n\nTo fix this, this patch creates unitialized extents when a direct I/O\nwrite into holes in sparse files, and registering an end_io callback which\nconverts the uninitialized extent to an initialized extent after the\nI/O is completed.\n\nSinged-Off-By: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "0031462b5b392f90d17f1d75abb795883c44e969",
      "tree": "e8323861b8dede0f3ddbfc8324d650bf1f4fd74b",
      "parents": [
        "9f0ccfd8e07d61b413e6536ffa02fbf60d2e20d8"
      ],
      "author": {
        "name": "Mingming Cao",
        "email": "cmm@us.ibm.com",
        "time": "Mon Sep 28 15:49:08 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Sep 28 15:49:08 2009 -0400"
      },
      "message": "ext4: Split uninitialized extents for direct I/O\n\nWhen writing into an unitialized extent via direct I/O, and the direct\nI/O doesn\u0027t exactly cover the unitialized extent, split the extent\ninto uninitialized and initialized extents before submitting the I/O.\nThis avoids needing to deal with an ENOSPC error in the end_io\ncallback that gets used for direct I/O.\n\nWhen the IO is complete, the written extent will be marked as initialized.\n\nSinged-Off-By: Mingming Cao \u003ccmm@us.ibm.com\u003e \nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "9f0ccfd8e07d61b413e6536ffa02fbf60d2e20d8",
      "tree": "b90ea9f8dc2542d029b15d94a0588b36937dbbab",
      "parents": [
        "55138e0bc29c0751e2152df9ad35deea542f29b3"
      ],
      "author": {
        "name": "Mingming Cao",
        "email": "cmm@us.ibm.com",
        "time": "Mon Sep 28 15:49:52 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Sep 28 15:49:52 2009 -0400"
      },
      "message": "ext4: release reserved quota when block reservation for delalloc retry\n\next4_da_reserve_space() can reserve quota blocks multiple times if\next4_claim_free_blocks() fail and we retry the allocation. We should\nrelease the quota reservation before restarting.\n\nBug found by Jan Kara.\n\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "55138e0bc29c0751e2152df9ad35deea542f29b3",
      "tree": "40dbc77de3e7a426030bd740ba8e2fd0d2171523",
      "parents": [
        "71780577306fd1e76c7a92e3b308db624d03adb9"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Sep 29 13:31:31 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Sep 29 13:31:31 2009 -0400"
      },
      "message": "ext4: Adjust ext4_da_writepages() to write out larger contiguous chunks\n\nWork around problems in the writeback code to force out writebacks in\nlarger chunks than just 4mb, which is just too small.  This also works\naround limitations in the ext4 block allocator, which can\u0027t allocate\nmore than 2048 blocks at a time.  So we need to defeat the round-robin\ncharacteristics of the writeback code and try to write out as many\nblocks in one inode before allowing the writeback code to move on to\nanother inode.  We add a a new per-filesystem tunable,\nmax_writeback_mb_bump, which caps this to a default of 128mb per\ninode.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "1693918e0b6988cf5eb93b7da34f30e94360a379",
      "tree": "de185e86dd6456c251d4a512acd5bab7c19a3a3c",
      "parents": [
        "8365388827663bd6fb773e3623ed9023c0f82b1d"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Sep 26 17:43:59 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Sep 26 17:43:59 2009 -0400"
      },
      "message": "ext4: Use ext4_msg() for ext4_da_writepage() errors\n\nThis allows the user to see what filesystem was involved with a\nparticular ext4_da_writepage() error.  Also, use KERN_CRIT which is\nmore appropriate than KERN_EMERG.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "db16826367fefcb0ddb93d76b66adc52eb4e6339",
      "tree": "626224c1eb1eb79c522714591f208b4fdbdcd9d4",
      "parents": [
        "cd6045138ed1bb5d8773e940d51c34318eef3ef2",
        "465fdd97cbe16ef8727221857e96ef62dd352017"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:53:22 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:53:22 2009 -0700"
      },
      "message": "Merge branch \u0027hwpoison\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6\n\n* \u0027hwpoison\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6: (21 commits)\n  HWPOISON: Enable error_remove_page on btrfs\n  HWPOISON: Add simple debugfs interface to inject hwpoison on arbitary PFNs\n  HWPOISON: Add madvise() based injector for hardware poisoned pages v4\n  HWPOISON: Enable error_remove_page for NFS\n  HWPOISON: Enable .remove_error_page for migration aware file systems\n  HWPOISON: The high level memory error handler in the VM v7\n  HWPOISON: Add PR_MCE_KILL prctl to control early kill behaviour per process\n  HWPOISON: shmem: call set_page_dirty() with locked page\n  HWPOISON: Define a new error_remove_page address space op for async truncation\n  HWPOISON: Add invalidate_inode_page\n  HWPOISON: Refactor truncate to allow direct truncating of page v2\n  HWPOISON: check and isolate corrupted free pages v2\n  HWPOISON: Handle hardware poisoned pages in try_to_unmap\n  HWPOISON: Use bitmask/action code for try_to_unmap behaviour\n  HWPOISON: x86: Add VM_FAULT_HWPOISON handling to x86 page fault handler v2\n  HWPOISON: Add poison check to page fault handling\n  HWPOISON: Add basic support for poisoned pages in fault handler v3\n  HWPOISON: Add new SIGBUS error codes for hardware poison signals\n  HWPOISON: Add support for poison swap entries v2\n  HWPOISON: Export some rmap vma locking to outside world\n  ...\n"
    },
    {
      "commit": "fd589a8f0a13f53a2dd580b1fe170633cf6b095f",
      "tree": "942c50188ca58041b0453189e710eafcfebaea57",
      "parents": [
        "4f37940d64a155c025968118849b596f6aaa8128"
      ],
      "author": {
        "name": "Anand Gadiyar",
        "email": "gadiyar@ti.com",
        "time": "Thu Jul 16 17:13:03 2009 +0200"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Sep 21 15:14:55 2009 +0200"
      },
      "message": "trivial: fix typo \"to to\" in multiple files\n\nSigned-off-by: Anand Gadiyar \u003cgadiyar@ti.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "5534fb5bb35a62a94e0bd1fa2421f7fb6e894f10",
      "tree": "1a9da05279129a9331494c1faab6cfa22cd10ce8",
      "parents": [
        "fb40ba0d98968bc3454731360363d725b4f1064c"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Sep 17 09:34:16 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Sep 17 09:34:16 2009 -0400"
      },
      "message": "ext4: Fix the alloc on close after a truncate hueristic\n\nIn an attempt to avoid doing an unneeded flush after opening a\n(previously non-existent) file with O_CREAT|O_TRUNC, the code only\ntriggered the hueristic if ei-\u003edisksize was non-zero.  Turns out that\nthe VFS doesn\u0027t call -\u003etruncate() if the file doesn\u0027t exist, and\nei-\u003edisksize is always zero even if the file previously existed.  So\nremove the test, since it isn\u0027t necessary and in fact disabled the\nhueristic.\n\nThanks to Clemens Eisserer that he was seeing problems with files\nwritten using kwrite and eclipse after sudden crashes caused by a\nbuggy Intel video driver.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "fb40ba0d98968bc3454731360363d725b4f1064c",
      "tree": "08e8bb15b49bc6310e4c41653889e055d9594d9a",
      "parents": [
        "1b9c12f44c1eb614fd3b8822bfe8f1f5d8e53737"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Sep 16 19:30:40 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Sep 16 19:30:40 2009 -0400"
      },
      "message": "ext4: Add a tracepoint for ext4_alloc_da_blocks()\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "1b9c12f44c1eb614fd3b8822bfe8f1f5d8e53737",
      "tree": "5de0737dd71557dadaa5e3f98d6e62bd3b9d7c51",
      "parents": [
        "fb0a387dcdcd21aab1b09ee7fd80b7c979bdbbfd"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Sep 17 08:32:22 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Sep 17 08:32:22 2009 -0400"
      },
      "message": "ext4: store EXT4_EXT_MIGRATE in i_state instead of i_flags\n\nEXT4_EXT_MIGRATE is only intended to be used for an in-memory flag,\nand the hex value assigned to it collides with FS_DIRECTIO_FL (which\nis also stored in i_flags).  There\u0027s no reason for the\nEXT4_EXT_MIGRATE bit to be stored in i_flags, so we switch it to use\ni_state instead.\n\nCc: \"Aneesh Kumar K.V\" \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "fb0a387dcdcd21aab1b09ee7fd80b7c979bdbbfd",
      "tree": "dcb12c5fce8f7ccb8b183936ea71a29aba3f3846",
      "parents": [
        "c40ce3c9ea97425a12d7e44031a98fe50add6fc1"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Wed Sep 16 14:45:10 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Sep 16 14:45:10 2009 -0400"
      },
      "message": "ext4: limit block allocations for indirect-block files to \u003c 2^32\n\nToday, the ext4 allocator will happily allocate blocks past\n2^32 for indirect-block files, which results in the block\nnumbers getting truncated, and corruption ensues.\n\nThis patch limits such allocations to \u003c 2^32, and adds\nBUG_ONs if we do get blocks larger than that.\n\nThis should address RH Bug 519471, ext4 bitmap allocator \nmust limit blocks to \u003c 2^32\n\n* ext4_find_goal() is modified to choose a goal \u003c UINT_MAX,\n  so that our starting point is in an acceptable range.\n\n* ext4_xattr_block_set() is modified such that the goal block\n  is \u003c UINT_MAX, as above.\n\n* ext4_mb_regular_allocator() is modified so that the group\n  search does not continue into groups which are too high\n\n* ext4_mb_use_preallocated() has a check that we don\u0027t use\n  preallocated space which is too far out\n\n* ext4_alloc_blocks() and ext4_xattr_block_set() add some BUG_ONs\n\nNo attempt has been made to limit inode locations to \u003c 2^32,\nso we may wind up with blocks far from their inodes.  Doing\nthis much already will lead to some odd ENOSPC issues when the\n\"lower 32\" gets full, and further restricting inodes could\nmake that even weirder.\n\nFor high inodes, choosing a goal of the original, % UINT_MAX,\nmay be a bit odd, but then we\u0027re in an odd situation anyway,\nand I don\u0027t know of a better heuristic.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "aa261f549d7652258331ebb12795f3bc4395d213",
      "tree": "0ca807db32a6e3f213fa52b5a053d2b27e5e6bac",
      "parents": [
        "6a46079cf57a7f7758e8b926980a4f852f89b34d"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "andi@firstfloor.org",
        "time": "Wed Sep 16 11:50:16 2009 +0200"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Wed Sep 16 11:50:16 2009 +0200"
      },
      "message": "HWPOISON: Enable .remove_error_page for migration aware file systems\n\nEnable removing of corrupted pages through truncation\nfor a bunch of file systems: ext*, xfs, gfs2, ocfs2, ntfs\nThese should cover most server needs.\n\nI chose the set of migration aware file systems for this\nfor now, assuming they have been especially audited.\nBut in general it should be safe for all file systems\non the data area that support read/write and truncate.\n\nCaveat: the hardware error handler does not take i_mutex\nfor now before calling the truncate function. Is that ok?\n\nCc: tytso@mit.edu\nCc: hch@infradead.org\nCc: mfasheh@suse.com\nCc: aia21@cantab.net\nCc: hugh.dickins@tiscali.co.uk\nCc: swhiteho@redhat.com\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "91ac6f43317c0bf99969665f98016548011dfa38",
      "tree": "07a49f2182dd16fdb372e4a14c263cdd2d166578",
      "parents": [
        "fe188c0e084bdf3038dc0ac963c21d764f53f7da"
      ],
      "author": {
        "name": "Frank Mayhar",
        "email": "fmayhar@google.com",
        "time": "Wed Sep 09 22:33:47 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Sep 09 22:33:47 2009 -0400"
      },
      "message": "ext4: Make non-journal fsync work properly\n\nTeach ext4_write_inode() and ext4_do_update_inode() about non-journal\nmode:  If we\u0027re not using a journal, ext4_write_inode() now calls\next4_do_update_inode() (after getting the iloc via ext4_get_inode_loc())\nwith a new \"do_sync\" parameter.  If that parameter is nonzero _and_ we\u0027re\nnot using a journal, ext4_do_update_inode() calls sync_dirty_buffer()\ninstead of ext4_handle_dirty_metadata().\n\nThis problem was found in power-fail testing, checking the amount of\nloss of files and blocks after a power failure when using fsync() and\nwhen not using fsync().  It turned out that using fsync() was actually\nworse than not doing so, possibly because it increased the likelihood\nthat the inodes would remain unflushed and would therefore be lost at\nthe power failure.\n\nSigned-off-by: Frank Mayhar \u003cfmayhar@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "80e42468d65475e92651e62175bb7807773321d0",
      "tree": "7ab6bd05495a50a4c5fc507ab583daad5178006c",
      "parents": [
        "a827eaffff07c7d58a4cb32158cbeb4849f4e33a"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Sep 08 08:21:26 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Sep 08 08:21:26 2009 -0400"
      },
      "message": "ext4: print more sysadmin-friendly message in check_block_validity()\n\nDrop the WARN_ON(1), as he stack trace is not appropriate, since it is\ntriggered by file system corruption, and it misleads users into\nthinking there is a kernel bug.  In addition, change the message\ndisplayed by ext4_error() to make it clear that this is a file system\ncorruption problem.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a827eaffff07c7d58a4cb32158cbeb4849f4e33a",
      "tree": "6167caf1619f0d9555fd67a2facbf2351a0a7905",
      "parents": [
        "44fc48f7048ab9657b524938a832fec4e0acea98"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Wed Sep 09 22:36:03 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Sep 09 22:36:03 2009 -0400"
      },
      "message": "ext4: Take page lock before looking at attached buffer_heads flags\n\nIn order to check whether the buffer_heads are mapped we need to hold\npage lock. Otherwise a reclaim can cleanup the attached buffer_heads.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "b3a3ca8ca0c3c29abc5b2bfe94bb14f3f4590df9",
      "tree": "1006f780d43ec8ff90ed11b1eb0d5ed961c9f613",
      "parents": [
        "de89de6e0cf4b1eb13f27137cf2aa40d287aabdf"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 31 23:13:11 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 31 23:13:11 2009 -0400"
      },
      "message": "ext4: Add new tracepoint: trace_ext4_da_write_pages()\n\nAdd a new tracepoint which shows the pages that will be written using\nwrite_cache_pages() by ext4_da_writepages().\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "de89de6e0cf4b1eb13f27137cf2aa40d287aabdf",
      "tree": "b6429d327cb0a6985d3fd9bf11755353408ee44c",
      "parents": [
        "98a56ab382079f777e261e14512cbd4fb2107af4"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 31 17:00:59 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 31 17:00:59 2009 -0400"
      },
      "message": "ext4: Restore wbc-\u003erange_start in ext4_da_writepages()\n\nTo solve a lock inversion problem, we implement part of the\nrange_cyclic algorithm in ext4_da_writepages().  (See commit 2acf2c26\nfor more details.)\n\nAs part of that change wbc-\u003erange_start was modified by ext4\u0027s\nwritepages function, which causes its callers to get confused since\nthey aren\u0027t expecting the filesystem to modify it.  The simplest fix\nis to save and restore wbc-\u003erange_start in ext4_da_writepages.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "487caeef9fc08c0565e082c40a8aaf58dad92bbb",
      "tree": "69920293cfe3a50bdbbf845be785350e7c203a2b",
      "parents": [
        "9599b0e597d810be9b8f759ea6e9619c4f983c5e"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Aug 17 22:17:20 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 17 22:17:20 2009 -0400"
      },
      "message": "ext4: Fix possible deadlock between ext4_truncate() and ext4_get_blocks()\n\nDuring truncate we are sometimes forced to start a new transaction as\nthe amount of blocks to be journaled is both quite large and hard to\npredict. So far we restarted a transaction while holding i_data_sem\nand that violates lock ordering because i_data_sem ranks below a\ntransaction start (and it can lead to a real deadlock with\next4_get_blocks() mapping blocks in some page while having a\ntransaction open).\n\nWe fix the problem by dropping the i_data_sem before restarting the\ntransaction and acquire it afterwards. It\u0027s slightly subtle that this\nworks:\n\n1) By the time ext4_truncate() is called, all the page cache for the\ntruncated part of the file is dropped so get_block() should not be\ncalled on it (we only have to invalidate extent cache after we\nreacquire i_data_sem because some extent from not-truncated part could\nextend also into the part we are going to truncate).\n\n2) Writes, migrate or defrag hold i_mutex so they are stopped for all\nthe time of the truncate.\n\nThis bug has been found and analyzed by Theodore Tso \u003ctytso@mit.edu\u003e.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c333e073b7bf76dc819a6b4ce6bef88ee5fa5e50",
      "tree": "500355f9b183c83afc47d2110175a175d775cb90",
      "parents": [
        "785b4b3a5a992eeb8b495a89b6f690b383010aba"
      ],
      "author": {
        "name": "Roel Kluin",
        "email": "roel.kluin@gmail.com",
        "time": "Mon Aug 10 22:47:22 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 10 22:47:22 2009 -0400"
      },
      "message": "ext4: remove redundant test on unsigned\n\nunsigned i_block cannot be less than 0.\n\nSigned-off-by: Roel Kluin \u003croel.kluin@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "e6b5d30104db5f34110678ecab14988f1f1eff63",
      "tree": "922408d70d388925f0113998649d56da475deff4",
      "parents": [
        "62e086be5d2abef8cad854bc5707329ad345f2ec"
      ],
      "author": {
        "name": "Curt Wohlgemuth",
        "email": "curtw@google.com",
        "time": "Mon Jul 13 09:07:20 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jul 13 09:07:20 2009 -0400"
      },
      "message": "ext4: Fix buffer head reference leak in no-journal mode\n\nWe found a problem with buffer head reference leaks when using an ext4\npartition without a journal.  In particular, calls to ext4_forget() would\nnot to a brelse() on the input buffer head, which will cause pages they\nbelong to to not be reclaimable.\n\nFurther investigation showed that all places where ext4_journal_forget() and\next4_journal_revoke() are called are subject to the same problem.  The patch\nbelow changes __ext4_journal_forget/__ext4_journal_revoke to do an explicit\nrelease of the buffer head when the journal handle isn\u0027t valid.\n\nSigned-off-by: Curt Wohlgemuth \u003ccurtw@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "6487a9d3b5476ffd1bbbe97e58cf26dbeb7a5d4a",
      "tree": "6f03532934774f847e281a9eb52fbf539b36f42b",
      "parents": [
        "f6f50e28f0cb8d7bcdfaacc83129f005dede11b1"
      ],
      "author": {
        "name": "Curt Wohlgemuth",
        "email": "curtw@google.com",
        "time": "Fri Jul 17 10:54:08 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jul 17 10:54:08 2009 -0400"
      },
      "message": "ext4: More buffer head reference leaks\n\nAfter the patch I posted last week regarding buffer head ref leaks in\nno-journal mode, I looked at all the code that uses buffer heads and\nsearched for more potential leaks.\n\nThe patch below fixes the issues I found; these can occur even when a\njournal is present.\n\nThe change to inode.c fixes a double release if\next4_journal_get_create_access() fails.\n\nThe changes to namei.c are more complicated.  add_dirent_to_buf() will\nrelease the input buffer head EXCEPT when it returns -ENOSPC.  There are\nsome callers of this routine that don\u0027t always do the brelse() in the event\nthat -ENOSPC is returned.  Unfortunately, to put this fix into ext4_add_entry()\nrequired capturing the return value of make_indexed_dir() and\nadd_dirent_to_buf().\n\nSigned-off-by: Curt Wohlgemuth \u003ccurtw@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "62e086be5d2abef8cad854bc5707329ad345f2ec",
      "tree": "1f3ea5daf9325a338585e1368edf78a1d04747df",
      "parents": [
        "43ce1d23b43330634507a049b55c36e91d27282e"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sun Jun 14 17:59:34 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jun 14 17:59:34 2009 -0400"
      },
      "message": "ext4: Move __ext4_journalled_writepage() to avoid forward declaration\n\nIn addition, fix two unused variable warnings.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "43ce1d23b43330634507a049b55c36e91d27282e",
      "tree": "d7532d7c0bea60b7bfe29dad51b4b92122acdd5a",
      "parents": [
        "c364b22c9580a885e0f8c0d0f9710d67dc448958"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sun Jun 14 17:58:45 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jun 14 17:58:45 2009 -0400"
      },
      "message": "ext4: Fix mmap/truncate race when blocksize \u003c pagesize \u0026\u0026 !nodellaoc\n\nThis patch fixes the mmap/truncate race that was fixed for delayed\nallocation by merging ext4_{journalled,normal,da}_writepage() into\next4_writepage().\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c364b22c9580a885e0f8c0d0f9710d67dc448958",
      "tree": "6a714e767afb7d08a648f8e23e4acca414896699",
      "parents": [
        "b767e78a179e5ab30fdbff1686d074ac270471eb"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sun Jun 14 17:57:10 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jun 14 17:57:10 2009 -0400"
      },
      "message": "ext4: Fix mmap/truncate race when blocksize \u003c pagesize \u0026\u0026 delayed allocation\n\nIt is possible to see buffer_heads which are not mapped in the\nwritepage callback in the following scneario (where the fs blocksize\nis 1k and the page size is 4k):\n\n1) truncate(f, 1024)\n2) mmap(f, 0, 4096)\n3) a[0] \u003d \u0027a\u0027\n4) truncate(f, 4096)\n5) writepage(...)\n\nNow if we get a writepage callback immediately after (4) and before an\nattempt to write at any other offset via mmap address (which implies we\nare yet to get a pagefault and do a get_block) what we would have is the\npage which is dirty have first block allocated and the other three\nbuffer_heads unmapped.\n\nIn the above case the writepage should go ahead and try to write the\nfirst blocks and clear the page_dirty flag. Further attempts to write\nto the page will again create a fault and result in allocating blocks\nand marking page dirty.  If we don\u0027t write any other offset via mmap\naddress we would still have written the first block to the disk and\nrest of the space will be considered as a hole.\n\nSo to address this, we change all of the places where we look for\ndelayed, unmapped, or unwritten buffer heads, and only check for\ndelayed or unwritten buffer heads instead.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "b767e78a179e5ab30fdbff1686d074ac270471eb",
      "tree": "1ff6c357cf52e23acbed789adf20bca432e2b465",
      "parents": [
        "e6462869e4fd88be5141a356ee0c28d8067340cc"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Thu Jun 04 08:06:06 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Jun 04 08:06:06 2009 -0400"
      },
      "message": "ext4: Don\u0027t look at buffer_heads outside i_size.\n\nBuffer heads outside i_size will be unmapped. So when we\nare doing \"walk_page_buffers\" limit ourself to i_size.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nReviewed-by: Josef Bacik \u003cjbacik@redhat.com\u003e\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n----\n"
    },
    {
      "commit": "ffacfa7a79d6c00624196b2d13b0a7f72f2b8227",
      "tree": "201920b755aff4c8a196006c0ec5538235b7ee32",
      "parents": [
        "f91d1d04171026e56c7e343ee3cdcc801dd85cfb"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Jul 13 16:22:22 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jul 13 16:22:22 2009 -0400"
      },
      "message": "ext4: Fix truncation of symlinks after failed write\n\nContents of long symlinks is written via standard write methods. So\nwhen the write fails, we add inode to orphan list. But symlinks don\u0027t\nhave .truncate method defined so nobody properly removes them from the\non disk orphan list.\n\nFix this by calling ext4_truncate() directly instead of calling\nvmtruncate() (which is saner anyway since we don\u0027t need anything\nvmtruncate() does except from calling .truncate in these paths).  We\nalso add inode to orphan list only if ext4_can_truncate() is true\n(currently, it can be false for symlinks when there are no blocks\nallocated) - otherwise orphan list processing will complain and\next4_truncate() will not remove inode from on-disk orphan list.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f4a01017d678fe4baecf480e79d7c4f4b7ebc772",
      "tree": "0f4002c7ca16f4b0bd6ab1b6f1d8015c1f10e150",
      "parents": [
        "b574480507460b8e31b8d38dd4642219fc3b9a10"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jul 05 22:08:16 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jul 05 22:08:16 2009 -0400"
      },
      "message": "ext4: Fix potential reclaim deadlock when truncating partial block\n\nThe ext4_block_truncate_page() function previously called\ngrab_cache_page(), which called find_or_create_page() with the\n__GFP_FS flag potentially set.  This could cause a deadlock if the\nsystem is low on memory and it attempts a memory reclaim, which could\npotentially call back into ext4.  So we need to call\nfind_or_create_page() directly, and remove the __GFP_FP flag to avoid\nthis potential deadlock.\n\nThanks to Roland Dreier for reporting a lockdep warning which showed\nthis problem.\n\n[20786.363249] \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n[20786.363257] [ INFO: inconsistent lock state ]\n[20786.363265] 2.6.31-2-generic #14~rbd4gitd960eea9\n[20786.363270] ---------------------------------\n[20786.363276] inconsistent {IN-RECLAIM_FS-W} -\u003e {RECLAIM_FS-ON-W} usage.\n[20786.363285] http/8397 [HC0[0]:SC0[0]:HE1:SE1] takes:\n[20786.363291]  (jbd2_handle){+.+.?.}, at: [\u003cffffffff812008bb\u003e] jbd2_journal_start+0xdb/0x150\n[20786.363314] {IN-RECLAIM_FS-W} state was registered at:\n[20786.363320]   [\u003cffffffff8108bef6\u003e] mark_irqflags+0xc6/0x1a0\n[20786.363334]   [\u003cffffffff8108d347\u003e] __lock_acquire+0x287/0x430\n[20786.363345]   [\u003cffffffff8108d595\u003e] lock_acquire+0xa5/0x150\n[20786.363355]   [\u003cffffffff812008da\u003e] jbd2_journal_start+0xfa/0x150\n[20786.363365]   [\u003cffffffff811d98a8\u003e] ext4_journal_start_sb+0x58/0x90\n[20786.363377]   [\u003cffffffff811cce85\u003e] ext4_delete_inode+0xc5/0x2c0\n[20786.363389]   [\u003cffffffff81146fa3\u003e] generic_delete_inode+0xd3/0x1a0\n[20786.363401]   [\u003cffffffff81147095\u003e] generic_drop_inode+0x25/0x30\n[20786.363411]   [\u003cffffffff81145ce2\u003e] iput+0x62/0x70\n[20786.363420]   [\u003cffffffff81142878\u003e] dentry_iput+0x98/0x110\n[20786.363429]   [\u003cffffffff81142a00\u003e] d_kill+0x50/0x80\n[20786.363438]   [\u003cffffffff811444c5\u003e] dput+0x95/0x180\n[20786.363447]   [\u003cffffffff8120de4b\u003e] ecryptfs_d_release+0x2b/0x70\n[20786.363459]   [\u003cffffffff81142978\u003e] d_free+0x28/0x60\n[20786.363468]   [\u003cffffffff81142a18\u003e] d_kill+0x68/0x80\n[20786.363477]   [\u003cffffffff81142ad3\u003e] prune_one_dentry+0xa3/0xc0\n[20786.363487]   [\u003cffffffff81142d61\u003e] __shrink_dcache_sb+0x271/0x290\n[20786.363497]   [\u003cffffffff81142e89\u003e] prune_dcache+0x109/0x1b0\n[20786.363506]   [\u003cffffffff81142f6f\u003e] shrink_dcache_memory+0x3f/0x50\n[20786.363516]   [\u003cffffffff810f6d3d\u003e] shrink_slab+0x12d/0x190\n[20786.363527]   [\u003cffffffff810f97d7\u003e] balance_pgdat+0x4d7/0x640\n[20786.363537]   [\u003cffffffff810f9a57\u003e] kswapd+0x117/0x170\n[20786.363546]   [\u003cffffffff810773ce\u003e] kthread+0x9e/0xb0\n[20786.363558]   [\u003cffffffff8101430a\u003e] child_rip+0xa/0x20\n[20786.363569]   [\u003cffffffffffffffff\u003e] 0xffffffffffffffff\n[20786.363598] irq event stamp: 15997\n[20786.363603] hardirqs last  enabled at (15997): [\u003cffffffff81125f9d\u003e] kmem_cache_alloc+0xfd/0x1a0\n[20786.363617] hardirqs last disabled at (15996): [\u003cffffffff81125f01\u003e] kmem_cache_alloc+0x61/0x1a0\n[20786.363628] softirqs last  enabled at (15966): [\u003cffffffff810631ea\u003e] __do_softirq+0x14a/0x220\n[20786.363641] softirqs last disabled at (15861): [\u003cffffffff8101440c\u003e] call_softirq+0x1c/0x30\n[20786.363651] \n[20786.363653] other info that might help us debug this:\n[20786.363660] 3 locks held by http/8397:\n[20786.363665]  #0:  (\u0026sb-\u003es_type-\u003ei_mutex_key#8){+.+.+.}, at: [\u003cffffffff8112ed24\u003e] do_truncate+0x64/0x90\n[20786.363685]  #1:  (\u0026sb-\u003es_type-\u003ei_alloc_sem_key#5){+++++.}, at: [\u003cffffffff81147f90\u003e] notify_change+0x250/0x350\n[20786.363707]  #2:  (jbd2_handle){+.+.?.}, at: [\u003cffffffff812008bb\u003e] jbd2_journal_start+0xdb/0x150\n[20786.363724] \n[20786.363726] stack backtrace:\n[20786.363734] Pid: 8397, comm: http Tainted: G         C 2.6.31-2-generic #14~rbd4gitd960eea9\n[20786.363741] Call Trace:\n[20786.363752]  [\u003cffffffff8108ad7c\u003e] print_usage_bug+0x18c/0x1a0\n[20786.363763]  [\u003cffffffff8108b0c0\u003e] ? check_usage_backwards+0x0/0xb0\n[20786.363773]  [\u003cffffffff8108bad2\u003e] mark_lock_irq+0xf2/0x280\n[20786.363783]  [\u003cffffffff8108bd97\u003e] mark_lock+0x137/0x1d0\n[20786.363793]  [\u003cffffffff8108c03c\u003e] mark_held_locks+0x6c/0xa0\n[20786.363803]  [\u003cffffffff8108c11f\u003e] lockdep_trace_alloc+0xaf/0xe0\n[20786.363813]  [\u003cffffffff810efbac\u003e] __alloc_pages_nodemask+0x7c/0x180\n[20786.363824]  [\u003cffffffff810e9411\u003e] ? find_get_page+0x91/0xf0\n[20786.363835]  [\u003cffffffff8111d3b7\u003e] alloc_pages_current+0x87/0xd0\n[20786.363845]  [\u003cffffffff810e9827\u003e] __page_cache_alloc+0x67/0x70\n[20786.363856]  [\u003cffffffff810eb7df\u003e] find_or_create_page+0x4f/0xb0\n[20786.363867]  [\u003cffffffff811cb3be\u003e] ext4_block_truncate_page+0x3e/0x460\n[20786.363876]  [\u003cffffffff812008da\u003e] ? jbd2_journal_start+0xfa/0x150\n[20786.363885]  [\u003cffffffff812008bb\u003e] ? jbd2_journal_start+0xdb/0x150\n[20786.363895]  [\u003cffffffff811c6415\u003e] ? ext4_meta_trans_blocks+0x75/0xf0\n[20786.363905]  [\u003cffffffff811e8d8b\u003e] ext4_ext_truncate+0x1bb/0x1e0\n[20786.363916]  [\u003cffffffff811072c5\u003e] ? unmap_mapping_range+0x75/0x290\n[20786.363926]  [\u003cffffffff811ccc28\u003e] ext4_truncate+0x498/0x630\n[20786.363938]  [\u003cffffffff8129b4ce\u003e] ? _raw_spin_unlock+0x5e/0xb0\n[20786.363947]  [\u003cffffffff81107306\u003e] ? unmap_mapping_range+0xb6/0x290\n[20786.363957]  [\u003cffffffff8108c3ad\u003e] ? trace_hardirqs_on+0xd/0x10\n[20786.363966]  [\u003cffffffff811ffe58\u003e] ? jbd2_journal_stop+0x1f8/0x2e0\n[20786.363976]  [\u003cffffffff81107690\u003e] vmtruncate+0xb0/0x110\n[20786.363986]  [\u003cffffffff81147c05\u003e] inode_setattr+0x35/0x170\n[20786.363995]  [\u003cffffffff811c9906\u003e] ext4_setattr+0x186/0x370\n[20786.364005]  [\u003cffffffff81147eab\u003e] notify_change+0x16b/0x350\n[20786.364014]  [\u003cffffffff8112ed30\u003e] do_truncate+0x70/0x90\n[20786.364021]  [\u003cffffffff8112f48b\u003e] T.657+0xeb/0x110\n[20786.364021]  [\u003cffffffff8112f4be\u003e] sys_ftruncate+0xe/0x10\n[20786.364021]  [\u003cffffffff81013132\u003e] system_call_fastpath+0x16/0x1b\n\nReported-by: Roland Dreier \u003croland@digitalvampire.org\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "d4bfe2f76d785cc77611a4bda8cedaff358d8c7d",
      "tree": "a8c953fe752afebadb4f0fb4aa3e80dbab934f7f",
      "parents": [
        "6582a0e6f6bc7bf64817b9e1a424782855292ab0"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 08 19:54:26 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jun 24 08:17:04 2009 -0400"
      },
      "message": "switch ext4 to inode-\u003ei_acl\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4159175058987cb68aefd0e9eec2598b795363b4",
      "tree": "452a3ef5f8f2ae4c79095519078383fe766d69ab",
      "parents": [
        "de9a55b841132f7ae097f6e31ccebad2d5030cf5"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 15 03:41:23 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 15 03:41:23 2009 -0400"
      },
      "message": "ext4: Don\u0027t update ctime for non-extent-mapped inodes\n\nThe VFS handles updating ctime, so we don\u0027t need to update the inode\u0027s\nctime in ext4_splace_branch() to update the direct or indirect blocks.\nThis was harmless when we did this in ext3, but in ext4, thanks to\ndelayed allocation, updating the ctime in ext4_splice_branch() can\ncause the ctime to mysteriously jump when the blocks are finally\nallocated.\n\nThanks to Björn Steinbrink for pointing out this problem on the git\nmailing list.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "de9a55b841132f7ae097f6e31ccebad2d5030cf5",
      "tree": "9b66c7c68bff923a62d4c2b04114e22a8fa524e1",
      "parents": [
        "0610b6e99939828b77eec020ead0e1f44cba38ca"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jun 14 17:45:34 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jun 14 17:45:34 2009 -0400"
      },
      "message": "ext4: Fix up whitespace issues in fs/ext4/inode.c\n\nThis is a pure cleanup patch.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "4ab2f15b7f709c3626a7eed075a7225b4c775c7e",
      "tree": "bfefc592c4c2eb176162134c615132e75f810486",
      "parents": [
        "bc0b0d6d69ee9022f18ae264e62beb30ddeb322a"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jun 13 10:09:36 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jun 13 10:09:36 2009 -0400"
      },
      "message": "ext4: move the abort flag from s_mount_opts to s_mount_flags\n\nWe\u0027re running out of space in the mount options word, and\nEXT4_MOUNT_ABORT isn\u0027t really a mount option, but a run-time flag.  So\nmove it to become EXT4_MF_FS_ABORTED in s_mount_flags.\n\nAlso remove bogus ext2_fs.h / ext4.h simultaneous #include protection,\nwhich can never happen.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "7f4520cc6242780ce720aa440ad4b391f998b558",
      "tree": "c8f1d99e019f2e29a967851031f4a60bf7ab1467",
      "parents": [
        "748de6736c1e482e111f9d1b5a5d5b1787600cad"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jun 13 10:09:41 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jun 13 10:09:41 2009 -0400"
      },
      "message": "ext4: change s_mount_opt to be an unsigned int\n\nWe can only fit 32 options in s_mount_opt because an unsigned long is\n32-bits on a x86 machine.  So use an unsigned int to save space on\n64-bit platforms.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "9bffad1ed2a003a355ed1b42424a0ae3575275ed",
      "tree": "9016e7b0e04a0e5319680f9e1f89fc1abb13c765",
      "parents": [
        "879c5e6b7cb4c689d08ca9b2e353d8ab3dc425d5"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Jun 17 11:48:11 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Jun 17 11:48:11 2009 -0400"
      },
      "message": "ext4: convert instrumentation from markers to tracepoints\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "0eab928221bac8895a0b494a16a8810002bd8645",
      "tree": "733ca0ee831fffb3fd2c96b6715250e79e7a24fa",
      "parents": [
        "9aee2286071c23c535fe9928eec1a26e0bcf256d"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jun 09 09:54:40 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jun 09 09:54:40 2009 -0400"
      },
      "message": "ext4: Don\u0027t treat a truncation of a zero-length file as replace-via-truncate\n\nIf a non-existent file is opened via O_WRONLY|O_CREAT|O_TRUNC, there\u0027s\nno need to treat this as a true file truncation, so we shouldn\u0027t\nactivate the replace-via-truncate hueristic.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f8514083cd61daef12fba5ef883ad9352c450428",
      "tree": "46cbf0c28ea112229c3ee9209750c8017f1b9385",
      "parents": [
        "1938a150c25bf7c2c47182e753a1038945b70b0e"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Fri Jun 05 00:56:49 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jun 05 00:56:49 2009 -0400"
      },
      "message": "ext4: truncate the file properly if we fail to copy data from userspace\n\nIn generic_perform_write if we fail to copy the user data we don\u0027t\nupdate the inode-\u003ei_size.  We should truncate the file in the above\ncase so that we don\u0027t have blocks allocated outside inode-\u003ei_size.  Add\nthe inode to orphan list in the same transaction as block allocation\nThis ensures that if we crash in between the recovery would do the\ntruncate.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nCC:  Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "1938a150c25bf7c2c47182e753a1038945b70b0e",
      "tree": "cab711b2868d719c6f460a75387acf84f6b37576",
      "parents": [
        "b31e15527a9bb71b6a11a425d17ce139a62f5af5"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Fri Jun 05 01:00:26 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jun 05 01:00:26 2009 -0400"
      },
      "message": "ext4: Avoid leaking blocks after a block allocation failure\n\nWe should add inode to the orphan list in the same transaction\nas block allocation.  This ensures that if we crash after a failed\nblock allocation and before we do a vmtruncate we don\u0027t leak block\n(ie block marked as used in bitmap but not claimed by the inode).\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nCC:  Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "03f5d8bcf094a5e3b501bd2ae1553656efa8d1be",
      "tree": "04644e9008e7357fd87f14fee6404b7c306bc3e9",
      "parents": [
        "0b8e58a140cae2ba1c4a21ccae7c6c3c939c51f9"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue Jun 09 00:17:05 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jun 09 00:17:05 2009 -0400"
      },
      "message": "ext4: Get rid of EXTEND_DISKSIZE flag of ext4_get_blocks_handle()\n\nGet rid of EXTEND_DISKSIZE flag of ext4_get_blocks_handle(). This\nseems to be a relict from some old days and setting disksize in this\nfunction does not make much sense.  Currently it was set only by\next4_getblk().  Since the parameter has some effect only if create \u003d\u003d\n1, it is easy to check by grepping through the sources that the three\ncallers which end up calling ext4_getblk() with create \u003d\u003d 1\n(ext4_append, ext4_quota_write, ext4_mkdir) do the right thing and set\ndisksize themselves.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "759d427aa5a9d88a81afd11817cdeb40aea85234",
      "tree": "8e8316ed77c9ee21cce9058d5b477c0e7cf4462b",
      "parents": [
        "0f7ee7c17241915fdaff49d1a36f5aafd80a7dce"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon May 25 11:51:00 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon May 25 11:51:00 2009 -0400"
      },
      "message": "ext4: remove unused function __ext4_write_dirty_metadata\n\nThe __ext4_write_dirty_metadata() function was introduced by commit\n0390131b, \"ext4: Allow ext4 to run without a journal\", but nothing\never used the function, either then or since.  So let\u0027s remove it and\nsave a bit of space.\n\nCc: Frank Mayhar \u003cfmayhar@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "6fd058f7791087648c683eb8572edf3be3c4c23c",
      "tree": "0d80791532d2d022c91f20013003716eaf0afb40",
      "parents": [
        "2ac3b6e00acb46406c993d57921f86a594aafe08"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 17 15:38:01 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 17 15:38:01 2009 -0400"
      },
      "message": "ext4: Add a comprehensive block validity check to ext4_get_blocks()\n\nTo catch filesystem bugs or corruption which could lead to the\nfilesystem getting severly damaged, this patch adds a facility for\ntracking all of the filesystem metadata blocks by contiguous regions\nin a red-black tree.  This allows quick searching of the tree to\nlocate extents which might overlap with filesystem metadata blocks.\n\nThis facility is also used by the multi-block allocator to assure that\nit is not allocating blocks out of the system zone, as well as by the\nroutines used when reading indirect blocks and extents information\nfrom disk to make sure their contents are valid.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "2ac3b6e00acb46406c993d57921f86a594aafe08",
      "tree": "51f8a245caa53776fb9617973742ffc81023e007",
      "parents": [
        "2fa3cdfb319055fd8b25abdafa413e16f00ad493"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 13:57:08 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 13:57:08 2009 -0400"
      },
      "message": "ext4: Clean up ext4_get_blocks() so it does not depend on bh_result-\u003eb_state\n\nThe ext4_get_blocks() function was depending on the value of\nbh_result-\u003eb_state as an input parameter to decide whether or not\nupdate the delalloc accounting statistics by calling\next4_da_update_reserve_space().  We now use a separate flag,\nEXT4_GET_BLOCKS_UPDATE_RESERVE_SPACE, to requests this update, so that\nall callers of ext4_get_blocks() can clear map_bh.b_state before\ncalling ext4_get_blocks() without worrying about any consistency\nissues.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "2fa3cdfb319055fd8b25abdafa413e16f00ad493",
      "tree": "c85e56fa92eecc163a85084d11aef356a686c9b9",
      "parents": [
        "a2dc52b5d1d8cc280b3e795abf1c80ac8c49f30c"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 09:29:45 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 09:29:45 2009 -0400"
      },
      "message": "ext4: Merge ext4_da_get_block_write() into mpage_da_map_blocks()\n\nThe static function ext4_da_get_block_write() was only used by\nmpage_da_map_blocks().  So to simplify the code, merge that function\ninto mpage_da_map_blocks().\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a2dc52b5d1d8cc280b3e795abf1c80ac8c49f30c",
      "tree": "2f425d897dfdab9f2a5997f9801c6ccbea7c1323",
      "parents": [
        "b920c75502cb2c48654ef196d647c8eb81ab608a"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 12 13:51:29 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 12 13:51:29 2009 -0400"
      },
      "message": "ext4: Add BUG_ON debugging checks to noalloc_get_block_write()\n\nEnforce that noalloc_get_block_write() is only called to map one block\nat a time, and that it always is successful in finding a mapping for\ngiven an inode\u0027s logical block block number if it is called with\ncreate \u003d\u003d 1.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "b920c75502cb2c48654ef196d647c8eb81ab608a",
      "tree": "73105b8a1212001a3636d83b3f8e9e554e048170",
      "parents": [
        "c21770573319922e3f3fcb331cfaa290c49f1c81"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 00:54:29 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 00:54:29 2009 -0400"
      },
      "message": "ext4: Add documentation to the ext4_*get_block* functions\n\nThis adds more documentation to various internal functions in\nfs/ext4/inode.c, most notably ext4_ind_get_blocks(),\next4_da_get_block_write(), ext4_da_get_block_prep(),\next4_normal_get_block_write().\n\nIn addition, the static function ext4_normal_get_block_write() has\nbeen renamed noalloc_get_block_write(), since it is used in many\nplaces far beyond ext4_normal_writepage().\n\nPlenty of warnings have been added to the noalloc_get_block_write()\nfunction, since the way it is used is amazingly fragile.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c21770573319922e3f3fcb331cfaa290c49f1c81",
      "tree": "ee21ebb2d73d4d3b19d7e391e7accf00704371d9",
      "parents": [
        "12b7ac176831df1aa58a787e67c3e5d698b30163"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 00:58:52 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 00:58:52 2009 -0400"
      },
      "message": "ext4: Define a new set of flags for ext4_get_blocks()\n\nThe functions ext4_get_blocks(), ext4_ext_get_blocks(), and\next4_ind_get_blocks() used an ad-hoc set of integer variables used as\nboolean flags passed in as arguments.  Use a single flags parameter\nand a setandard set of bitfield flags instead.  This saves space on\nthe call stack, and it also makes the code a bit more understandable.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "12b7ac176831df1aa58a787e67c3e5d698b30163",
      "tree": "d8d3ab93fd28d5b84efff0b5c247da74c84788e0",
      "parents": [
        "e4d996ca806e93dddb5d76c0d3d859b494c559f6"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 00:57:44 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 00:57:44 2009 -0400"
      },
      "message": "ext4: Rename ext4_get_blocks_wrap() to be ext4_get_blocks()\n\nAnother function rename for clarity\u0027s sake.  The _wrap prefix simply\nconfuses people, and didn\u0027t add much people trying to follow the code\npaths.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "e4d996ca806e93dddb5d76c0d3d859b494c559f6",
      "tree": "dee33d8bb77bcd5ef5bebeab04d7fe95e3cb4dc5",
      "parents": [
        "f888e652d758bfe0c04c209b72a05972daeba386"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 12 00:25:28 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 12 00:25:28 2009 -0400"
      },
      "message": "ext4: Rename ext4_get_blocks_handle() to be ext4_ind_get_blocks()\n\nThe static function ext4_get_blocks_handle() is badly named.  Of\n*course* it takes a handle.  Since its counterpart for extent-based\nfile is ext4_ext_get_blocks(), rename it to be ext4_ind_get_blocks().\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f888e652d758bfe0c04c209b72a05972daeba386",
      "tree": "5d593d7ce0f4e58cf2c049b8635e55f3b5a0d415",
      "parents": [
        "bc8e67409ccdcff72c3f1656b1fb1aad7ff396db"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 12 00:21:29 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 12 00:21:29 2009 -0400"
      },
      "message": "ext4: Simplify function signature for ext4_da_get_block_write() \n\nThe function ext4_da_get_block_write() is called in exactly one write,\nand the last argument, create, is always 1.  Remove it to simplify the\ncode slightly.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "8df9675f8b498d0bfa1f0b5b06f56bf1ff366dd5",
      "tree": "38fd56a82049f50b4d774af47b9d39f116071755",
      "parents": [
        "9ca92389c5312a51e819c15c762f0abdc7f3129b"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri May 01 08:50:38 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri May 01 08:50:38 2009 -0400"
      },
      "message": "ext4: Avoid races caused by on-line resizing and SMP memory reordering\n\nExt4\u0027s on-line resizing adds a new block group and then, only at the\nlast step adjusts s_groups_count.  However, it\u0027s possible on SMP\nsystems that another CPU could see the updated the s_group_count and\nnot see the newly initialized data structures for the just-added block\ngroup.  For this reason, it\u0027s important to insert a SMP read barrier\nafter reading s_groups_count and before reading any (for example) the\nnew block group descriptors allowed by the increased value of\ns_groups_count.\n\nUnfortunately, we rather blatently violate this locking protocol\ndocumented in fs/ext4/resize.c.  Fortunately, (1) on-line resizes\nhappen relatively rarely, and (2) it seems rare that the filesystem\ncode will immediately try to use just-added block group before any\nmemory ordering issues resolve themselves.  So apparently problems\nhere are relatively hard to hit, since ext3 has been vulnerable to the\nsame issue for years with no one apparently complaining.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "29fa89d088941d79765d60f22d5ccdd6b8696e11",
      "tree": "3fbe031eec140c03dafa11f2416c4f6e3826f21d",
      "parents": [
        "8fb0e342481c4d80040670fec915f0b9c7c6499a"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Tue May 12 16:30:27 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 12 16:30:27 2009 -0400"
      },
      "message": "ext4: Mark the unwritten buffer_head as mapped during write_begin\n\nSetting BH_Unwritten buffer_heads as BH_Mapped avoids multiple\n(unnecessary) calls to get_block() during the call to the write(2)\nsystem call.  Setting BH_Unwritten buffer heads as BH_Mapped requires\nthat the writepages() functions can handle BH_Unwritten buffer_heads.\n\nAfter this commit, things work as follows:\n\next4_ext_get_block() returns unmapped, unwritten, buffer head when\ncalled with create \u003d 0 for prealloc space. This makes sure we handle\nthe read path and non-delayed allocation case correctly.  Even though\nthe buffer head is marked unmapped we have valid b_blocknr and b_bdev\nvalues in the buffer_head.\n\next4_da_get_block_prep() called for block resrevation will now return\nmapped, unwritten, new buffer_head for prealloc space. This avoids\nmultiple calls to get_block() for write to same offset. By making such\nbuffers as BH_New, we also assure that sub-block zeroing of buffered\nwrites happens correctly.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "79ffab34391933ee3b95dac7f25c0478fa2f8f1e",
      "tree": "8bc139928e172ef2ebd38e01f97dc01f886d8526",
      "parents": [
        "9fa7eb283c5cdc2b0f4a8cfe6387ed82e5e9a3d3"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Wed May 13 15:13:42 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed May 13 15:13:42 2009 -0400"
      },
      "message": "ext4: Properly initialize the buffer_head state\n\nThese struct buffer_heads are allocated on the stack (and hence are\ninitialized with stack garbage).  They are only used to call a\nget_blocks() function, so that\u0027s mostly OK, but b_state must be\ninitialized to be 0 so we don\u0027t have any unexpected BH_* flags set by\naccident, such as BH_Unwritten or BH_Delay.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "2a8964d63d50dd2d65d71d342bc7fb6ef4117614",
      "tree": "7dd80d63afd9adab61ba0695ac3e0c95485dc2ed",
      "parents": [
        "33b9817e2ae097c7b8d256e3510ac6c54fc6d9d0"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Thu May 14 17:05:39 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 17:05:39 2009 -0400"
      },
      "message": "ext4: Clear the unwritten buffer_head flag after the extent is initialized\n\nThe BH_Unwritten flag indicates that the buffer is allocated on disk\nbut has not been written; that is, the disk was part of a persistent\npreallocation area.  That flag should only be set when a get_blocks()\nfunction is looking up a inode\u0027s logical to physical block mapping.\n\nWhen ext4_get_blocks_wrap() is called with create\u003d1, the uninitialized\nextent is converted into an initialized one, so the BH_Unwritten flag\nis no longer appropriate.  Hence, we need to make sure the\nBH_Unwritten is not left set, since the combination of BH_Mapped and\nBH_Unwritten is not allowed; among other things, it will result ext4\u0027s\nget_block() to be called over and over again during the write_begin\nphase of write(2).\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "33b9817e2ae097c7b8d256e3510ac6c54fc6d9d0",
      "tree": "3de27ab9a089fb53503fdcc2746e396ee9fb78d0",
      "parents": [
        "9c1ee184a30394e54165fa4c15923cabd952c106"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Tue May 12 14:40:37 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 12 14:40:37 2009 -0400"
      },
      "message": "ext4: Use a fake block number for delayed new buffer_head\n\nUse a very large unsigned number (~0xffff) as as the fake block number\nfor the delayed new buffer. The VFS should never try to write out this\nnumber, but if it does, this will make it obvious.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "9c1ee184a30394e54165fa4c15923cabd952c106",
      "tree": "77fee66ccc5e4aec3aeff7c7d641691b116be091",
      "parents": [
        "091bf7624d1c90cec9e578a18529f615213ff847"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Wed May 13 18:36:58 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed May 13 18:36:58 2009 -0400"
      },
      "message": "ext4: Fix sub-block zeroing for writes into preallocated extents\n\nWe need to mark the buffer_head mapping preallocated space as new\nduring write_begin. Otherwise we don\u0027t zero out the page cache content\nproperly for a partial write. This will cause file corruption with\npreallocation.\n\nNow that we mark the buffer_head new we also need to have a valid\nbuffer_head blocknr so that unmap_underlying_metadata() unmaps the\ncorrect block.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c4b5a614316c505922a522b2e35ba05ea3e08a7c",
      "tree": "8b76988940551726ef05d311e02a06bb61464274",
      "parents": [
        "a9e817425dc0baede8ebe5fbc9984a640257432b"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Apr 24 18:45:35 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Apr 24 18:45:35 2009 -0400"
      },
      "message": "ext4: Do not try to validate extents on special files\n\nThe EXTENTS_FL flag should never be set on special files, but if it\nis, don\u0027t bother trying to validate that the extents tree is valid,\nsince only files, directories, and non-fast symlinks will ever have an\nextent data structure.  We perhaps should flag the filesystem as being\ncorrupted if we see a special file (named pipes, device nodes, Unix\ndomain sockets, etc.) with the EXTENTS_FL flag, but e2fsck doesn\u0027t\ncurrently check this case, so we\u0027ll just ignore this for now, since\nit\u0027s harmless.\n\nWithout this fix, a special device with the extents flag is flagged as\nan error by the kernel, so it is impossible to access or delete the\ninode, but e2fsck doesn\u0027t see it as a problem, leading to\nconfused/frustrated users.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a9e817425dc0baede8ebe5fbc9984a640257432b",
      "tree": "ff59f9cc8dcee908f58a136554323d8c8fbfcca8",
      "parents": [
        "485c26ec70f823f2a9cf45982b724893e53a859e"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Apr 24 16:11:18 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Apr 24 16:11:18 2009 -0400"
      },
      "message": "ext4: Ignore i_file_acl_high unless EXT4_FEATURE_INCOMPAT_64BIT is present\n\nDon\u0027t try to look at i_file_acl_high unless the INCOMPAT_64BIT feature\nbit is set.  The field is normally zero, but older versions of e2fsck\ndidn\u0027t automatically check to make sure of this, so in the spirit of\n\"be liberal in what you accept\", don\u0027t look at i_file_acl_high unless\nwe are using a 64-bit filesystem.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "485c26ec70f823f2a9cf45982b724893e53a859e",
      "tree": "545ee089625b9b4131773eb26c57a51889deda78",
      "parents": [
        "0c8454f56623505a99463405fd7d5664adfbb094"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Apr 24 13:43:20 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Apr 24 13:43:20 2009 -0400"
      },
      "message": "ext4: Fix softlockup caused by illegal i_file_acl value in on-disk inode\n\nIf the block containing external extended attributes (which is stored\nin i_file_acl and i_file_acl_high) is larger than the on-disk\nfilesystem, the process which tried to access the extended attributes\nwill endlessly issue kernel printks complaining that\n\"__find_get_block_slow() failed\", locking up that CPU until the system\nis forcibly rebooted.\n\nSo when we read in the inode, make sure the i_file_acl value is legal,\nand if not, flag the filesystem as being corrupted.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f73953c0656f2db9073c585c4df2884a8ecd101e",
      "tree": "3771470edbc40318c553468265151f4f2e27004e",
      "parents": [
        "e0724bf6e4a1f2e678d2b2aab01cae22e17862f0"
      ],
      "author": {
        "name": "Thiemo Nagel",
        "email": "thiemo.nagel@ph.tum.de",
        "time": "Tue Apr 07 18:46:47 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Apr 07 18:46:47 2009 -0400"
      },
      "message": "ext4: Fix big-endian problem in __ext4_check_blockref()\n\nCommit fe2c8191 introduced a regression on big-endian system, because\nthe checks to make sure block references in non-extent inodes are\nvalid failed to use le32_to_cpu().\n\nReported-by: Alexander Beregalov \u003ca.beregalov@gmail.com\u003e\nSigned-off-by: Thiemo Nagel \u003cthiemo.nagel@ph.tum.de\u003e\nTested-by: Alexander Beregalov \u003ca.beregalov@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "395d73413c5656c6d7706ae91dcb441f9b7e3074",
      "tree": "7fadabe996f70d7918583fa2312d4fad19397fcb",
      "parents": [
        "c226fd659fa7b6a7b038df5ae6856a68514bacde",
        "06705bff9114531a997a7d0c2520bea0f2927410"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 10:57:49 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 10:57:49 2009 -0700"
      },
      "message": "Merge branch \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4\n\n* \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: (33 commits)\n  ext4: Regularize mount options\n  ext4: fix locking typo in mballoc which could cause soft lockup hangs\n  ext4: fix typo which causes a memory leak on error path\n  jbd2: Update locking coments\n  ext4: Rename pa_linear to pa_type\n  ext4: add checks of block references for non-extent inodes\n  ext4: Check for an valid i_mode when reading the inode from disk\n  ext4: Use WRITE_SYNC for commits which are caused by fsync()\n  ext4: Add auto_da_alloc mount option\n  ext4: Use struct flex_groups to calculate get_orlov_stats()\n  ext4: Use atomic_t\u0027s in struct flex_groups\n  ext4: remove /proc tuning knobs\n  ext4: Add sysfs support\n  ext4: Track lifetime disk writes\n  ext4: Fix discard of inode prealloc space with delayed allocation.\n  ext4: Automatically allocate delay allocated blocks on rename\n  ext4: Automatically allocate delay allocated blocks on close\n  ext4: add EXT4_IOC_ALLOC_DA_BLKS ioctl\n  ext4: Simplify delalloc code by removing mpage_da_writepages()\n  ext4: Save stack space by removing fake buffer heads\n  ...\n"
    },
    {
      "commit": "c2ec175c39f62949438354f603f4aa170846aabb",
      "tree": "f2c9bf1bec2deabe2d3a5092405b027637b6ead3",
      "parents": [
        "c2fdf3a9b2d52842808a8e551b53b55dd9b45030"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Tue Mar 31 15:23:21 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:14 2009 -0700"
      },
      "message": "mm: page_mkwrite change prototype to match fault\n\nChange the page_mkwrite prototype to take a struct vm_fault, and return\nVM_FAULT_xxx flags.  There should be no functional change.\n\nThis makes it possible to return much more detailed error information to\nthe VM (and also can provide more information eg.  virtual_address to the\ndriver, which might be important in some special cases).\n\nThis is required for a subsequent fix.  And will also make it easier to\nmerge page_mkwrite() with fault() in future.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nCc: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nCc: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\nCc: Mark Fasheh \u003cmfasheh@suse.com\u003e\nCc: Joel Becker \u003cjoel.becker@oracle.com\u003e\nCc: Artem Bityutskiy \u003cdedekind@infradead.org\u003e\nCc: Felix Blyakher \u003cfelixb@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fe2c8191faa29d7a09f4962198f6dfab973ceec4",
      "tree": "ed1b9cf3997fb6e90bf889f028d27e1d3e5f2b63",
      "parents": [
        "563bdd61fe4dbd6b58cf7eb06f8d8f14479ae1dc"
      ],
      "author": {
        "name": "Thiemo Nagel",
        "email": "thiemo.nagel@ph.tum.de",
        "time": "Tue Mar 31 08:36:10 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Mar 31 08:36:10 2009 -0400"
      },
      "message": "ext4: add checks of block references for non-extent inodes\n\nCheck block references in the inode and indorect blocks for non-extent\ninodes to make sure they are valid, and flag an error if they are\ninvalid.\n\nSigned-off-by: Thiemo Nagel \u003cthiemo.nagel@ph.tum.de\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    }
  ],
  "next": "563bdd61fe4dbd6b58cf7eb06f8d8f14479ae1dc"
}
