• Eric Whitney's avatar
    ext4: disable dioread_nolock whenever delayed allocation is disabled · c8980e19
    Eric Whitney authored
    The patch "ext4: make dioread_nolock the default" (244adf64) causes
    generic/422 to fail when run in kvm-xfstests' ext3conv test case.  This
    applies both the dioread_nolock and nodelalloc mount options, a
    combination not previously tested by kvm-xfstests.  The failure occurs
    because the dioread_nolock code path splits a previously fallocated
    multiblock extent into a series of single block extents when overwriting
    a portion of that extent.  That causes allocation of an extent tree leaf
    node and a reshuffling of extents.  Once writeback is completed, the
    individual extents are recombined into a single extent, the extent is
    moved again, and the leaf node is deleted.  The difference in block
    utilization before and after writeback due to the leaf node triggers the
    failure.
    
    The original reason for this behavior was to avoid ENOSPC when handling
    I/O completions during writeback in the dioread_nolock code paths when
    delayed allocation is disabled.  It may no longer be necessary, because
    code was added in the past to reserve extra space to solve this problem
    when delayed allocation is enabled, and this code may also apply when
    delayed allocation is disabled.  Until this can be verified, don't use
    the dioread_nolock code paths if delayed allocation is disabled.
    Signed-off-by: default avatarEric Whitney <enwlinux@gmail.com>
    Link: https://lore.kernel.org/r/20200319150028.24592-1-enwlinux@gmail.comSigned-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    c8980e19
ext4_jbd2.h 17.2 KB