Commit b5a2a3a0 authored by Hao Xu's avatar Hao Xu Committed by Miklos Szeredi

fuse: write back dirty pages before direct write in direct_io_relax mode

In direct_io_relax mode, there can be shared mmaped files and thus dirty
pages in its page cache.  Therefore those dirty pages should be written
back to backend before direct io to avoid data loss.
Signed-off-by: default avatarHao Xu <howeyxu@tencent.com>
Reviewed-by: default avatarJiachen Zhang <zhangjiachen.jaycee@bytedance.com>
Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
parent e78662e8
...@@ -1448,6 +1448,13 @@ ssize_t fuse_direct_io(struct fuse_io_priv *io, struct iov_iter *iter, ...@@ -1448,6 +1448,13 @@ ssize_t fuse_direct_io(struct fuse_io_priv *io, struct iov_iter *iter,
if (!ia) if (!ia)
return -ENOMEM; return -ENOMEM;
if (fopen_direct_io && fc->direct_io_relax) {
res = filemap_write_and_wait_range(mapping, pos, pos + count - 1);
if (res) {
fuse_io_free(ia);
return res;
}
}
if (!cuse && fuse_range_is_writeback(inode, idx_from, idx_to)) { if (!cuse && fuse_range_is_writeback(inode, idx_from, idx_to)) {
if (!write) if (!write)
inode_lock(inode); inode_lock(inode);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment