Add cc: stable@vger.kernel.org tags
[ext4-patch-queue.git] / zero_range-fix-incorect-journal-credits-reservation
blobce1ddfec0a82dfd60665da5405c50630f2a4fa33
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
7 non adjacent blocks.
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
12 ---
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,
21         loff_t new_size = 0;
22         int ret = 0;
23         int flags;
24 +       int credits;
25         int partial;
26         loff_t start, end;
27         ext4_lblk_t lblk;
28 @@ -4839,8 +4840,9 @@ static long ext4_zero_range(struct file *file, loff_t offset,
29                 if (ret)
30                         goto out_dio;
31         }
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);
37         if (IS_ERR(handle)) {
38                 ret = PTR_ERR(handle);
39                 ext4_std_error(inode->i_sb, ret);
40 -- 
41 1.7.1