On Mon, 21 Aug 2023 at 19:48, Bernd Schubert <bschubert@xxxxxxx> wrote: > > There were two code paths direct-io writes could > take. When daemon/server side did not set FOPEN_DIRECT_IO > fuse_cache_write_iter -> direct_write_fallback > and with FOPEN_DIRECT_IO being set > fuse_direct_write_iter > > Advantage of fuse_direct_write_iter is that it has optimizations > for parallel DIO writes - it might only take a shared inode lock, > instead of the exclusive lock. > > With commits b5a2a3a0b776/80e4f25262f9 the fuse_direct_write_iter > path also handles concurrent page IO (dirty flush and page release), > just the condition on fc->direct_io_relax had to be removed. > > Performance wise this basically gives the same improvements as > commit 153524053bbb, just O_DIRECT is sufficient, without the need > that server side sets FOPEN_DIRECT_IO > (it has to set FOPEN_PARALLEL_DIRECT_WRITES), though. Consolidating the various direct IO paths would be really nice. Problem is that fuse_direct_write_iter() lacks some code from generic_file_direct_write() and also completely lacks direct_write_fallback(). So more thought needs to go into this. Thanks, Miklos