• Eric Whitney's avatar
    ext4: fix loss of delalloc extent info in ext4_zero_range() · 94426f4b
    Eric Whitney authored
    In ext4_zero_range(), removing a file's entire block range from the
    extent status tree removes all records of that file's delalloc extents.
    The delalloc accounting code uses this information, and its loss can
    then lead to accounting errors and kernel warnings at writeback time and
    subsequent file system damage.  This is most noticeable on bigalloc
    file systems where code in ext4_ext_map_blocks() handles cases where
    delalloc extents share clusters with a newly allocated extent.
    
    Because we're not deleting a block range and are correctly updating the
    status of its associated extent, there is no need to remove anything
    from the extent status tree.
    
    When this patch is combined with an unrelated bug fix for
    ext4_zero_range(), kernel warnings and e2fsck errors reported during
    xfstests runs on bigalloc filesystems are greatly reduced without
    introducing regressions on other xfstests-bld test scenarios.
    Signed-off-by: default avatarEric Whitney <enwlinux@gmail.com>
    Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    94426f4b
extents.c 155 KB