Miklos, FUSE passthrough patches v15 [1] are based on this series, so I am posting it to the list for completion. This v3 addresses most of your review comments on v2 posted by Bernd [2]. I added all the cleanup patches that you requested and addressed the review comments related to my io modes patch. I've also split it up the io modes infrastructure patch from Bernd's change to wait for parallel dio in mmap and caching open. The one thing I did not address is that I left the FOPEN_CACHE_IO flag as an internal flag as a way to signal "this dio file holds an iocachectr refcount". I wasn't sure that you are ok with it, but I wanted you to consider how the entire work looks after adding FOPEN_PASSTHROUGH. Bernd did not have much review comments to address so he has tested my branch and asked me to post it. Thanks, Amir. Changes since v2: - Split "wait for parallel dio" from "io modes" patch - FOPEN_CACHE_IO reserved flag cannot set set by server - O_DIRECT without FOPEN_DIRECT_IO opens in caching mode in anticipation for O_DIRECT flag change via fcntl() - FOPEN_PARALLEL_DIRECT_WRITES requires FOPEN_DIRECT_IO - Moved io mode helpers to iomode.c - Change return type of fuse_inode_*_io_cache() helpers - Separate fuse_dir_open() to not take the io open route at all - Remove the need for isdir arg to fuse_file_put() - Avoid post truncate attribute handling after atomic_open() [1] https://lore.kernel.org/linux-fsdevel/20240206142453.1906268-1-amir73il@xxxxxxxxx/ [2] https://lore.kernel.org/linux-fsdevel/20240131230827.207552-1-bschubert@xxxxxxx/ Amir Goldstein (6): fuse: factor out helper fuse_truncate_update_attr() fuse: allocate ff->release_args only if release is needed fuse: break up fuse_open_common() fuse: prepare for failing open response fuse: introduce inode io modes fuse: allow parallel dio writes with FUSE_DIRECT_IO_ALLOW_MMAP Bernd Schubert (3): fuse: Fix VM_MAYSHARE and direct_io_allow_mmap fuse: Create helper function if DIO write needs exclusive lock fuse: Add fuse_dio_lock/unlock helper functions fs/fuse/Makefile | 1 + fs/fuse/dir.c | 36 ++++- fs/fuse/file.c | 280 ++++++++++++++++++++++++-------------- fs/fuse/fuse_i.h | 30 +++- fs/fuse/iomode.c | 245 +++++++++++++++++++++++++++++++++ include/uapi/linux/fuse.h | 2 + 6 files changed, 482 insertions(+), 112 deletions(-) create mode 100644 fs/fuse/iomode.c -- 2.34.1