# SPDX-License-Identifier: GPL-2.0

config BTRFS_FS
	tristate "Btrfs filesystem support"
	select BLK_CGROUP_PUNT_BIO
	select CRC32
	select CRYPTO_LIB_BLAKE2B
	select CRYPTO_LIB_SHA256
	select ZLIB_INFLATE
	select ZLIB_DEFLATE
	select LZO_COMPRESS
	select LZO_DECOMPRESS
	select ZSTD_COMPRESS
	select ZSTD_DECOMPRESS
	select FS_IOMAP
	select RAID6_PQ
	select XOR_BLOCKS
	select XXHASH
	depends on PAGE_SIZE_LESS_THAN_256KB

	help
	  Btrfs is a general purpose copy-on-write filesystem with extents,
	  writable snapshotting, support for multiple devices and many more
	  features focused on fault tolerance, repair and easy administration.

	  The filesystem disk format is no longer unstable, and it's not
	  expected to change unless there are strong reasons to do so. If there
	  is a format change, file systems with a unchanged format will
	  continue to be mountable and usable by newer kernels.

	  For more information, please see the web pages at
	  https://btrfs.readthedocs.io

	  To compile this file system support as a module, choose M here. The
	  module will be called btrfs.

	  If unsure, say N.

config BTRFS_FS_POSIX_ACL
	bool "Btrfs POSIX Access Control Lists"
	depends on BTRFS_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 BTRFS_FS_RUN_SANITY_TESTS
	bool "Btrfs will run sanity tests upon loading"
	depends on BTRFS_FS
	help
	  This will run sanity tests for core functionality like free space,
	  extent maps, extent io, extent buffers, inodes, qgroups and others,
	  at module load time.  These are mostly regression tests and are only
	  interesting to developers.

	  If unsure, say N.

config BTRFS_DEBUG
	bool "Btrfs debugging support"
	depends on BTRFS_FS
	select REF_TRACKER if STACKTRACE_SUPPORT
	help
	  Enable run-time debugging support for the btrfs filesystem.

	  Additional potentially expensive checks, debugging functionality or
	  sysfs exported information is enabled, like leak checks of internal
	  objects, optional forced space fragmentation and /sys/fs/btrfs/debug .
	  This has negative impact on performance.

	  If unsure, say N.

config BTRFS_ASSERT
	bool "Btrfs assert support"
	depends on BTRFS_FS
	help
	  Enable run-time assertion checking. Additional safety checks are
	  done, simple enough not to affect performance but verify invariants
	  and assumptions of code to run properly. This may result in panics,
	  and is meant for developers but can be enabled in general.

	  If unsure, say N.

config BTRFS_EXPERIMENTAL
	bool "Btrfs experimental features"
	depends on BTRFS_FS
	default n
	help
	  Enable experimental features.  These features may not be stable enough
	  for end users.  This is meant for btrfs developers or users who wish
	  to test the functionality and report problems.

	  Current list:

	  - COW fixup worker warning - last warning before removing the
				       functionality catching out-of-band page
				       dirtying, not necessary since 5.8

	  - RAID mirror read policy - additional read policies for balancing
				      reading from redundant block group
				      profiles (currently: pid, round-robin,
				      fixed devid)

	  - send stream protocol v3 - fs-verity support

	  - raid-stripe-tree - additional mapping of extents to devices to
			       support RAID1* profiles on zoned devices,
			       RAID56 not yet supported

	  - extent tree v2 - complex rework of extent tracking

	  - large folio and block size (> page size) support

	  - shutdown ioctl and auto-degradation support

	  - asynchronous checksum generation for data writes

	  - remap-tree - logical address remapping tree

	  If unsure, say N.
