|
@@ -3768,7 +3768,6 @@ int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
|
|
__u64 start, __u64 len)
|
|
__u64 start, __u64 len)
|
|
{
|
|
{
|
|
ext4_lblk_t start_blk;
|
|
ext4_lblk_t start_blk;
|
|
- ext4_lblk_t len_blks;
|
|
|
|
int error = 0;
|
|
int error = 0;
|
|
|
|
|
|
/* fallback to generic here if not in extents fmt */
|
|
/* fallback to generic here if not in extents fmt */
|
|
@@ -3782,8 +3781,14 @@ int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
|
|
if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR) {
|
|
if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR) {
|
|
error = ext4_xattr_fiemap(inode, fieinfo);
|
|
error = ext4_xattr_fiemap(inode, fieinfo);
|
|
} else {
|
|
} else {
|
|
|
|
+ ext4_lblk_t len_blks;
|
|
|
|
+ __u64 last_blk;
|
|
|
|
+
|
|
start_blk = start >> inode->i_sb->s_blocksize_bits;
|
|
start_blk = start >> inode->i_sb->s_blocksize_bits;
|
|
- len_blks = len >> inode->i_sb->s_blocksize_bits;
|
|
|
|
|
|
+ last_blk = (start + len - 1) >> inode->i_sb->s_blocksize_bits;
|
|
|
|
+ if (last_blk >= EXT_MAX_BLOCK)
|
|
|
|
+ last_blk = EXT_MAX_BLOCK-1;
|
|
|
|
+ len_blks = ((ext4_lblk_t) last_blk) - start_blk + 1;
|
|
|
|
|
|
/*
|
|
/*
|
|
* Walk the extent tree gathering extent information.
|
|
* Walk the extent tree gathering extent information.
|