]> git.baikalelectronics.ru Git - kernel.git/commit
ext4: fix data corruption caused by overlapping unaligned and aligned IO
authorLukas Czerner <lczerner@redhat.com>
Sat, 11 May 2019 01:45:33 +0000 (21:45 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Sat, 11 May 2019 01:45:33 +0000 (21:45 -0400)
commit7e0cddcf86bf13f6dad5b62c2d7da9622a42cb54
treeae7aa73980716ce76c8d30ff37211a6e457a629e
parent9861b427525ee08d8880648a9b8e84f56a7266a6
ext4: fix data corruption caused by overlapping unaligned and aligned IO

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: Lukas Czerner <lczerner@redhat.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Cc: stable@kernel.org
fs/ext4/file.c