# SPDX-License-Identifier: GPL-2.0-only
config XFS_FS
	tristate "XFS filesystem support"
	depends on BLOCK
	select EXPORTFS
	select CRC32
	select FS_IOMAP
	help
	  XFS is a high performance journaling filesystem which originated
	  on the SGI IRIX platform.  It is completely multi-threaded, can
	  support large files and large filesystems, extended attributes,
	  variable block sizes, is extent based, and makes extensive use of
	  Btrees (directories, extents, free space) to aid both performance
	  and scalability.

	  Refer to the documentation at <http://oss.sgi.com/projects/xfs/>
	  for complete details.  This implementation is on-disk compatible
	  with the IRIX version of XFS.

	  To compile this file system support as a module, choose M here: the
	  module will be called xfs.  Be aware, however, that if the file
	  system of your root partition is compiled as a module, you'll need
	  to use an initial ramdisk (initrd) to boot.

config XFS_SUPPORT_V4
	bool "Support deprecated V4 (crc=0) format"
	depends on XFS_FS
	default y
	help
	  The V4 filesystem format lacks certain features that are supported
	  by the V5 format, such as metadata checksumming, strengthened
	  metadata verification, and the ability to store timestamps past the
	  year 2038.  Because of this, the V4 format is deprecated.  All users
	  should upgrade by backing up their files, reformatting, and restoring
	  from the backup.

	  Administrators and users can detect a V4 filesystem by running
	  xfs_info against a filesystem mountpoint and checking for a string
	  beginning with "crc=".  If the string "crc=0" is found, the
	  filesystem is a V4 filesystem.  If no such string is found, please
	  upgrade xfsprogs to the latest version and try again.

	  This option will become default N in September 2025.  Support for the
	  V4 format will be removed entirely in September 2030.  Distributors
	  can say N here to withdraw support earlier.

	  To continue supporting the old V4 format (crc=0), say Y.
	  To close off an attack surface, say N.

config XFS_SUPPORT_ASCII_CI
	bool "Support deprecated case-insensitive ascii (ascii-ci=1) format"
	depends on XFS_FS
	default y
	help
	  The ASCII case insensitivity filesystem feature only works correctly
	  on systems that have been coerced into using ISO 8859-1, and it does
	  not work on extended attributes.  The kernel has no visibility into
	  the locale settings in userspace, so it corrupts UTF-8 names.
	  Enabling this feature makes XFS vulnerable to mixed case sensitivity
	  attacks.  Because of this, the feature is deprecated.  All users
	  should upgrade by backing up their files, reformatting, and restoring
	  from the backup.

	  Administrators and users can detect such a filesystem by running
	  xfs_info against a filesystem mountpoint and checking for a string
	  beginning with "ascii-ci=".  If the string "ascii-ci=1" is found, the
	  filesystem is a case-insensitive filesystem.  If no such string is
	  found, please upgrade xfsprogs to the latest version and try again.

	  This option will become default N in September 2025.  Support for the
	  feature will be removed entirely in September 2030.  Distributors
	  can say N here to withdraw support earlier.

	  To continue supporting case-insensitivity (ascii-ci=1), say Y.
	  To close off an attack surface, say N.

config XFS_QUOTA
	bool "XFS Quota support"
	depends on XFS_FS
	select QUOTACTL
	help
	  If you say Y here, you will be able to set limits for disk usage on
	  a per user and/or a per group basis under XFS.  XFS considers quota
	  information as filesystem metadata and uses journaling to provide a
	  higher level guarantee of consistency.  The on-disk data format for
	  quota is also compatible with the IRIX version of XFS, allowing a
	  filesystem to be migrated between Linux and IRIX without any need
	  for conversion.

	  If unsure, say N.  More comprehensive documentation can be found in
	  README.quota in the xfsprogs package.  XFS quota can be used either
	  with or without the generic quota support enabled (CONFIG_QUOTA) -
	  they are completely independent subsystems.

config XFS_POSIX_ACL
	bool "XFS POSIX ACL support"
	depends on XFS_FS
	select FS_POSIX_ACL
	help
	  POSIX Access Control Lists (ACLs) support permissions for users and
	  groups beyond the owner/group/world scheme.

	  If you don't know what Access Control Lists are, say N.

config XFS_RT
	bool "XFS Realtime subvolume support"
	depends on XFS_FS
	help
	  If you say Y here you will be able to mount and use XFS filesystems
	  which contain a realtime subvolume.  The realtime subvolume is a
	  separate area of disk space where only file data is stored.  It was
	  originally designed to provide deterministic data rates suitable
	  for media streaming applications, but is also useful as a generic
	  mechanism for ensuring data and metadata/log I/Os are completely
	  separated.  Regular file I/Os are isolated to a separate device
	  from all other requests, and this can be done quite transparently
	  to applications via the inherit-realtime directory inode flag.

	  See the xfs man page in section 5 for additional information.

	  If unsure, say N.

config XFS_DRAIN_INTENTS
	bool
	select JUMP_LABEL if HAVE_ARCH_JUMP_LABEL

config XFS_LIVE_HOOKS
	bool
	select JUMP_LABEL if HAVE_ARCH_JUMP_LABEL

config XFS_MEMORY_BUFS
	bool

config XFS_BTREE_IN_MEM
	bool

config XFS_ONLINE_SCRUB
	bool "XFS online metadata check support"
	default n
	depends on XFS_FS
	depends on TMPFS && SHMEM
	select XFS_LIVE_HOOKS
	select XFS_DRAIN_INTENTS
	select XFS_MEMORY_BUFS
	help
	  If you say Y here you will be able to check metadata on a
	  mounted XFS filesystem.  This feature is intended to reduce
	  filesystem downtime by supplementing xfs_repair.  The key
	  advantage here is to look for problems proactively so that
	  they can be dealt with in a controlled manner.

	  This feature is considered EXPERIMENTAL.  Use with caution!

	  See the xfs_scrub man page in section 8 for additional information.

	  If unsure, say N.

config XFS_ONLINE_SCRUB_STATS
	bool "XFS online metadata check usage data collection"
	default y
	depends on XFS_ONLINE_SCRUB
	select DEBUG_FS
	help
	  If you say Y here, the kernel will gather usage data about
	  the online metadata check subsystem.  This includes the number
	  of invocations, the outcomes, and the results of repairs, if any.
	  This may slow down scrub slightly due to the use of high precision
	  timers and the need to merge per-invocation information into the
	  filesystem counters.

	  Usage data are collected in /sys/kernel/debug/xfs/scrub.

	  If unsure, say N.

config XFS_ONLINE_REPAIR
	bool "XFS online metadata repair support"
	default n
	depends on XFS_FS && XFS_ONLINE_SCRUB
	select XFS_BTREE_IN_MEM
	help
	  If you say Y here you will be able to repair metadata on a
	  mounted XFS filesystem.  This feature is intended to reduce
	  filesystem downtime by fixing minor problems before they cause the
	  filesystem to go down.  However, it requires that the filesystem be
	  formatted with secondary metadata, such as reverse mappings and inode
	  parent pointers.

	  This feature is considered EXPERIMENTAL.  Use with caution!

	  See the xfs_scrub man page in section 8 for additional information.

	  If unsure, say N.

config XFS_WARN
	bool "XFS Verbose Warnings"
	depends on XFS_FS && !XFS_DEBUG
	help
	  Say Y here to get an XFS build with many additional warnings.
	  It converts ASSERT checks to WARN, so will log any out-of-bounds
	  conditions that occur that would otherwise be missed. It is much
	  lighter weight than XFS_DEBUG and does not modify algorithms and will
	  not cause the kernel to panic on non-fatal errors.

	  However, similar to XFS_DEBUG, it is only advisable to use this if you
	  are debugging a particular problem.

config XFS_DEBUG
	bool "XFS Debugging support"
	depends on XFS_FS
	help
	  Say Y here to get an XFS build with many debugging features,
	  including ASSERT checks, function wrappers around macros,
	  and extra sanity-checking functions in various code paths.

	  Note that the resulting code will be HUGE and SLOW, and probably
	  not useful unless you are debugging a particular problem.

	  Say N unless you are an XFS developer, or you play one on TV.

config XFS_DEBUG_EXPENSIVE
	bool "XFS expensive debugging checks"
	depends on XFS_FS && XFS_DEBUG
	help
	  Say Y here to get an XFS build with expensive debugging checks
	  enabled.  These checks may affect performance significantly.

	  Note that the resulting code will be HUGER and SLOWER, and probably
	  not useful unless you are debugging a particular problem.

	  Say N unless you are an XFS developer, or you play one on TV.

config XFS_ASSERT_FATAL
	bool "XFS fatal asserts"
	default y
	depends on XFS_FS && XFS_DEBUG
	help
	  Set the default DEBUG mode ASSERT failure behavior.

	  Say Y here to cause DEBUG mode ASSERT failures to result in fatal
	  errors that BUG() the kernel by default. If you say N, ASSERT failures
	  result in warnings.

	  This behavior can be modified at runtime via sysfs.
