1 ext4: fix incorect journal credits reservation in ext4_zero_range
3 From: Dmitry Monakhov <dmonakhov@openvz.org>
5 Currently we reserve only 4 blocks but in worst case scenario
6 ext4_zero_partial_blocks() may want to zeroout and convert two
9 Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
10 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
11 Cc: stable@vger.kernel.org
13 fs/ext4/extents.c | 6 ++++--
14 1 files changed, 4 insertions(+), 2 deletions(-)
16 diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
17 index 5bf718b..f09dbe7 100644
18 --- a/fs/ext4/extents.c
19 +++ b/fs/ext4/extents.c
20 @@ -4740,6 +4740,7 @@ static long ext4_zero_range(struct file *file, loff_t offset,
28 @@ -4839,8 +4840,9 @@ static long ext4_zero_range(struct file *file, loff_t offset,
33 - handle = ext4_journal_start(inode, EXT4_HT_MISC, 4);
34 + /* In worst case we have to writeout two nonadjacent unwritten blocks */
35 + credits = ext4_ext_index_trans_blocks(inode, 2) + 2;
36 + handle = ext4_journal_start(inode, EXT4_HT_MISC, credits);
38 ret = PTR_ERR(handle);
39 ext4_std_error(inode->i_sb, ret);