# SPDX-License-Identifier: GPL-2.0-only
config FUSE_FS
	tristate "FUSE (Filesystem in Userspace) support"
	select FS_POSIX_ACL
	select FS_IOMAP
	help
	  With FUSE it is possible to implement a fully functional filesystem
	  in a userspace program.

	  There's also a companion library: libfuse2.  This library is available
	  from the FUSE homepage:
	  <https://github.com/libfuse/>
	  although chances are your distribution already has that library
	  installed if you've installed the "fuse" package itself.

	  See <file:Documentation/filesystems/fuse/fuse.rst> for more information.
	  See <file:Documentation/Changes> for needed library/utility version.

	  If you want to develop a userspace FS, or if you want to use
	  a filesystem based on FUSE, answer Y or M.

config CUSE
	tristate "Character device in Userspace support"
	depends on FUSE_FS
	help
	  This FUSE extension allows character devices to be
	  implemented in userspace.

	  If you want to develop or use a userspace character device
	  based on CUSE, answer Y or M.

config VIRTIO_FS
	tristate "Virtio Filesystem"
	depends on FUSE_FS
	select VIRTIO
	help
	  The Virtio Filesystem allows guests to mount file systems from the
	  host.

	  If you want to share files between guests or with the host, answer Y
	  or M.

config FUSE_DAX
	bool "Virtio Filesystem Direct Host Memory Access support"
	default y
	select INTERVAL_TREE
	depends on VIRTIO_FS
	depends on FS_DAX
	depends on DAX
	help
	  This allows bypassing guest page cache and allows mapping host page
	  cache directly in guest address space.

	  If you want to allow mounting a Virtio Filesystem with the "dax"
	  option, answer Y.

config FUSE_PASSTHROUGH
	bool "FUSE passthrough operations support"
	default y
	depends on FUSE_FS
	select FS_STACK
	help
	  This allows bypassing FUSE server by mapping specific FUSE operations
	  to be performed directly on a backing file.

	  If you want to allow passthrough operations, answer Y.

config FUSE_IO_URING
	bool "FUSE communication over io-uring"
	default y
	depends on FUSE_FS
	depends on IO_URING
	help
	  This allows sending FUSE requests over the io-uring interface and
          also adds request core affinity.

	  If you want to allow fuse server/client communication through io-uring,
	  answer Y
