summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHou Tao <houtao1@huawei.com>2019-03-07 16:29:19 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2019-03-07 18:32:01 -0800
commit67ceb1eca0acc045c9ef170a05f58fd710063967 (patch)
tree592bb6975f3121a771c94088056dd14bbf1c6cf5
parent660c9fc72e06d7a46d96d2cb8524a26565072a76 (diff)
downloadlwn-67ceb1eca0acc045c9ef170a05f58fd710063967.tar.gz
lwn-67ceb1eca0acc045c9ef170a05f58fd710063967.zip
fat: enable .splice_write to support splice on O_DIRECT file
Now splice() on O_DIRECT-opened fat file will return -EFAULT, that is because the default .splice_write, namely default_file_splice_write(), will construct an ITER_KVEC iov_iter and dio_refill_pages() in dio path can not handle it. Fix it by implementing .splice_write through iter_file_splice_write(). Spotted by xfs-tests generic/091. Link: http://lkml.kernel.org/r/20190210094754.56355-1-houtao1@huawei.com Signed-off-by: Hou Tao <houtao1@huawei.com> Acked-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--fs/fat/file.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/fat/file.c b/fs/fat/file.c
index 13935ee99e1e..b3bed32946b1 100644
--- a/fs/fat/file.c
+++ b/fs/fat/file.c
@@ -214,6 +214,7 @@ const struct file_operations fat_file_operations = {
#endif
.fsync = fat_file_fsync,
.splice_read = generic_file_splice_read,
+ .splice_write = iter_file_splice_write,
.fallocate = fat_fallocate,
};