btrfs: add test for cases when a dio write has to fallback to a buffered write
authorFilipe Manana <fdmanana@suse.com>
Tue, 16 Mar 2021 12:22:15 +0000 (12:22 +0000)
committerEryu Guan <guaneryu@gmail.com>
Wed, 17 Mar 2021 17:40:01 +0000 (01:40 +0800)
commit4a2683ce3e6d60ceb1ac7af7ab3d830d02aa1f72
treefdc1cdff3cad6a3b9703aa875555fee5ba2e31f3
parent40f8dc416af3649fa1fe285c14f450f93e898780
btrfs: add test for cases when a dio write has to fallback to a buffered write

Test cases where a direct IO write, with O_DSYNC, can not be done and has
to fallback to a buffered write.

This is motivated by the fact we don't have existing tests for these cases
and in fact we had a regression for one case in the 5.10 kernel. This was
the case when doing a direct IO write, with O_DSYNC, against a file offset
that is not aligned to the filesystem's block size, which resulted in
triggering an assertion failure when btrfs is built with assertions enabled
(CONFIG_BTRFS_ASSERT=y). One openSUSE Tumbleweed user hit this frequently
when using Docker and DB2.

The kernel commit in 5.10 that introduced the regression was commit
0eb79294dbe328 ("btrfs: dio iomap DSYNC workaround")). In kernel 5.11 the
regression fixed, by pure chance, by commit ecfdc08b8cc65d ("btrfs: remove
dio iomap DSYNC workaround"). Since the commit that fixed the bug in 5.11
was dependent on a large patchset, a special and simple fix was added to
the stable kernel 5.10.18 by commit a6703c71153438 ("btrfs: fix crash after
non-aligned direct IO write with O_DSYNC").

Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
tests/btrfs/234 [new file with mode: 0755]
tests/btrfs/234.out [new file with mode: 0644]
tests/btrfs/group