1
0
Fork 0
alistair23-linux/fs/ocfs2
Jie Liu 28e8be3180 ocfs2: fix the end cluster offset of FIEMAP
Call fiemap ioctl(2) with given start offset as well as an desired mapping
range should show extents if possible.  However, we somehow figure out the
end offset of mapping via 'mapping_end -= cpos' before iterating the
extent records which would cause problems if the given fiemap length is
too small to a cluster size, e.g,

Cluster size 4096:
debugfs.ocfs2 1.6.3
        Block Size Bits: 12   Cluster Size Bits: 12

The extended fiemap test utility From David:
https://gist.github.com/anonymous/6172331

# dd if=/dev/urandom of=/ocfs2/test_file bs=1M count=1000
# ./fiemap /ocfs2/test_file 4096 10
start: 4096, length: 10
File /ocfs2/test_file has 0 extents:
#	Logical          Physical         Length           Flags
	^^^^^ <-- No extent is shown

In this case, at ocfs2_fiemap(): cpos == mapping_end == 1. Hence the
loop of searching extent records was not executed at all.

This patch remove the in question 'mapping_end -= cpos', and loops
until the cpos is larger than the mapping_end as usual.

# ./fiemap /ocfs2/test_file 4096 10
start: 4096, length: 10
File /ocfs2/test_file has 1 extents:
#	Logical          Physical         Length           Flags
0:	0000000000000000 0000000056a01000 0000000006a00000 0000

Signed-off-by: Jie Liu <jeff.liu@oracle.com>
Reported-by: David Weber <wb@munzinger.de>
Tested-by: David Weber <wb@munzinger.de>
Cc: Sunil Mushran <sunil.mushran@gmail.com>
Cc: Mark Fashen <mfasheh@suse.de>
Cc: Joel Becker <jlbec@evilplan.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2013-09-11 15:56:53 -07:00
..
cluster ocfs2: fix a tiny race case when firing callbacks 2013-09-11 15:56:51 -07:00
dlm ocfs2/dlm: force clean refmap when doing local cleanup 2013-09-11 15:56:49 -07:00
dlmfs ocfs2: remove unused variable ip in dlmfs_get_root_inode() 2013-09-11 15:56:52 -07:00
Kconfig ocfs2: Make OCFS2_FS depend on CONFIGFS_FS 2011-01-16 21:22:40 +00:00
Makefile Ocfs2/move_extents: Add basic framework and source files for extent moving. 2011-05-25 15:17:08 +08:00
acl.c ocfs2: clean up dead code in ocfs2_acl_from_xattr() 2013-09-11 15:56:39 -07:00
acl.h fs: take the ACL checks to common code 2011-07-25 14:30:23 -04:00
alloc.c ocfs2: fix mutex_unlock and possible memory leak in ocfs2_remove_btree_range 2013-07-03 16:07:23 -07:00
alloc.h ocfs2: Add ocfs2_trim_fs for SSD trim support. 2011-05-23 23:37:18 -07:00
aops.c ocfs2: use i_size_read() to access i_size 2013-09-11 15:56:30 -07:00
aops.h aio: don't include aio.h in sched.h 2013-05-07 20:16:25 -07:00
blockcheck.c ocfs2: kill endianness abuses in blockcheck.c 2012-05-29 23:28:35 -04:00
blockcheck.h
buffer_head_io.c ocfs2: Remove masklog ML_UPTODATE. 2011-02-24 16:22:20 +08:00
buffer_head_io.h
dcache.c hlist: drop the node parameter from iterators 2013-02-27 19:10:24 -08:00
dcache.h Track negative entries v3 2010-09-10 09:18:15 -07:00
dir.c ocfs2: fix null pointer dereference in ocfs2_dir_foreach_blk_id() 2013-08-13 17:57:49 -07:00
dir.h [readdir] convert ocfs2 2013-06-29 12:57:02 +04:00
dlmglue.c aio: remove retry-based AIO 2013-05-07 18:38:27 -07:00
dlmglue.h ocfs2: Fix lockdep warning in reflink. 2010-09-10 09:19:06 -07:00
export.c fs: encode_fh: return FILEID_INVALID if invalid fid_type 2013-02-26 02:46:10 -05:00
export.h
extent_map.c ocfs2: fix the end cluster offset of FIEMAP 2013-09-11 15:56:53 -07:00
extent_map.h ocfs2: Implement llseek() 2011-07-25 14:58:15 -07:00
file.c ocfs2: free path in ocfs2_remove_inode_range() 2013-09-11 15:56:50 -07:00
file.h ->permission() sanitizing: don't pass flags to ->permission() 2011-07-20 01:43:24 -04:00
heartbeat.c ocfs2: Remove mlog(0) from fs/ocfs2/heartbeat.c 2011-02-23 21:17:39 +08:00
heartbeat.h
inode.c ocfs2: Convert uid and gids between in core and on disk inodes 2013-02-13 06:00:58 -08:00
inode.h aio: don't include aio.h in sched.h 2013-05-07 20:16:25 -07:00
ioctl.c ocfs2: use i_size_read() to access i_size 2013-09-11 15:56:30 -07:00
ioctl.h
journal.c ocfs2: use i_size_read() to access i_size 2013-09-11 15:56:30 -07:00
journal.h ocfs2: lighten up allocate transaction 2013-09-11 15:56:28 -07:00
localalloc.c ocfs2: ac_bits_wanted should be local_alloc_bits when returns -ENOSPC 2013-09-11 15:56:31 -07:00
localalloc.h
locks.c ocfs2: remove INODE from unused files. 2011-02-21 11:18:23 +08:00
locks.h
mmap.c kill f_vfsmnt 2013-02-26 02:46:10 -05:00
mmap.h
move_extents.c ocfs2: fix a memory leak in __ocfs2_move_extents() 2013-09-11 15:56:44 -07:00
move_extents.h Ocfs2/move_extents: move/defrag extents within a certain range. 2011-05-25 15:17:12 +08:00
namei.c ocfs2: fix readonly issue in ocfs2_unlink() 2013-07-03 16:07:24 -07:00
namei.h
ocfs1_fs_compat.h
ocfs2.h ocfs2: remove unecessary variable needs_checkpoint 2013-07-03 16:07:23 -07:00
ocfs2_fs.h Revert wrong fixes for common misspellings 2011-04-26 23:31:11 -07:00
ocfs2_ioctl.h Ocfs2/move_extents: Adding new ioctl code 'OCFS2_IOC_MOVE_EXT' to ocfs2. 2011-05-25 15:17:08 +08:00
ocfs2_lockid.h
ocfs2_lockingver.h
ocfs2_trace.h ocfs2: lighten up allocate transaction 2013-09-11 15:56:28 -07:00
quota.h ocfs2: use system_wq instead of ocfs2_quota_wq 2011-02-01 11:42:42 +01:00
quota_global.c ocfs2: use i_size_read() to access i_size 2013-09-11 15:56:30 -07:00
quota_local.c ocfs2: use i_size_read() to access i_size 2013-09-11 15:56:30 -07:00
refcounttree.c ocfs2: add missing return value check of ocfs2_get_clusters() 2013-09-11 15:56:44 -07:00
refcounttree.h ocfs2: fix NULL pointer dereference in ocfs2_duplicate_clusters_by_page 2013-08-13 17:57:49 -07:00
reservations.c ocfs2: Remove masklog ML_RESERVATIONS. 2011-02-23 22:10:56 +08:00
reservations.h Fix common misspellings 2011-03-31 11:26:23 -03:00
resize.c ocfs2: Remove mlog(0) from fs/ocfs2/suballoc.c 2011-02-22 08:24:01 +08:00
resize.h
slot_map.c ocfs2: Clean up messages in the fs 2011-07-24 10:34:54 -07:00
slot_map.h
stack_o2cb.c ocfs2: remove kfree() redundant null checks 2013-02-21 17:22:19 -08:00
stack_user.c dlm: add recovery callbacks 2012-01-04 08:56:31 -06:00
stackglue.c
stackglue.h Fix common misspellings 2011-03-31 11:26:23 -03:00
suballoc.c ocfs2: remove duplicated mlog_errno() in ocfs2_relink_block_group 2013-07-03 16:07:24 -07:00
suballoc.h ocfs2: ac->ac_allow_chain_relink=0 won't disable group relink 2013-02-27 19:10:09 -08:00
super.c fs/ocfs2/super.c: Use bigger nodestr to accomodate 32-bit node numbers 2013-08-28 19:26:38 -07:00
super.h treewide: use __printf not __attribute__((format(printf,...))) 2011-10-31 17:30:54 -07:00
symlink.c ocfs2: Fix oops in ocfs2_fast_symlink_readpage() code path 2013-02-26 02:46:12 -05:00
symlink.h ocfs: simplify symlink handling 2012-05-29 23:28:40 -04:00
sysfile.c ocfs2: remove kfree() redundant null checks 2013-02-21 17:22:19 -08:00
sysfile.h
uptodate.c ocfs2: Remove masklog ML_UPTODATE. 2011-02-24 16:22:20 +08:00
uptodate.h
ver.c
ver.h
xattr.c ocfs2: fix possible double free in ocfs2_reflink_xattr_rec 2013-09-11 15:56:49 -07:00
xattr.h xattr: Constify ->name member of "struct xattr". 2013-07-25 19:30:03 +10:00