• Eric Whitney's avatar
    ext4: fix partial cluster handling for bigalloc file systems · c0634493
    Eric Whitney authored
    Commit 9cb00419, which enables hole punching for bigalloc file
    systems, exposed a bug introduced by commit 6ae06ff5 in an earlier
    release.  When run on a bigalloc file system, xfstests generic/013, 068,
    075, 083, 091, 100, 112, 127, 263, 269, and 270 fail with e2fsck errors
    or cause kernel error messages indicating that previously freed blocks
    are being freed again.
    
    The latter commit optimizes the selection of the starting extent in
    ext4_ext_rm_leaf() when hole punching by beginning with the extent
    supplied in the path argument rather than with the last extent in the
    leaf node (as is still done when truncating).  However, the code in
    rm_leaf that initially sets partial_cluster to track cluster sharing on
    extent boundaries is only guaranteed to run if rm_leaf starts with the
    last node in the leaf.  Consequently, partial_cluster is not correctly
    initialized when hole punching, and a cluster on the boundary of a
    punched region that should be retained may instead be deallocated.
    Signed-off-by: default avatarEric Whitney <enwlinux@gmail.com>
    Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
    Cc: stable@vger.kernel.org
    c0634493
extents.c 142 KB