OSDN Git Service

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)
commit5bf43760654fa618fb8bb1612ee2d7ae164f7f94
tree6d54071f41a3980e45a2eda128deb1b42f5cb1b4
parentf4226d9ea400e7124120571b1e89504c79f2e953
ext4: fix end of leaf partial cluster handling

The fix in commit ad6599ab3ac9 ("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