# SPDX-License-Identifier: GPL-2.0

config BTRFS_FS
	tristate "Btrfs filesystem support"
	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
	select SRCU
	depends on !PPC_256K_PAGES	# powerpc
	depends on !PAGE_SIZE_256KB	# hexagon

	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
	  http://btrfs.wiki.kernel.org.

	  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_CHECK_INTEGRITY
	bool "Btrfs with integrity check tool compiled in (DANGEROUS)"
	depends on BTRFS_FS
	help
	  Adds code that examines all block write requests (including
	  writes of the super block). The goal is to verify that the
	  state of the filesystem on disk is always consistent, i.e.,
	  after a power-loss or kernel panic event the filesystem is
	  in a consistent state.

	  If the integrity check tool is included and activated in
	  the mount options, plenty of kernel memory is used, and
	  plenty of additional CPU cycles are spent. Enabling this
	  functionality is not intended for normal use.

	  In most cases, unless you are a btrfs developer who needs
	  to verify the integrity of (super)-block write requests
	  during the run of a regression test, 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_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.
