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