1 # SPDX-License-Identifier: GPL-2.0-only
2 #
3 # Block device driver configuration
4 #
5 
6 menuconfig MD
7 	bool "Multiple devices driver support (RAID and LVM)"
8 	depends on BLOCK
9 	help
10 	  Support multiple physical spindles through a single logical device.
11 	  Required for RAID and logical volume management.
12 
13 if MD
14 
15 config BLK_DEV_MD
16 	tristate "RAID support"
17 	select BLOCK_HOLDER_DEPRECATED if SYSFS
18 	help
19 	  This driver lets you combine several hard disk partitions into one
20 	  logical block device. This can be used to simply append one
21 	  partition to another one or to combine several redundant hard disks
22 	  into a RAID1/4/5 device so as to provide protection against hard
23 	  disk failures. This is called "Software RAID" since the combining of
24 	  the partitions is done by the kernel. "Hardware RAID" means that the
25 	  combining is done by a dedicated controller; if you have such a
26 	  controller, you do not need to say Y here.
27 
28 	  More information about Software RAID on Linux is contained in the
29 	  Software RAID mini-HOWTO, available from
30 	  <https://www.tldp.org/docs.html#howto>. There you will also learn
31 	  where to get the supporting user space utilities raidtools.
32 
33 	  If unsure, say N.
34 
35 config MD_AUTODETECT
36 	bool "Autodetect RAID arrays during kernel boot"
37 	depends on BLK_DEV_MD=y
38 	default y
39 	help
40 	  If you say Y here, then the kernel will try to autodetect raid
41 	  arrays as part of its boot process.
42 
43 	  If you don't use raid and say Y, this autodetection can cause
44 	  a several-second delay in the boot time due to various
45 	  synchronisation steps that are part of this step.
46 
47 	  If unsure, say Y.
48 
49 config MD_LINEAR
50 	tristate "Linear (append) mode (deprecated)"
51 	depends on BLK_DEV_MD
52 	help
53 	  If you say Y here, then your multiple devices driver will be able to
54 	  use the so-called linear mode, i.e. it will combine the hard disk
55 	  partitions by simply appending one to the other.
56 
57 	  To compile this as a module, choose M here: the module
58 	  will be called linear.
59 
60 	  If unsure, say Y.
61 
62 config MD_RAID0
63 	tristate "RAID-0 (striping) mode"
64 	depends on BLK_DEV_MD
65 	help
66 	  If you say Y here, then your multiple devices driver will be able to
67 	  use the so-called raid0 mode, i.e. it will combine the hard disk
68 	  partitions into one logical device in such a fashion as to fill them
69 	  up evenly, one chunk here and one chunk there. This will increase
70 	  the throughput rate if the partitions reside on distinct disks.
71 
72 	  Information about Software RAID on Linux is contained in the
73 	  Software-RAID mini-HOWTO, available from
74 	  <https://www.tldp.org/docs.html#howto>. There you will also
75 	  learn where to get the supporting user space utilities raidtools.
76 
77 	  To compile this as a module, choose M here: the module
78 	  will be called raid0.
79 
80 	  If unsure, say Y.
81 
82 config MD_RAID1
83 	tristate "RAID-1 (mirroring) mode"
84 	depends on BLK_DEV_MD
85 	help
86 	  A RAID-1 set consists of several disk drives which are exact copies
87 	  of each other.  In the event of a mirror failure, the RAID driver
88 	  will continue to use the operational mirrors in the set, providing
89 	  an error free MD (multiple device) to the higher levels of the
90 	  kernel.  In a set with N drives, the available space is the capacity
91 	  of a single drive, and the set protects against a failure of (N - 1)
92 	  drives.
93 
94 	  Information about Software RAID on Linux is contained in the
95 	  Software-RAID mini-HOWTO, available from
96 	  <https://www.tldp.org/docs.html#howto>.  There you will also
97 	  learn where to get the supporting user space utilities raidtools.
98 
99 	  If you want to use such a RAID-1 set, say Y.  To compile this code
100 	  as a module, choose M here: the module will be called raid1.
101 
102 	  If unsure, say Y.
103 
104 config MD_RAID10
105 	tristate "RAID-10 (mirrored striping) mode"
106 	depends on BLK_DEV_MD
107 	help
108 	  RAID-10 provides a combination of striping (RAID-0) and
109 	  mirroring (RAID-1) with easier configuration and more flexible
110 	  layout.
111 	  Unlike RAID-0, but like RAID-1, RAID-10 requires all devices to
112 	  be the same size (or at least, only as much as the smallest device
113 	  will be used).
114 	  RAID-10 provides a variety of layouts that provide different levels
115 	  of redundancy and performance.
116 
117 	  RAID-10 requires mdadm-1.7.0 or later, available at:
118 
119 	  https://www.kernel.org/pub/linux/utils/raid/mdadm/
120 
121 	  If unsure, say Y.
122 
123 config MD_RAID456
124 	tristate "RAID-4/RAID-5/RAID-6 mode"
125 	depends on BLK_DEV_MD
126 	select RAID6_PQ
127 	select LIBCRC32C
128 	select ASYNC_MEMCPY
129 	select ASYNC_XOR
130 	select ASYNC_PQ
131 	select ASYNC_RAID6_RECOV
132 	help
133 	  A RAID-5 set of N drives with a capacity of C MB per drive provides
134 	  the capacity of C * (N - 1) MB, and protects against a failure
135 	  of a single drive. For a given sector (row) number, (N - 1) drives
136 	  contain data sectors, and one drive contains the parity protection.
137 	  For a RAID-4 set, the parity blocks are present on a single drive,
138 	  while a RAID-5 set distributes the parity across the drives in one
139 	  of the available parity distribution methods.
140 
141 	  A RAID-6 set of N drives with a capacity of C MB per drive
142 	  provides the capacity of C * (N - 2) MB, and protects
143 	  against a failure of any two drives. For a given sector
144 	  (row) number, (N - 2) drives contain data sectors, and two
145 	  drives contains two independent redundancy syndromes.  Like
146 	  RAID-5, RAID-6 distributes the syndromes across the drives
147 	  in one of the available parity distribution methods.
148 
149 	  Information about Software RAID on Linux is contained in the
150 	  Software-RAID mini-HOWTO, available from
151 	  <https://www.tldp.org/docs.html#howto>. There you will also
152 	  learn where to get the supporting user space utilities raidtools.
153 
154 	  If you want to use such a RAID-4/RAID-5/RAID-6 set, say Y.  To
155 	  compile this code as a module, choose M here: the module
156 	  will be called raid456.
157 
158 	  If unsure, say Y.
159 
160 config MD_MULTIPATH
161 	tristate "Multipath I/O support (deprecated)"
162 	depends on BLK_DEV_MD
163 	help
164 	  MD_MULTIPATH provides a simple multi-path personality for use
165 	  the MD framework.  It is not under active development.  New
166 	  projects should consider using DM_MULTIPATH which has more
167 	  features and more testing.
168 
169 	  If unsure, say N.
170 
171 config MD_FAULTY
172 	tristate "Faulty test module for MD (deprecated)"
173 	depends on BLK_DEV_MD
174 	help
175 	  The "faulty" module allows for a block device that occasionally returns
176 	  read or write errors.  It is useful for testing.
177 
178 	  In unsure, say N.
179 
180 
181 config MD_CLUSTER
182 	tristate "Cluster Support for MD"
183 	depends on BLK_DEV_MD
184 	depends on DLM
185 	default n
186 	help
187 	Clustering support for MD devices. This enables locking and
188 	synchronization across multiple systems on the cluster, so all
189 	nodes in the cluster can access the MD devices simultaneously.
190 
191 	This brings the redundancy (and uptime) of RAID levels across the
192 	nodes of the cluster. Currently, it can work with raid1 and raid10
193 	(limited support).
194 
195 	If unsure, say N.
196 
197 source "drivers/md/bcache/Kconfig"
198 
199 config BLK_DEV_DM_BUILTIN
200 	bool
201 
202 config BLK_DEV_DM
203 	tristate "Device mapper support"
204 	select BLOCK_HOLDER_DEPRECATED if SYSFS
205 	select BLK_DEV_DM_BUILTIN
206 	select BLK_MQ_STACKING
207 	depends on DAX || DAX=n
208 	help
209 	  Device-mapper is a low level volume manager.  It works by allowing
210 	  people to specify mappings for ranges of logical sectors.  Various
211 	  mapping types are available, in addition people may write their own
212 	  modules containing custom mappings if they wish.
213 
214 	  Higher level volume managers such as LVM2 use this driver.
215 
216 	  To compile this as a module, choose M here: the module will be
217 	  called dm-mod.
218 
219 	  If unsure, say N.
220 
221 config DM_DEBUG
222 	bool "Device mapper debugging support"
223 	depends on BLK_DEV_DM
224 	help
225 	  Enable this for messages that may help debug device-mapper problems.
226 
227 	  If unsure, say N.
228 
229 config DM_BUFIO
230        tristate
231        depends on BLK_DEV_DM
232 	help
233 	 This interface allows you to do buffered I/O on a device and acts
234 	 as a cache, holding recently-read blocks in memory and performing
235 	 delayed writes.
236 
237 config DM_DEBUG_BLOCK_MANAGER_LOCKING
238        bool "Block manager locking"
239        depends on DM_BUFIO
240 	help
241 	 Block manager locking can catch various metadata corruption issues.
242 
243 	 If unsure, say N.
244 
245 config DM_DEBUG_BLOCK_STACK_TRACING
246        bool "Keep stack trace of persistent data block lock holders"
247        depends on STACKTRACE_SUPPORT && DM_DEBUG_BLOCK_MANAGER_LOCKING
248        select STACKTRACE
249 	help
250 	 Enable this for messages that may help debug problems with the
251 	 block manager locking used by thin provisioning and caching.
252 
253 	 If unsure, say N.
254 
255 config DM_BIO_PRISON
256        tristate
257        depends on BLK_DEV_DM
258 	help
259 	 Some bio locking schemes used by other device-mapper targets
260 	 including thin provisioning.
261 
262 source "drivers/md/persistent-data/Kconfig"
263 
264 config DM_UNSTRIPED
265        tristate "Unstriped target"
266        depends on BLK_DEV_DM
267 	help
268 	  Unstripes I/O so it is issued solely on a single drive in a HW
269 	  RAID0 or dm-striped target.
270 
271 config DM_CRYPT
272 	tristate "Crypt target support"
273 	depends on BLK_DEV_DM
274 	depends on (ENCRYPTED_KEYS || ENCRYPTED_KEYS=n)
275 	depends on (TRUSTED_KEYS || TRUSTED_KEYS=n)
276 	select CRYPTO
277 	select CRYPTO_CBC
278 	select CRYPTO_ESSIV
279 	help
280 	  This device-mapper target allows you to create a device that
281 	  transparently encrypts the data on it. You'll need to activate
282 	  the ciphers you're going to use in the cryptoapi configuration.
283 
284 	  For further information on dm-crypt and userspace tools see:
285 	  <https://gitlab.com/cryptsetup/cryptsetup/wikis/DMCrypt>
286 
287 	  To compile this code as a module, choose M here: the module will
288 	  be called dm-crypt.
289 
290 	  If unsure, say N.
291 
292 config DM_SNAPSHOT
293        tristate "Snapshot target"
294        depends on BLK_DEV_DM
295        select DM_BUFIO
296 	help
297 	 Allow volume managers to take writable snapshots of a device.
298 
299 config DM_THIN_PROVISIONING
300        tristate "Thin provisioning target"
301        depends on BLK_DEV_DM
302        select DM_PERSISTENT_DATA
303        select DM_BIO_PRISON
304 	help
305 	 Provides thin provisioning and snapshots that share a data store.
306 
307 config DM_CACHE
308        tristate "Cache target (EXPERIMENTAL)"
309        depends on BLK_DEV_DM
310        default n
311        select DM_PERSISTENT_DATA
312        select DM_BIO_PRISON
313 	help
314 	 dm-cache attempts to improve performance of a block device by
315 	 moving frequently used data to a smaller, higher performance
316 	 device.  Different 'policy' plugins can be used to change the
317 	 algorithms used to select which blocks are promoted, demoted,
318 	 cleaned etc.  It supports writeback and writethrough modes.
319 
320 config DM_CACHE_SMQ
321        tristate "Stochastic MQ Cache Policy (EXPERIMENTAL)"
322        depends on DM_CACHE
323        default y
324 	help
325 	 A cache policy that uses a multiqueue ordered by recent hits
326 	 to select which blocks should be promoted and demoted.
327 	 This is meant to be a general purpose policy.  It prioritises
328 	 reads over writes.  This SMQ policy (vs MQ) offers the promise
329 	 of less memory utilization, improved performance and increased
330 	 adaptability in the face of changing workloads.
331 
332 config DM_WRITECACHE
333 	tristate "Writecache target"
334 	depends on BLK_DEV_DM
335 	help
336 	   The writecache target caches writes on persistent memory or SSD.
337 	   It is intended for databases or other programs that need extremely
338 	   low commit latency.
339 
340 	   The writecache target doesn't cache reads because reads are supposed
341 	   to be cached in standard RAM.
342 
343 config DM_EBS
344 	tristate "Emulated block size target (EXPERIMENTAL)"
345 	depends on BLK_DEV_DM && !HIGHMEM
346 	select DM_BUFIO
347 	help
348 	  dm-ebs emulates smaller logical block size on backing devices
349 	  with larger ones (e.g. 512 byte sectors on 4K native disks).
350 
351 config DM_ERA
352        tristate "Era target (EXPERIMENTAL)"
353        depends on BLK_DEV_DM
354        default n
355        select DM_PERSISTENT_DATA
356        select DM_BIO_PRISON
357 	help
358 	 dm-era tracks which parts of a block device are written to
359 	 over time.  Useful for maintaining cache coherency when using
360 	 vendor snapshots.
361 
362 config DM_CLONE
363        tristate "Clone target (EXPERIMENTAL)"
364        depends on BLK_DEV_DM
365        default n
366        select DM_PERSISTENT_DATA
367 	help
368 	 dm-clone produces a one-to-one copy of an existing, read-only source
369 	 device into a writable destination device. The cloned device is
370 	 visible/mountable immediately and the copy of the source device to the
371 	 destination device happens in the background, in parallel with user
372 	 I/O.
373 
374 	 If unsure, say N.
375 
376 config DM_MIRROR
377        tristate "Mirror target"
378        depends on BLK_DEV_DM
379 	help
380 	 Allow volume managers to mirror logical volumes, also
381 	 needed for live data migration tools such as 'pvmove'.
382 
383 config DM_LOG_USERSPACE
384 	tristate "Mirror userspace logging"
385 	depends on DM_MIRROR && NET
386 	select CONNECTOR
387 	help
388 	  The userspace logging module provides a mechanism for
389 	  relaying the dm-dirty-log API to userspace.  Log designs
390 	  which are more suited to userspace implementation (e.g.
391 	  shared storage logs) or experimental logs can be implemented
392 	  by leveraging this framework.
393 
394 config DM_RAID
395        tristate "RAID 1/4/5/6/10 target"
396        depends on BLK_DEV_DM
397        select MD_RAID0
398        select MD_RAID1
399        select MD_RAID10
400        select MD_RAID456
401        select BLK_DEV_MD
402 	help
403 	 A dm target that supports RAID1, RAID10, RAID4, RAID5 and RAID6 mappings
404 
405 	 A RAID-5 set of N drives with a capacity of C MB per drive provides
406 	 the capacity of C * (N - 1) MB, and protects against a failure
407 	 of a single drive. For a given sector (row) number, (N - 1) drives
408 	 contain data sectors, and one drive contains the parity protection.
409 	 For a RAID-4 set, the parity blocks are present on a single drive,
410 	 while a RAID-5 set distributes the parity across the drives in one
411 	 of the available parity distribution methods.
412 
413 	 A RAID-6 set of N drives with a capacity of C MB per drive
414 	 provides the capacity of C * (N - 2) MB, and protects
415 	 against a failure of any two drives. For a given sector
416 	 (row) number, (N - 2) drives contain data sectors, and two
417 	 drives contains two independent redundancy syndromes.  Like
418 	 RAID-5, RAID-6 distributes the syndromes across the drives
419 	 in one of the available parity distribution methods.
420 
421 config DM_ZERO
422 	tristate "Zero target"
423 	depends on BLK_DEV_DM
424 	help
425 	  A target that discards writes, and returns all zeroes for
426 	  reads.  Useful in some recovery situations.
427 
428 config DM_MULTIPATH
429 	tristate "Multipath target"
430 	depends on BLK_DEV_DM
431 	# nasty syntax but means make DM_MULTIPATH independent
432 	# of SCSI_DH if the latter isn't defined but if
433 	# it is, DM_MULTIPATH must depend on it.  We get a build
434 	# error if SCSI_DH=m and DM_MULTIPATH=y
435 	depends on !SCSI_DH || SCSI
436 	help
437 	  Allow volume managers to support multipath hardware.
438 
439 config DM_MULTIPATH_QL
440 	tristate "I/O Path Selector based on the number of in-flight I/Os"
441 	depends on DM_MULTIPATH
442 	help
443 	  This path selector is a dynamic load balancer which selects
444 	  the path with the least number of in-flight I/Os.
445 
446 	  If unsure, say N.
447 
448 config DM_MULTIPATH_ST
449 	tristate "I/O Path Selector based on the service time"
450 	depends on DM_MULTIPATH
451 	help
452 	  This path selector is a dynamic load balancer which selects
453 	  the path expected to complete the incoming I/O in the shortest
454 	  time.
455 
456 	  If unsure, say N.
457 
458 config DM_MULTIPATH_HST
459 	tristate "I/O Path Selector based on historical service time"
460 	depends on DM_MULTIPATH
461 	help
462 	  This path selector is a dynamic load balancer which selects
463 	  the path expected to complete the incoming I/O in the shortest
464 	  time by comparing estimated service time (based on historical
465 	  service time).
466 
467 	  If unsure, say N.
468 
469 config DM_MULTIPATH_IOA
470 	tristate "I/O Path Selector based on CPU submission"
471 	depends on DM_MULTIPATH
472 	help
473 	  This path selector selects the path based on the CPU the IO is
474 	  executed on and the CPU to path mapping setup at path addition time.
475 
476 	  If unsure, say N.
477 
478 config DM_DELAY
479 	tristate "I/O delaying target"
480 	depends on BLK_DEV_DM
481 	help
482 	A target that delays reads and/or writes and can send
483 	them to different devices.  Useful for testing.
484 
485 	If unsure, say N.
486 
487 config DM_DUST
488 	tristate "Bad sector simulation target"
489 	depends on BLK_DEV_DM
490 	help
491 	A target that simulates bad sector behavior.
492 	Useful for testing.
493 
494 	If unsure, say N.
495 
496 config DM_INIT
497 	bool "DM \"dm-mod.create=\" parameter support"
498 	depends on BLK_DEV_DM=y
499 	help
500 	Enable "dm-mod.create=" parameter to create mapped devices at init time.
501 	This option is useful to allow mounting rootfs without requiring an
502 	initramfs.
503 	See Documentation/admin-guide/device-mapper/dm-init.rst for dm-mod.create="..."
504 	format.
505 
506 	If unsure, say N.
507 
508 config DM_UEVENT
509 	bool "DM uevents"
510 	depends on BLK_DEV_DM
511 	help
512 	Generate udev events for DM events.
513 
514 config DM_FLAKEY
515        tristate "Flakey target"
516        depends on BLK_DEV_DM
517 	help
518 	 A target that intermittently fails I/O for debugging purposes.
519 
520 config DM_VERITY
521 	tristate "Verity target support"
522 	depends on BLK_DEV_DM
523 	select CRYPTO
524 	select CRYPTO_HASH
525 	select DM_BUFIO
526 	help
527 	  This device-mapper target creates a read-only device that
528 	  transparently validates the data on one underlying device against
529 	  a pre-generated tree of cryptographic checksums stored on a second
530 	  device.
531 
532 	  You'll need to activate the digests you're going to use in the
533 	  cryptoapi configuration.
534 
535 	  To compile this code as a module, choose M here: the module will
536 	  be called dm-verity.
537 
538 	  If unsure, say N.
539 
540 config DM_VERITY_VERIFY_ROOTHASH_SIG
541 	def_bool n
542 	bool "Verity data device root hash signature verification support"
543 	depends on DM_VERITY
544 	select SYSTEM_DATA_VERIFICATION
545 	help
546 	  Add ability for dm-verity device to be validated if the
547 	  pre-generated tree of cryptographic checksums passed has a pkcs#7
548 	  signature file that can validate the roothash of the tree.
549 
550 	  By default, rely on the builtin trusted keyring.
551 
552 	  If unsure, say N.
553 
554 config DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING
555 	bool "Verity data device root hash signature verification with secondary keyring"
556 	depends on DM_VERITY_VERIFY_ROOTHASH_SIG
557 	depends on SECONDARY_TRUSTED_KEYRING
558 	help
559 	  Rely on the secondary trusted keyring to verify dm-verity signatures.
560 
561 	  If unsure, say N.
562 
563 config DM_VERITY_FEC
564 	bool "Verity forward error correction support"
565 	depends on DM_VERITY
566 	select REED_SOLOMON
567 	select REED_SOLOMON_DEC8
568 	help
569 	  Add forward error correction support to dm-verity. This option
570 	  makes it possible to use pre-generated error correction data to
571 	  recover from corrupted blocks.
572 
573 	  If unsure, say N.
574 
575 config DM_SWITCH
576 	tristate "Switch target support (EXPERIMENTAL)"
577 	depends on BLK_DEV_DM
578 	help
579 	  This device-mapper target creates a device that supports an arbitrary
580 	  mapping of fixed-size regions of I/O across a fixed set of paths.
581 	  The path used for any specific region can be switched dynamically
582 	  by sending the target a message.
583 
584 	  To compile this code as a module, choose M here: the module will
585 	  be called dm-switch.
586 
587 	  If unsure, say N.
588 
589 config DM_LOG_WRITES
590 	tristate "Log writes target support"
591 	depends on BLK_DEV_DM
592 	help
593 	  This device-mapper target takes two devices, one device to use
594 	  normally, one to log all write operations done to the first device.
595 	  This is for use by file system developers wishing to verify that
596 	  their fs is writing a consistent file system at all times by allowing
597 	  them to replay the log in a variety of ways and to check the
598 	  contents.
599 
600 	  To compile this code as a module, choose M here: the module will
601 	  be called dm-log-writes.
602 
603 	  If unsure, say N.
604 
605 config DM_INTEGRITY
606 	tristate "Integrity target support"
607 	depends on BLK_DEV_DM
608 	select BLK_DEV_INTEGRITY
609 	select DM_BUFIO
610 	select CRYPTO
611 	select CRYPTO_SKCIPHER
612 	select ASYNC_XOR
613 	select DM_AUDIT if AUDIT
614 	help
615 	  This device-mapper target emulates a block device that has
616 	  additional per-sector tags that can be used for storing
617 	  integrity information.
618 
619 	  This integrity target is used with the dm-crypt target to
620 	  provide authenticated disk encryption or it can be used
621 	  standalone.
622 
623 	  To compile this code as a module, choose M here: the module will
624 	  be called dm-integrity.
625 
626 config DM_ZONED
627 	tristate "Drive-managed zoned block device target support"
628 	depends on BLK_DEV_DM
629 	depends on BLK_DEV_ZONED
630 	select CRC32
631 	help
632 	  This device-mapper target takes a host-managed or host-aware zoned
633 	  block device and exposes most of its capacity as a regular block
634 	  device (drive-managed zoned block device) without any write
635 	  constraints. This is mainly intended for use with file systems that
636 	  do not natively support zoned block devices but still want to
637 	  benefit from the increased capacity offered by SMR disks. Other uses
638 	  by applications using raw block devices (for example object stores)
639 	  are also possible.
640 
641 	  To compile this code as a module, choose M here: the module will
642 	  be called dm-zoned.
643 
644 	  If unsure, say N.
645 
646 config DM_AUDIT
647 	bool "DM audit events"
648 	depends on AUDIT
649 	help
650 	  Generate audit events for device-mapper.
651 
652 	  Enables audit logging of several security relevant events in the
653 	  particular device-mapper targets, especially the integrity target.
654 
655 endif # MD
656