diff options
Diffstat (limited to 'fs/ext4/extents.c')
-rw-r--r-- | fs/ext4/extents.c | 9 |
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. |