# SPDX-License-Identifier: GPL-2.0
#
# Block layer core configuration
#
menuconfig BLOCK
       bool "Enable the block layer" if EXPERT
       default y
       select FS_IOMAP
       select SBITMAP
       help
	 Provide block layer support for the kernel.

	 Disable this option to remove the block layer support from the
	 kernel. This may be useful for embedded devices.

	 If this option is disabled:

	   - block device files will become unusable
	   - some filesystems (such as ext3) will become unavailable.

	 Also, SCSI character devices and USB storage will be disabled since
	 they make use of various block layer definitions and facilities.

	 Say Y here unless you know you really don't want to mount disks and
	 suchlike.

if BLOCK

config BLOCK_LEGACY_AUTOLOAD
	bool "Legacy autoloading support"
	default y
	help
	  Enable loading modules and creating block device instances based on
	  accesses through their device special file.  This is a historic Linux
	  feature and makes no sense in a udev world where device files are
	  created on demand, but scripts that manually create device nodes and
	  then call losetup might rely on this behavior.

config BLK_RQ_ALLOC_TIME
	bool

config BLK_CGROUP_RWSTAT
	bool

config BLK_CGROUP_PUNT_BIO
	bool

config BLK_DEV_BSG_COMMON
	tristate

config BLK_ICQ
	bool

config BLK_DEV_BSGLIB
	bool "Block layer SG support v4 helper lib"
	select BLK_DEV_BSG_COMMON
	help
	  Subsystems will normally enable this if needed. Users will not
	  normally need to manually enable this.

	  If unsure, say N.

config BLK_DEV_INTEGRITY
	bool "Block layer data integrity support"
	select CRC_T10DIF
	select CRC64_ROCKSOFT
	help
	Some storage devices allow extra information to be
	stored/retrieved to help protect the data.  The block layer
	data integrity option provides hooks which can be used by
	filesystems to ensure better data integrity.

	Say yes here if you have a storage device that provides the
	T10/SCSI Data Integrity Field or the T13/ATA External Path
	Protection.  If in doubt, say N.

config BLK_DEV_WRITE_MOUNTED
	bool "Allow writing to mounted block devices"
	default y
	help
	When a block device is mounted, writing to its buffer cache is very
	likely going to cause filesystem corruption. It is also rather easy to
	crash the kernel in this way since the filesystem has no practical way
	of detecting these writes to buffer cache and verifying its metadata
	integrity. However there are some setups that need this capability
	like running fsck on read-only mounted root device, modifying some
	features on mounted ext4 filesystem, and similar. If you say N, the
	kernel will prevent processes from writing to block devices that are
	mounted by filesystems which provides some more protection from runaway
	privileged processes and generally makes it much harder to crash
	filesystem drivers. Note however that this does not prevent
	underlying device(s) from being modified by other means, e.g. by
	directly submitting SCSI commands or through access to lower layers of
	storage stack. If in doubt, say Y. The configuration can be overridden
	with the bdev_allow_write_mounted boot option.

config BLK_DEV_ZONED
	bool "Zoned block device support"
	help
	Block layer zoned block device support. This option enables
	support for ZAC/ZBC/ZNS host-managed and host-aware zoned block
	devices.

	Say yes here if you have a ZAC, ZBC, or ZNS storage device.

config BLK_DEV_THROTTLING
	bool "Block layer bio throttling support"
	depends on BLK_CGROUP
	select BLK_CGROUP_RWSTAT
	help
	Block layer bio throttling support. It can be used to limit
	the IO rate to a device. IO rate policies are per cgroup and
	one needs to mount and use blkio cgroup controller for creating
	cgroups and specifying per device IO rate policies.

	See Documentation/admin-guide/cgroup-v1/blkio-controller.rst for more information.

config BLK_WBT
	bool "Enable support for block device writeback throttling"
	help
	Enabling this option enables the block layer to throttle buffered
	background writeback from the VM, making it more smooth and having
	less impact on foreground operations. The throttling is done
	dynamically on an algorithm loosely based on CoDel, factoring in
	the realtime performance of the disk.

config BLK_WBT_MQ
	bool "Enable writeback throttling by default"
	default y
	depends on BLK_WBT
	help
	Enable writeback throttling by default for request-based block devices.

config BLK_CGROUP_IOLATENCY
	bool "Enable support for latency based cgroup IO protection"
	depends on BLK_CGROUP
	help
	Enabling this option enables the .latency interface for IO throttling.
	The IO controller will attempt to maintain average IO latencies below
	the configured latency target, throttling anybody with a higher latency
	target than the victimized group.

	Note, this is an experimental interface and could be changed someday.

config BLK_CGROUP_FC_APPID
	bool "Enable support to track FC I/O Traffic across cgroup applications"
	depends on BLK_CGROUP && NVME_FC
	help
	  Enabling this option enables the support to track FC I/O traffic across
	  cgroup applications. It enables the Fabric and the storage targets to
	  identify, monitor, and handle FC traffic based on VM tags by inserting
	  application specific identification into the FC frame.

config BLK_CGROUP_IOCOST
	bool "Enable support for cost model based cgroup IO controller"
	depends on BLK_CGROUP
	select BLK_RQ_ALLOC_TIME
	help
	Enabling this option enables the .weight interface for cost
	model based proportional IO control.  The IO controller
	distributes IO capacity between different groups based on
	their share of the overall weight distribution.

config BLK_CGROUP_IOPRIO
	bool "Cgroup I/O controller for assigning an I/O priority class"
	depends on BLK_CGROUP
	help
	Enable the .prio interface for assigning an I/O priority class to
	requests. The I/O priority class affects the order in which an I/O
	scheduler and block devices process requests. Only some I/O schedulers
	and some block devices support I/O priorities.

config BLK_DEBUG_FS
	bool "Block layer debugging information in debugfs"
	default y
	depends on DEBUG_FS
	help
	Include block layer debugging information in debugfs. This information
	is mostly useful for kernel developers, but it doesn't incur any cost
	at runtime.

	Unless you are building a kernel for a tiny system, you should
	say Y here.

config BLK_SED_OPAL
	bool "Logic for interfacing with Opal enabled SEDs"
	depends on KEYS
	select PSERIES_PLPKS if PPC_PSERIES
	select PSERIES_PLPKS_SED if PPC_PSERIES
	help
	Builds Logic for interfacing with Opal enabled controllers.
	Enabling this option enables users to setup/unlock/lock
	Locking ranges for SED devices using the Opal protocol.

config BLK_INLINE_ENCRYPTION
	bool "Enable inline encryption support in block layer"
	help
	  Build the blk-crypto subsystem. Enabling this lets the
	  block layer handle encryption, so users can take
	  advantage of inline encryption hardware if present.

config BLK_INLINE_ENCRYPTION_FALLBACK
	bool "Enable crypto API fallback for blk-crypto"
	depends on BLK_INLINE_ENCRYPTION
	select CRYPTO
	select CRYPTO_SKCIPHER
	help
	  Enabling this lets the block layer handle inline encryption
	  by falling back to the kernel crypto API when inline
	  encryption hardware is not present.

source "block/partitions/Kconfig"

config BLK_MQ_PCI
	def_bool PCI

config BLK_MQ_VIRTIO
	bool
	depends on VIRTIO
	default y

config BLK_PM
	def_bool PM

# do not use in new code
config BLOCK_HOLDER_DEPRECATED
	bool

config BLK_MQ_STACKING
	bool

source "block/Kconfig.iosched"

endif # BLOCK
