Re: [External] [fuse-devel] [PATCH 3/3] fuse: write back dirty pages before direct write in direct_io_relax mode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On July 21, 2023 1:27:26 PM GMT+02:00, Hao Xu <hao.xu@xxxxxxxxx> wrote:
>On 7/21/23 14:35, Jiachen Zhang wrote:
>> 
>> On 2023/6/30 17:46, Hao Xu wrote:
>>> From: Hao Xu <howeyxu@xxxxxxxxxxx>
>>> 
>>> 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 write to avoid data loss.
>>> 
>>> Signed-off-by: Hao Xu <howeyxu@xxxxxxxxxxx>
>>> ---
>>>   fs/fuse/file.c | 7 +++++++
>>>   1 file changed, 7 insertions(+)
>>> 
>>> diff --git a/fs/fuse/file.c b/fs/fuse/file.c
>>> index 176f719f8fc8..7c9167c62bf6 100644
>>> --- a/fs/fuse/file.c
>>> +++ b/fs/fuse/file.c
>>> @@ -1485,6 +1485,13 @@ ssize_t fuse_direct_io(struct fuse_io_priv *io, struct iov_iter *iter,
>>>       if (!ia)
>>>           return -ENOMEM;
>>> +    if (fopen_direct_write && 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 (!write)
>>>               inode_lock(inode);
>> 
>> Tested-by: Jiachen Zhang <zhangjiachen.jaycee@xxxxxxxxxxxxx>
>> 
>> 
>> Looks good to me.
>> 
>> By the way, the behaviour would be a first FUSE_WRITE flushing the page cache, followed by a second FUSE_WRITE doing the direct IO. In the future, further optimization could be first write into the page cache and then flush the dirty page to the FUSE daemon.
>> 
>
>I think this makes sense, cannot think of any issue in it for now, so
>I'll do that change and send next version, super thanks, Jiachen!
>
>Thanks,
>Hao
>
>> 
>> Thanks,
>> Jiachen
>

On my phone, sorry if mail formatting is not optimal.
Do I understand it right? You want DIO code path copy into pages and then flush/invalidate these pages? That would be punish DIO for for the unlikely case there are also dirty pages (discouraged IO pattern).




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux