• Lukas Czerner's avatar
    ext4: fix data corruption caused by overlapping unaligned and aligned IO · 0dc4c612
    Lukas Czerner authored
    commit 57a0da28 upstream.
    
    Unaligned AIO must be serialized because the zeroing of partial blocks
    of unaligned AIO can result in data corruption in case it's overlapping
    another in flight IO.
    
    Currently we wait for all unwritten extents before we submit unaligned
    AIO which protects data in case of unaligned AIO is following overlapping
    IO. However if a unaligned AIO is followed by overlapping aligned AIO we
    can still end up corrupting data.
    
    To fix this, we must make sure that the unaligned AIO is the only IO in
    flight by waiting for unwritten extents conversion not just before the
    IO submission, but right after it as well.
    
    This problem can be reproduced by xfstest generic/538
    Signed-off-by: default avatarLukas Czerner <lczerner@redhat.com>
    Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    0dc4c612
file.c 13.5 KB