Fiemap (ioctl) does not return any extents for small files on ext4. (fm_start=0, fm_length=filesize) File affected: fs/ext4/extents.c I found the reason of the bug: wrong rounding. It will not only affect small files, but any request that overlaps an extent boundary by less that blocksize. The attached patch is against 2.6.32-rc5. Leonard Michlmayr
diff -Naur linux-2.6.32-rc5/fs/ext4/extents.c linux-2.6.32-rc5.patched/fs/ext4/extents.c --- linux-2.6.32-rc5/fs/ext4/extents.c 2009-10-16 02:41:50.000000000 +0200 +++ linux-2.6.32-rc5.patched/fs/ext4/extents.c 2009-11-04 19:35:44.000000000 +0100 @@ -3685,6 +3685,7 @@ __u64 start, __u64 len) { ext4_lblk_t start_blk; + ext4_lblk_t end_blk; ext4_lblk_t len_blks; int error = 0; @@ -3700,7 +3701,8 @@ error = ext4_xattr_fiemap(inode, fieinfo); } else { start_blk = start >> inode->i_sb->s_blocksize_bits; - len_blks = len >> inode->i_sb->s_blocksize_bits; + end_blk = (start + len - 1) >> inode->i_sb->s_blocksize_bits; + len_blks = end_blk - start_blk + 1; /* * Walk the extent tree gathering extent information.