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.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index c56877972b0e..cae75c122ea4 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -3767,7 +3767,6 @@ int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
3767 __u64 start, __u64 len) 3767 __u64 start, __u64 len)
3768{ 3768{
3769 ext4_lblk_t start_blk; 3769 ext4_lblk_t start_blk;
3770 ext4_lblk_t len_blks;
3771 int error = 0; 3770 int error = 0;
3772 3771
3773 /* fallback to generic here if not in extents fmt */ 3772 /* fallback to generic here if not in extents fmt */
@@ -3781,8 +3780,14 @@ int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
3781 if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR) { 3780 if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR) {
3782 error = ext4_xattr_fiemap(inode, fieinfo); 3781 error = ext4_xattr_fiemap(inode, fieinfo);
3783 } else { 3782 } else {
3783 ext4_lblk_t len_blks;
3784 __u64 last_blk;
3785
3784 start_blk = start >> inode->i_sb->s_blocksize_bits; 3786 start_blk = start >> inode->i_sb->s_blocksize_bits;
3785 len_blks = len >> inode->i_sb->s_blocksize_bits; 3787 last_blk = (start + len - 1) >> inode->i_sb->s_blocksize_bits;
3788 if (last_blk >= EXT_MAX_BLOCK)
3789 last_blk = EXT_MAX_BLOCK-1;
3790 len_blks = ((ext4_lblk_t) last_blk) - start_blk + 1;
3786 3791
3787 /* 3792 /*
3788 * Walk the extent tree gathering extent information. 3793 * Walk the extent tree gathering extent information.