ext4: use FIEMAP_EXTENT_LAST flag for last extent in fiemap
authorLukas Czerner <lczerner@redhat.com>
Mon, 6 Jun 2011 04:06:52 +0000 (00:06 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 6 Jun 2011 04:06:52 +0000 (00:06 -0400)
commitc03f8aa9abdd517477c2021ea1251939b4da49e6
treee68aabc965801c85fb2b2aa1cfd42ad32bcd0b1f
parentf17722f917b2f21497deb6edc62fb1683daa08e6
ext4: use FIEMAP_EXTENT_LAST flag for last extent in fiemap

Currently we are not marking the extent as the last one
(FIEMAP_EXTENT_LAST) if there is a hole at the end of the file. This is
because we just do not check for it right now and continue searching for
next extent. But at the point we hit the hole at the end of the file, it
is too late.

This commit adds check for the allocated block in subsequent extent and
if there is no more extents (block = EXT_MAX_BLOCKS) just flag the
current one as the last one.

This behaviour has been spotted unintentionally by 252 xfstest, when the
test hangs out, because of wrong loop condition. However on other
filesystems (like xfs) it will exit anyway, because we notice the last
extent flag and exit.

With this patch xfstest 252 does not hang anymore, ext4 fiemap
implementation still reports bad extent type in some cases, however
this seems to be different issue.

Signed-off-by: Lukas Czerner <lczerner@redhat.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/ext4_extents.h
fs/ext4/extents.c