# SPDX-License-Identifier: GPL-2.0-only
config XFS_FS
	tristate "XFS filesystem support"
	depends on BLOCK
	select EXPORTFS
	select LIBCRC32C
	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_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_ONLINE_SCRUB
	bool "XFS online metadata check support"
	default n
	depends on XFS_FS
	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_REPAIR
	bool "XFS online metadata repair support"
	default n
	depends on XFS_FS && XFS_ONLINE_SCRUB
	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_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.
