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
  • Loading branch information
dbnicholson committed Jun 27, 2023
1 parent 4c6136a commit be79531
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 be79531

Please sign in to comment.