mbox series

[v15,0/9] FUSE passthrough for file io

Message ID 20240206142453.1906268-1-amir73il@gmail.com (mailing list archive)
Headers show
Series FUSE passthrough for file io | expand

Message

Amir Goldstein Feb. 6, 2024, 2:24 p.m. UTC
Miklos,

The fuse passthrough code of v14 patches [1] was failing some tests
that did mmaped write and failed due to stale attribute cache.

To resolve that issue and to clarify semantics, I worked together with
Bernd to implement inode io modes [2].

When a FUSE inode is open in passthrough mode, it cannot be opened
in caching mode and that inode has an associated backing file, which
is like an O_PATH file to hold a reference to the backing inode.

That backing inode is used by the last patch to auto-invalidate inode
attributes in passthrough mode to fix the failing tests.
In theory, the backing inode could be used to copy the attributes to
FUSE inode (overlayfs style), but the code leaves GETATTR in the hands
of the server, in case backing inode and FUSE inode attributes differ.

These patches are based on my latest fuse_io_mode branch [3], where
I have addressed your comments on my patch in Bernd's v2 patches,
including all requested cleanups.

I was going to wait for Bernd to test and re-post the io mode patches,
but since you said that you really hope we can get fuse-backing-fd [4]
into shape for the next merge window, I decided to post the patches.

Thanks,
Amir.

Changes since v14:
- backing_file helpers already merged
- Remove readdir passthrough
- Associate backing file to inode
- Use io modes to prevent open of inode in conflicting modes
- Prevent open of inodes with conflicting backing files
- Auto-invalidate inode attributes in passthrough mode

[1] https://lore.kernel.org/linux-fsdevel/20231016160902.2316986-1-amir73il@gmail.com/
[2] https://lore.kernel.org/linux-fsdevel/20240131230827.207552-1-bschubert@ddn.com/
[3] https://github.com/amir73il/linux/commits/fuse_io_mode-060224
[4] https://github.com/amir73il/linux/commits/fuse-backing-fd-v15

Amir Goldstein (9):
  fuse: factor out helper for FUSE_DEV_IOC_CLONE
  fuse: introduce FUSE_PASSTHROUGH capability
  fuse: implement ioctls to manage backing files
  fuse: prepare for opening file in passthrough mode
  fuse: implement open in passthrough mode
  fuse: implement read/write passthrough
  fuse: implement splice read/write passthrough
  fuse: implement passthrough for mmap
  fuse: auto-invalidate inode attributes in passthrough mode

 fs/fuse/Kconfig           |  11 +
 fs/fuse/Makefile          |   1 +
 fs/fuse/dev.c             |  98 ++++++---
 fs/fuse/dir.c             |  16 +-
 fs/fuse/file.c            |  99 ++++++---
 fs/fuse/fuse_i.h          | 118 ++++++++++-
 fs/fuse/inode.c           |  35 ++++
 fs/fuse/iomode.c          | 105 ++++++++--
 fs/fuse/passthrough.c     | 410 ++++++++++++++++++++++++++++++++++++++
 include/uapi/linux/fuse.h |  23 ++-
 10 files changed, 838 insertions(+), 78 deletions(-)
 create mode 100644 fs/fuse/passthrough.c