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