]> git.baikalelectronics.ru Git - kernel.git/commit
Revert "btrfs: switch to iomap_dio_rw() for dio"
authorDavid Sterba <dsterba@suse.com>
Tue, 9 Jun 2020 17:56:06 +0000 (19:56 +0200)
committerDavid Sterba <dsterba@suse.com>
Sat, 13 Jun 2020 23:19:02 +0000 (01:19 +0200)
commitd0b8f8aa7ceb4ce4e512be6b5ee1a1f9438d38fb
treeb19873031657b8f2c5870cfbc683c67c29547733
parent249e71f9fbcdbff674ad9529f2b412d839a0d826
Revert "btrfs: switch to iomap_dio_rw() for dio"

This reverts commit 6e1fb14e86fec6f6a66ed1239fdf19523a761161.

This patch reverts the main part of switching direct io implementation
to iomap infrastructure. There's a problem in invalidate page that
couldn't be solved as regression in this development cycle.

The problem occurs when buffered and direct io are mixed, and the ranges
overlap. Although this is not recommended, filesystems implement
measures or fallbacks to make it somehow work. In this case, fallback to
buffered IO would be an option for btrfs (this already happens when
direct io is done on compressed data), but the change would be needed in
the iomap code, bringing new semantics to other filesystems.

Another problem arises when again the buffered and direct ios are mixed,
invalidation fails, then -EIO is set on the mapping and fsync will fail,
though there's no real error.

There have been discussions how to fix that, but revert seems to be the
least intrusive option.

Link: https://lore.kernel.org/linux-btrfs/20200528192103.xm45qoxqmkw7i5yl@fiona/
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/Kconfig
fs/btrfs/ctree.h
fs/btrfs/file.c
fs/btrfs/inode.c