aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4/extents.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ext4/extents.c')
-rw-r--r--fs/ext4/extents.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index d74e08029643..e003a1e81dc3 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -377,7 +377,7 @@ static int ext4_valid_extent(struct inode *inode, struct ext4_extent *ext)
377 ext4_lblk_t lblock = le32_to_cpu(ext->ee_block); 377 ext4_lblk_t lblock = le32_to_cpu(ext->ee_block);
378 ext4_lblk_t last = lblock + len - 1; 378 ext4_lblk_t last = lblock + len - 1;
379 379
380 if (lblock > last) 380 if (len == 0 || lblock > last)
381 return 0; 381 return 0;
382 return ext4_data_block_valid(EXT4_SB(inode->i_sb), block, len); 382 return ext4_data_block_valid(EXT4_SB(inode->i_sb), block, len);
383} 383}
@@ -5396,6 +5396,14 @@ int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len)
5396 loff_t new_size, ioffset; 5396 loff_t new_size, ioffset;
5397 int ret; 5397 int ret;
5398 5398
5399 /*
5400 * We need to test this early because xfstests assumes that a
5401 * collapse range of (0, 1) will return EOPNOTSUPP if the file
5402 * system does not support collapse range.
5403 */
5404 if (!ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
5405 return -EOPNOTSUPP;
5406
5399 /* Collapse range works only on fs block size aligned offsets. */ 5407 /* Collapse range works only on fs block size aligned offsets. */
5400 if (offset & (EXT4_CLUSTER_SIZE(sb) - 1) || 5408 if (offset & (EXT4_CLUSTER_SIZE(sb) - 1) ||
5401 len & (EXT4_CLUSTER_SIZE(sb) - 1)) 5409 len & (EXT4_CLUSTER_SIZE(sb) - 1))