aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ext4')
-rw-r--r--fs/ext4/extents.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index bd808915ad2f..7d54850f7136 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -3768,7 +3768,6 @@ int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
3768 __u64 start, __u64 len) 3768 __u64 start, __u64 len)
3769{ 3769{
3770 ext4_lblk_t start_blk; 3770 ext4_lblk_t start_blk;
3771 ext4_lblk_t len_blks;
3772 int error = 0; 3771 int error = 0;
3773 3772
3774 /* fallback to generic here if not in extents fmt */ 3773 /* fallback to generic here if not in extents fmt */
@@ -3782,8 +3781,14 @@ int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
3782 if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR) { 3781 if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR) {
3783 error = ext4_xattr_fiemap(inode, fieinfo); 3782 error = ext4_xattr_fiemap(inode, fieinfo);
3784 } else { 3783 } else {
3784 ext4_lblk_t len_blks;
3785 __u64 last_blk;
3786
3785 start_blk = start >> inode->i_sb->s_blocksize_bits; 3787 start_blk = start >> inode->i_sb->s_blocksize_bits;
3786 len_blks = len >> inode->i_sb->s_blocksize_bits; 3788 last_blk = (start + len - 1) >> inode->i_sb->s_blocksize_bits;
3789 if (last_blk >= EXT_MAX_BLOCK)
3790 last_blk = EXT_MAX_BLOCK-1;
3791 len_blks = ((ext4_lblk_t) last_blk) - start_blk + 1;
3787 3792
3788 /* 3793 /*
3789 * Walk the extent tree gathering extent information. 3794 * Walk the extent tree gathering extent information.