]> git.baikalelectronics.ru Git - kernel.git/commit
ext4: fix end of leaf partial cluster handling
authorEric Whitney <enwlinux@gmail.com>
Sun, 23 Nov 2014 05:58:11 +0000 (00:58 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 23 Nov 2014 05:58:11 +0000 (00:58 -0500)
commitdd2d9b9355b74687006139254dec4aa6257bf111
tree6d54071f41a3980e45a2eda128deb1b42f5cb1b4
parenta200f0f2d5059af7f3110c4f59b7516dadba914a
ext4: fix end of leaf partial cluster handling

The fix in commit cc63aa2975c4 ("ext4: fix premature freeing of
partial clusters split across leaf blocks"), intended to avoid
dereferencing an invalid extent pointer when determining whether a
partial cluster should be freed, wasn't quite good enough.  Assure that
at least one extent remains at the start of the leaf once the hole has
been punched.  Otherwise, the pointer to the extent to the right of the
hole will be invalid and a partial cluster will be incorrectly freed.

Set partial_cluster to 0 when we can tell we've hit the left edge of
the punched region within the leaf.  This prevents incorrect freeing
of a partial cluster when ext4_ext_rm_leaf is called one last time
during extent tree traversal after the punched region has been removed.

Adjust comments to reflect code changes and a correction.  Remove a bit
of dead code.

Signed-off-by: Eric Whitney <enwlinux@gmail.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/extents.c