# SPDX-License-Identifier: GPL-2.0

config BTRFS_FS
	tristate "Btrfs filesystem support"
	select BLK_CGROUP_PUNT_BIO
	select CRYPTO
	select CRYPTO_CRC32C
	select LIBCRC32C
	select CRYPTO_XXHASH
	select CRYPTO_SHA256
	select CRYPTO_BLAKE2B
	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
	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 some basic sanity tests on the free space cache
	  code to make sure it is acting as it should.  These are mostly
	  regression tests and are only really interesting to btrfs
	  developers.

	  If unsure, say N.

config BTRFS_DEBUG
	bool "Btrfs debugging support"
	depends on BTRFS_FS
	help
	  Enable run-time debugging support for the btrfs filesystem. This may
	  enable additional and expensive checks with negative impact on
	  performance, or export extra information via sysfs.

	  If unsure, say N.

config BTRFS_ASSERT
	bool "Btrfs assert support"
	depends on BTRFS_FS
	help
	  Enable run-time assertion checking.  This will result in panics if
	  any of the assertions trip.  This is meant for btrfs developers only.

	  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:

	  - extent map shrinker - performance problems with too frequent shrinks

	  - send stream protocol v3 - fs-verity support

	  - checksum offload mode - sysfs knob to affect when checksums are
	                            calculated (at IO time, or in a thread)

	  - 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

	  If unsure, say N.

config BTRFS_FS_REF_VERIFY
	bool "Btrfs with the ref verify tool compiled in"
	depends on BTRFS_FS
	default n
	help
	  Enable run-time extent reference verification instrumentation.  This
	  is meant to be used by btrfs developers for tracking down extent
	  reference problems or verifying they didn't break something.

	  If unsure, say N.
