From 9837455a6257d15699069edf1b3cb354dbd6761a Mon Sep 17 00:00:00 2001 From: Leonard Michlmayr Date: Thu, 4 Mar 2010 17:07:28 -0500 Subject: [PATCH] --- yaml --- r: 185860 b: refs/heads/master c: aca92ff6f57c000d1b4523e383c8bd6b8269b8b1 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/ext4/extents.c | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index f24cf3dfb9ab..1ab9a600f939 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9aaab0589baa61d637a52badddbff2d74f35a955 +refs/heads/master: aca92ff6f57c000d1b4523e383c8bd6b8269b8b1 diff --git a/trunk/fs/ext4/extents.c b/trunk/fs/ext4/extents.c index bd808915ad2f..7d54850f7136 100644 --- a/trunk/fs/ext4/extents.c +++ b/trunk/fs/ext4/extents.c @@ -3768,7 +3768,6 @@ int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, __u64 start, __u64 len) { ext4_lblk_t start_blk; - ext4_lblk_t len_blks; int error = 0; /* 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) { error = ext4_xattr_fiemap(inode, fieinfo); } else { + ext4_lblk_t len_blks; + __u64 last_blk; + 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.