Skip to content

Commit

Permalink
revokefs: Always bypass page cache for backend requests
Browse files Browse the repository at this point in the history
By default, FUSE runs in cached I/O mode[1]. That means some I/O
responses will be taken from the page cache instead of being handled by
the FUSE process. For files opened for reading that's not a problem as
all the requests are just passed through.

However, that is problematic for files opened for writing since those
requests need to be handled by the backend. It's particularly bad for a
file opened `O_RDWR` since `read` responses from the page cache are
likely to be wrong. Instruct FUSE to use `direct-io` for those files so
that the page cache is bypassed.

1. https://docs.kernel.org/filesystems/fuse-io.html

Fixes: flatpak#5452
(cherry picked from commit c4738f8)
  • Loading branch information
dbnicholson authored and smcv committed Nov 14, 2023
1 parent 99e44c1 commit b6e376f
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions revokefs/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,10 @@ do_open (const char *path, mode_t mode, struct fuse_file_info *finfo)
return fd;

finfo->fh = fd + REMOTE_FD_OFFSET;

/* Ensure all I/O requests bypass the page cache and are sent to
* the backend. */
finfo->direct_io = 1;
}

return 0;
Expand Down

0 comments on commit b6e376f

Please sign in to comment.