# SPDX-License-Identifier: GPL-2.0-only
#
# File system configuration
#

menu "File systems"

# Use unaligned word dcache accesses
config DCACHE_WORD_ACCESS
       bool

config VALIDATE_FS_PARSER
	bool "Validate filesystem parameter description"
	help
	  Enable this to perform validation of the parameter description for a
	  filesystem when it is registered.

config FS_IOMAP
	bool

# Stackable filesystems
config FS_STACK
	bool

config BUFFER_HEAD
	bool

# old blockdev_direct_IO implementation.  Use iomap for new code instead
config LEGACY_DIRECT_IO
	depends on BUFFER_HEAD
	bool

if BLOCK

source "fs/ext2/Kconfig"
source "fs/ext4/Kconfig"
source "fs/jbd2/Kconfig"

config FS_MBCACHE
# Meta block cache for Extended Attributes (ext2/ext3/ext4)
	tristate
	default y if EXT2_FS=y && EXT2_FS_XATTR
	default y if EXT4_FS=y
	default m if EXT2_FS_XATTR || EXT4_FS

source "fs/reiserfs/Kconfig"
source "fs/jfs/Kconfig"

source "fs/xfs/Kconfig"
source "fs/gfs2/Kconfig"
source "fs/ocfs2/Kconfig"
source "fs/btrfs/Kconfig"
source "fs/nilfs2/Kconfig"
source "fs/f2fs/Kconfig"
source "fs/bcachefs/Kconfig"
source "fs/zonefs/Kconfig"

endif # BLOCK

config FS_DAX
	bool "File system based Direct Access (DAX) support"
	depends on MMU
	depends on ZONE_DEVICE || FS_DAX_LIMITED
	select FS_IOMAP
	select DAX
	help
	  Direct Access (DAX) can be used on memory-backed block devices.
	  If the block device supports DAX and the filesystem supports DAX,
	  then you can avoid using the pagecache to buffer I/Os.  Turning
	  on this option will compile in support for DAX.

	  For a DAX device to support file system access it needs to have
	  struct pages.  For the nfit based NVDIMMs this can be enabled
	  using the ndctl utility:

		# ndctl create-namespace --force --reconfig=namespace0.0 \
			--mode=fsdax --map=mem

	  See the 'create-namespace' man page for details on the overhead of
	  --map=mem:
	  https://docs.pmem.io/ndctl-user-guide/ndctl-man-pages/ndctl-create-namespace

          For ndctl to work CONFIG_DEV_DAX needs to be enabled as well. For most
	  file systems DAX support needs to be manually enabled globally or
	  per-inode using a mount option as well.  See the file documentation in
	  Documentation/filesystems/dax.rst for details.

	  If you do not have a block device that is capable of using this,
	  or if unsure, say N.  Saying Y will increase the size of the kernel
	  by about 5kB.

config FS_DAX_PMD
	bool
	default FS_DAX
	depends on FS_DAX
	depends on ZONE_DEVICE
	depends on TRANSPARENT_HUGEPAGE

# Selected by DAX drivers that do not expect filesystem DAX to support
# get_user_pages() of DAX mappings. I.e. "limited" indicates no support
# for fork() of processes with MAP_SHARED mappings or support for
# direct-I/O to a DAX mapping.
config FS_DAX_LIMITED
	bool

# Posix ACL utility routines
#
# Note: Posix ACLs can be implemented without these helpers.  Never use
# this symbol for ifdefs in core code.
#
config FS_POSIX_ACL
	def_bool n

config EXPORTFS
	tristate

config EXPORTFS_BLOCK_OPS
	bool "Enable filesystem export operations for block IO"
	help
	  This option enables the export operations for a filesystem to support
	  external block IO.

config FILE_LOCKING
	bool "Enable POSIX file locking API" if EXPERT
	default y
	help
	  This option enables standard file locking support, required
          for filesystems like NFS and for the flock() system
          call. Disabling this option saves about 11k.

source "fs/crypto/Kconfig"

source "fs/verity/Kconfig"

source "fs/notify/Kconfig"

source "fs/quota/Kconfig"

source "fs/autofs/Kconfig"
source "fs/fuse/Kconfig"
source "fs/overlayfs/Kconfig"

menu "Caches"

source "fs/netfs/Kconfig"
source "fs/cachefiles/Kconfig"

endmenu

if BLOCK
menu "CD-ROM/DVD Filesystems"

source "fs/isofs/Kconfig"
source "fs/udf/Kconfig"

endmenu
endif # BLOCK

if BLOCK
menu "DOS/FAT/EXFAT/NT Filesystems"

source "fs/fat/Kconfig"
source "fs/exfat/Kconfig"
source "fs/ntfs3/Kconfig"

endmenu
endif # BLOCK

menu "Pseudo filesystems"

source "fs/proc/Kconfig"
source "fs/kernfs/Kconfig"
source "fs/sysfs/Kconfig"

config TMPFS
	bool "Tmpfs virtual memory file system support (former shm fs)"
	depends on SHMEM
	select MEMFD_CREATE
	help
	  Tmpfs is a file system which keeps all files in virtual memory.

	  Everything in tmpfs is temporary in the sense that no files will be
	  created on your hard drive. The files live in memory and swap
	  space. If you unmount a tmpfs instance, everything stored therein is
	  lost.

	  See <file:Documentation/filesystems/tmpfs.rst> for details.

config TMPFS_POSIX_ACL
	bool "Tmpfs POSIX Access Control Lists"
	depends on TMPFS
	select TMPFS_XATTR
	select FS_POSIX_ACL
	help
	  POSIX Access Control Lists (ACLs) support additional access rights
	  for users and groups beyond the standard owner/group/world scheme,
	  and this option selects support for ACLs specifically for tmpfs
	  filesystems.

	  If you've selected TMPFS, it's possible that you'll also need
	  this option as there are a number of Linux distros that require
	  POSIX ACL support under /dev for certain features to work properly.
	  For example, some distros need this feature for ALSA-related /dev
	  files for sound to work properly.  In short, if you're not sure,
	  say Y.

config TMPFS_XATTR
	bool "Tmpfs extended attributes"
	depends on TMPFS
	default n
	help
	  Extended attributes are name:value pairs associated with inodes by
	  the kernel or by users (see the attr(5) manual page for details).

	  This enables support for the trusted.*, security.* and user.*
	  namespaces.

	  You need this for POSIX ACL support on tmpfs.

	  If unsure, say N.

config TMPFS_INODE64
	bool "Use 64-bit ino_t by default in tmpfs"
	depends on TMPFS && 64BIT
	default n
	help
	  tmpfs has historically used only inode numbers as wide as an unsigned
	  int. In some cases this can cause wraparound, potentially resulting
	  in multiple files with the same inode number on a single device. This
	  option makes tmpfs use the full width of ino_t by default, without
	  needing to specify the inode64 option when mounting.

	  But if a long-lived tmpfs is to be accessed by 32-bit applications so
	  ancient that opening a file larger than 2GiB fails with EINVAL, then
	  the INODE64 config option and inode64 mount option risk operations
	  failing with EOVERFLOW once 33-bit inode numbers are reached.

	  To override this configured default, use the inode32 or inode64
	  option when mounting.

	  If unsure, say N.

config TMPFS_QUOTA
	bool "Tmpfs quota support"
	depends on TMPFS
	select QUOTA
	help
	  Quota support allows to set per user and group limits for tmpfs
	  usage.  Say Y to enable quota support. Once enabled you can control
	  user and group quota enforcement with quota, usrquota and grpquota
	  mount options.

	  If unsure, say N.

config ARCH_SUPPORTS_HUGETLBFS
	def_bool n

menuconfig HUGETLBFS
	bool "HugeTLB file system support"
	depends on X86 || SPARC64 || ARCH_SUPPORTS_HUGETLBFS || BROKEN
	depends on (SYSFS || SYSCTL)
	select MEMFD_CREATE
	select PADATA if SMP
	help
	  hugetlbfs is a filesystem backing for HugeTLB pages, based on
	  ramfs. For architectures that support it, say Y here and read
	  <file:Documentation/admin-guide/mm/hugetlbpage.rst> for details.

	  If unsure, say N.

if HUGETLBFS
config HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON
	bool "HugeTLB Vmemmap Optimization (HVO) defaults to on"
	default n
	depends on HUGETLB_PAGE_OPTIMIZE_VMEMMAP
	help
	  The HugeTLB Vmemmap Optimization (HVO) defaults to off. Say Y here to
	  enable HVO by default. It can be disabled via hugetlb_free_vmemmap=off
	  (boot command line) or hugetlb_optimize_vmemmap (sysctl).
endif # HUGETLBFS

config HUGETLB_PAGE
	def_bool HUGETLBFS
	select XARRAY_MULTI

config HUGETLB_PAGE_OPTIMIZE_VMEMMAP
	def_bool HUGETLB_PAGE
	depends on ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP
	depends on SPARSEMEM_VMEMMAP

config HUGETLB_PMD_PAGE_TABLE_SHARING
	def_bool HUGETLB_PAGE
	depends on ARCH_WANT_HUGE_PMD_SHARE && SPLIT_PMD_PTLOCKS

config ARCH_HAS_GIGANTIC_PAGE
	bool

source "fs/configfs/Kconfig"
source "fs/efivarfs/Kconfig"

endmenu

menuconfig MISC_FILESYSTEMS
	bool "Miscellaneous filesystems"
	default y
	help
	  Say Y here to get to see options for various miscellaneous
	  filesystems, such as filesystems that came from other
	  operating systems.

	  This option alone does not add any kernel code.

	  If you say N, all options in this submenu will be skipped and
	  disabled; if unsure, say Y here.

if MISC_FILESYSTEMS

source "fs/orangefs/Kconfig"
source "fs/adfs/Kconfig"
source "fs/affs/Kconfig"
source "fs/ecryptfs/Kconfig"
source "fs/hfs/Kconfig"
source "fs/hfsplus/Kconfig"
source "fs/befs/Kconfig"
source "fs/bfs/Kconfig"
source "fs/efs/Kconfig"
source "fs/jffs2/Kconfig"
# UBIFS File system configuration
source "fs/ubifs/Kconfig"
source "fs/cramfs/Kconfig"
source "fs/squashfs/Kconfig"
source "fs/freevxfs/Kconfig"
source "fs/minix/Kconfig"
source "fs/omfs/Kconfig"
source "fs/hpfs/Kconfig"
source "fs/qnx4/Kconfig"
source "fs/qnx6/Kconfig"
source "fs/romfs/Kconfig"
source "fs/pstore/Kconfig"
source "fs/sysv/Kconfig"
source "fs/ufs/Kconfig"
source "fs/erofs/Kconfig"
source "fs/vboxsf/Kconfig"

endif # MISC_FILESYSTEMS

menuconfig NETWORK_FILESYSTEMS
	bool "Network File Systems"
	default y
	depends on NET
	help
	  Say Y here to get to see options for network filesystems and
	  filesystem-related networking code, such as NFS daemon and
	  RPCSEC security modules.

	  This option alone does not add any kernel code.

	  If you say N, all options in this submenu will be skipped and
	  disabled; if unsure, say Y here.

if NETWORK_FILESYSTEMS

source "fs/nfs/Kconfig"
source "fs/nfsd/Kconfig"

config GRACE_PERIOD
	tristate

config LOCKD
	tristate
	depends on FILE_LOCKING
	select GRACE_PERIOD

config LOCKD_V4
	bool
	depends on NFSD || NFS_V3
	depends on FILE_LOCKING
	default y

config NFS_ACL_SUPPORT
	tristate
	select FS_POSIX_ACL

config NFS_COMMON
	bool
	depends on NFSD || NFS_FS || LOCKD
	default y

config NFS_COMMON_LOCALIO_SUPPORT
	tristate
	depends on NFS_LOCALIO
	default y if NFSD=y || NFS_FS=y
	default m if NFSD=m && NFS_FS=m
	select SUNRPC

config NFS_LOCALIO
	bool "NFS client and server support for LOCALIO auxiliary protocol"
	depends on NFSD && NFS_FS
	select NFS_COMMON_LOCALIO_SUPPORT
	default n
	help
	  Some NFS servers support an auxiliary NFS LOCALIO protocol
	  that is not an official part of the NFS protocol.

	  This option enables support for the LOCALIO protocol in the
	  kernel's NFS server and client. Enable this to permit local
	  NFS clients to bypass the network when issuing reads and
	  writes to the local NFS server.

	  If unsure, say N.

config NFS_V4_2_SSC_HELPER
	bool
	default y if NFS_V4_2

source "net/sunrpc/Kconfig"
source "fs/ceph/Kconfig"

source "fs/smb/Kconfig"
source "fs/coda/Kconfig"
source "fs/afs/Kconfig"
source "fs/9p/Kconfig"

endif # NETWORK_FILESYSTEMS

source "fs/nls/Kconfig"
source "fs/dlm/Kconfig"
source "fs/unicode/Kconfig"

config IO_WQ
	bool

endmenu
