ext4: fix ext4_ext_fiemap_cb() to handle blocks before request range correctly
authorYongqiang Yang <xiaoqiangnk@gmail.com>
Tue, 24 May 2011 15:36:58 +0000 (11:36 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 24 May 2011 15:36:58 +0000 (11:36 -0400)
commitb221349fa8b45d13c3650089f0514df7d1eb36c3
tree5fb5e797c3f05294dd2e9352c05bb20b29a95d16
parent072bd7ea74d4b60149a33967d29666bbd84e7709
ext4: fix ext4_ext_fiemap_cb() to handle blocks before request range correctly

To get delayed-extent information, ext4_ext_fiemap_cb() looks up
pagecache, it thus collects information starting from a page's
head block.

If blocksize < pagesize, the beginning blocks of a page may lies
before the request range. So ext4_ext_fiemap_cb() should proceed
ignoring them, because they has been handled before. If no mapped
buffer in the range is found in the 1st page, we need to look up
the 2nd page, otherwise delayed-extents after a hole will be ignored.

Without this patch, xfstests 225 will hung on ext4 with 1K block.

Reported-by: Amir Goldstein <amir73il@users.sourceforge.net>
Signed-off-by: Yongqiang Yang <xiaoqiangnk@gmail.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/extents.c