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