# 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/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
	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

# 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 ARCH_SUPPORTS_HUGETLBFS
	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
	select SPARSEMEM_VMEMMAP_PREINIT if ARCH_WANT_HUGETLB_VMEMMAP_PREINIT

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/resctrl/Kconfig"
source "fs/romfs/Kconfig"
source "fs/pstore/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 CRC32
	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
