diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ext4/extents.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index f0e6934291dd..0e9de2328bd2 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c | |||
@@ -4731,6 +4731,7 @@ static long ext4_zero_range(struct file *file, loff_t offset, | |||
4731 | loff_t new_size = 0; | 4731 | loff_t new_size = 0; |
4732 | int ret = 0; | 4732 | int ret = 0; |
4733 | int flags; | 4733 | int flags; |
4734 | int credits; | ||
4734 | int partial; | 4735 | int partial; |
4735 | loff_t start, end; | 4736 | loff_t start, end; |
4736 | ext4_lblk_t lblk; | 4737 | ext4_lblk_t lblk; |
@@ -4830,8 +4831,14 @@ static long ext4_zero_range(struct file *file, loff_t offset, | |||
4830 | if (ret) | 4831 | if (ret) |
4831 | goto out_dio; | 4832 | goto out_dio; |
4832 | } | 4833 | } |
4833 | 4834 | /* | |
4834 | handle = ext4_journal_start(inode, EXT4_HT_MISC, 4); | 4835 | * In worst case we have to writeout two nonadjacent unwritten |
4836 | * blocks and update the inode | ||
4837 | */ | ||
4838 | credits = (2 * ext4_ext_index_trans_blocks(inode, 2)) + 1; | ||
4839 | if (ext4_should_journal_data(inode)) | ||
4840 | credits += 2; | ||
4841 | handle = ext4_journal_start(inode, EXT4_HT_MISC, credits); | ||
4835 | if (IS_ERR(handle)) { | 4842 | if (IS_ERR(handle)) { |
4836 | ret = PTR_ERR(handle); | 4843 | ret = PTR_ERR(handle); |
4837 | ext4_std_error(inode->i_sb, ret); | 4844 | ext4_std_error(inode->i_sb, ret); |