Commit c55e0a55 authored by Tyler Fanelli's avatar Tyler Fanelli Committed by Miklos Szeredi
Browse files

fuse: Rename DIRECT_IO_RELAX to DIRECT_IO_ALLOW_MMAP



Although DIRECT_IO_RELAX's initial usage is to allow shared mmap, its
description indicates a purpose of reducing memory footprint. This
may imply that it could be further used to relax other DIRECT_IO
operations in the future.

Replace it with a flag DIRECT_IO_ALLOW_MMAP which does only one thing,
allow shared mmap of DIRECT_IO files while still bypassing the cache
on regular reads and writes.

[Miklos] Also Keep DIRECT_IO_RELAX definition for backward compatibility.

Signed-off-by: default avatarTyler Fanelli <tfanelli@redhat.com>
Fixes: e78662e8 ("fuse: add a new fuse init flag to relax restrictions in no cache mode")
Cc: <stable@vger.kernel.org> # v6.6
Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
parent 33cc938e
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -1448,7 +1448,7 @@ ssize_t fuse_direct_io(struct fuse_io_priv *io, struct iov_iter *iter,
	if (!ia)
		return -ENOMEM;

	if (fopen_direct_io && fc->direct_io_relax) {
	if (fopen_direct_io && fc->direct_io_allow_mmap) {
		res = filemap_write_and_wait_range(mapping, pos, pos + count - 1);
		if (res) {
			fuse_io_free(ia);
@@ -2466,9 +2466,9 @@ static int fuse_file_mmap(struct file *file, struct vm_area_struct *vma)

	if (ff->open_flags & FOPEN_DIRECT_IO) {
		/* Can't provide the coherency needed for MAP_SHARED
		 * if FUSE_DIRECT_IO_RELAX isn't set.
		 * if FUSE_DIRECT_IO_ALLOW_MMAP isn't set.
		 */
		if ((vma->vm_flags & VM_MAYSHARE) && !fc->direct_io_relax)
		if ((vma->vm_flags & VM_MAYSHARE) && !fc->direct_io_allow_mmap)
			return -ENODEV;

		invalidate_inode_pages2(file->f_mapping);
+2 −2
Original line number Diff line number Diff line
@@ -797,8 +797,8 @@ struct fuse_conn {
	/* Is tmpfile not implemented by fs? */
	unsigned int no_tmpfile:1;

	/* relax restrictions in FOPEN_DIRECT_IO mode */
	unsigned int direct_io_relax:1;
	/* Relax restrictions to allow shared mmap in FOPEN_DIRECT_IO mode */
	unsigned int direct_io_allow_mmap:1;

	/* Is statx not implemented by fs? */
	unsigned int no_statx:1;
+3 −3
Original line number Diff line number Diff line
@@ -1230,8 +1230,8 @@ static void process_init_reply(struct fuse_mount *fm, struct fuse_args *args,
				fc->init_security = 1;
			if (flags & FUSE_CREATE_SUPP_GROUP)
				fc->create_supp_group = 1;
			if (flags & FUSE_DIRECT_IO_RELAX)
				fc->direct_io_relax = 1;
			if (flags & FUSE_DIRECT_IO_ALLOW_MMAP)
				fc->direct_io_allow_mmap = 1;
		} else {
			ra_pages = fc->max_read / PAGE_SIZE;
			fc->no_lock = 1;
@@ -1278,7 +1278,7 @@ void fuse_send_init(struct fuse_mount *fm)
		FUSE_NO_OPENDIR_SUPPORT | FUSE_EXPLICIT_INVAL_DATA |
		FUSE_HANDLE_KILLPRIV_V2 | FUSE_SETXATTR_EXT | FUSE_INIT_EXT |
		FUSE_SECURITY_CTX | FUSE_CREATE_SUPP_GROUP |
		FUSE_HAS_EXPIRE_ONLY | FUSE_DIRECT_IO_RELAX;
		FUSE_HAS_EXPIRE_ONLY | FUSE_DIRECT_IO_ALLOW_MMAP;
#ifdef CONFIG_FUSE_DAX
	if (fm->fc->dax)
		flags |= FUSE_MAP_ALIGNMENT;
+6 −4
Original line number Diff line number Diff line
@@ -209,7 +209,7 @@
 *  - add FUSE_HAS_EXPIRE_ONLY
 *
 *  7.39
 *  - add FUSE_DIRECT_IO_RELAX
 *  - add FUSE_DIRECT_IO_ALLOW_MMAP
 *  - add FUSE_STATX and related structures
 */

@@ -409,8 +409,7 @@ struct fuse_file_lock {
 * FUSE_CREATE_SUPP_GROUP: add supplementary group info to create, mkdir,
 *			symlink and mknod (single group that matches parent)
 * FUSE_HAS_EXPIRE_ONLY: kernel supports expiry-only entry invalidation
 * FUSE_DIRECT_IO_RELAX: relax restrictions in FOPEN_DIRECT_IO mode, for now
 *                       allow shared mmap
 * FUSE_DIRECT_IO_ALLOW_MMAP: allow shared mmap in FOPEN_DIRECT_IO mode.
 */
#define FUSE_ASYNC_READ		(1 << 0)
#define FUSE_POSIX_LOCKS	(1 << 1)
@@ -449,7 +448,10 @@ struct fuse_file_lock {
#define FUSE_HAS_INODE_DAX	(1ULL << 33)
#define FUSE_CREATE_SUPP_GROUP	(1ULL << 34)
#define FUSE_HAS_EXPIRE_ONLY	(1ULL << 35)
#define FUSE_DIRECT_IO_RELAX	(1ULL << 36)
#define FUSE_DIRECT_IO_ALLOW_MMAP (1ULL << 36)

/* Obsolete alias for FUSE_DIRECT_IO_ALLOW_MMAP */
#define FUSE_DIRECT_IO_RELAX	FUSE_DIRECT_IO_ALLOW_MMAP

/**
 * CUSE INIT request/reply flags