• Eric Whitney's avatar
    ext4: fix end of leaf partial cluster handling · 5bf43760
    Eric Whitney authored
    The fix in commit ad6599ab ("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: default avatarEric Whitney <enwlinux@gmail.com>
    Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    5bf43760
extents.c 156 KB