This series is mostly about mmap, direct-IO and inode IO modes. (new in this series is FOPEN_CACHE_IO). It brings back the shared lock for FOPEN_DIRECT_IO when FUSE_DIRECT_IO_ALLOW_MMAP is set and is also preparation work for Amirs work on fuse-passthrough and also for shared lock O_DIRECT and direct-IO code consolidation I have patches for. Patch 1/5 was already posted before https://patchwork.kernel.org/project/linux-fsdevel/patch/20231213150703.6262-1-bschubert@xxxxxxx/ but is included here again, as especially patch 5/5 has a dependency on it. Amir has also spotted a typo in the commit message of the initial patch, which is corrected here. Patches 2/5 and 3/5 add helper functions, which are needed by the main patch (5/5) in this series and are be also needed by another fuse direct-IO series. That series needs the helper functions in fuse_cache_write_iter, thus, these new helpers are above that function. Patch 4/5 allows to fail fuse_finish_open and is a preparation to handle conflicting IO modes from the server side and will also be needed for fuse passthrough. Patch 5/5 is the main patch in the series, which adds inode IO modes, which is needed to re-enable shared DIO writes locks when FUSE_DIRECT_IO_ALLOW_MMAP is set. Furthermore, these IO modes are also needed by Amirs WIP fuse passthrough work. The conflict of FUSE_DIRECT_IO_ALLOW_MMAP and FOPEN_PARALLEL_DIRECT_WRITES was detected by xfstest generic/095. This patch series was tested by running a loop of that test and also by multiple runs of the complete xfstest suite. For testing with libfuse a version is needed that includes this pull request https://github.com/libfuse/libfuse/pull/870 To: Miklos Szeredi <miklos@xxxxxxxxxx> Cc: linux-fsdevel@xxxxxxxxxxxxxxx Cc: Amir Goldstein <amir73il@xxxxxxxxx> Cc: Bernd Schubert <bernd.schubert@xxxxxxxxxxx> --- Changes in v2: Amir: - Added one more patch (4/5) "fuse: prepare for failing open response" - Updated the 5/5 (previously 4/4) fuse: introduce inode io modes - Fix FOPEN_CACHE_IO release, release could have happened without being actually taken (error cases, directory, dax-inode) - fuse_file_io_open does not implicitly set FOPEN_DIRECT_IO anymore, but waits until concurrent shared-locked direct-io is done or switched an exclusive lock). Amir Goldstein (2): fuse: prepare for failing open response fuse: introduce inode io modes 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/dir.c | 8 +- fs/fuse/file.c | 339 ++++++++++++++++++++++++++++++++------ fs/fuse/fuse_i.h | 81 ++++++++- include/uapi/linux/fuse.h | 2 + 4 files changed, 375 insertions(+), 55 deletions(-) -- 2.40.1