md: Factor out RAID6 algorithms into lib/
[linux-2.6.git] / drivers / md / Kconfig
index 4540ade..891f7c8 100644 (file)
@@ -2,19 +2,17 @@
 # Block device driver configuration
 #
 
-if BLOCK
-
-menu "Multi-device support (RAID and LVM)"
-
-config MD
+menuconfig MD
        bool "Multiple devices driver support (RAID and LVM)"
+       depends on BLOCK
        help
          Support multiple physical spindles through a single logical device.
          Required for RAID and logical volume management.
 
+if MD
+
 config BLK_DEV_MD
        tristate "RAID support"
-       depends on MD
        ---help---
          This driver lets you combine several hard disk partitions into one
          logical block device. This can be used to simply append one
@@ -32,6 +30,20 @@ config BLK_DEV_MD
 
          If unsure, say N.
 
+config MD_AUTODETECT
+       bool "Autodetect RAID arrays during kernel boot"
+       depends on BLK_DEV_MD=y
+       default y
+       ---help---
+         If you say Y here, then the kernel will try to autodetect raid
+         arrays as part of its boot process. 
+
+         If you don't use raid and say Y, this autodetection can cause 
+         a several-second delay in the boot time due to various
+         synchronisation steps that are part of this step.
+
+         If unsure, say Y.
+
 config MD_LINEAR
        tristate "Linear (append) mode"
        depends on BLK_DEV_MD
@@ -109,6 +121,11 @@ config MD_RAID10
 config MD_RAID456
        tristate "RAID-4/RAID-5/RAID-6 mode"
        depends on BLK_DEV_MD
+       select RAID6_PQ
+       select ASYNC_MEMCPY
+       select ASYNC_XOR
+       select ASYNC_PQ
+       select ASYNC_RAID6_RECOV
        ---help---
          A RAID-5 set of N drives with a capacity of C MB per drive provides
          the capacity of C * (N - 1) MB, and protects against a failure
@@ -137,34 +154,29 @@ config MD_RAID456
 
          If unsure, say Y.
 
-config MD_RAID5_RESHAPE
-       bool "Support adding drives to a raid-5 array"
+config MULTICORE_RAID456
+       bool "RAID-4/RAID-5/RAID-6 Multicore processing (EXPERIMENTAL)"
        depends on MD_RAID456
-       default y
+       depends on SMP
+       depends on EXPERIMENTAL
        ---help---
-         A RAID-5 set can be expanded by adding extra drives. This
-         requires "restriping" the array which means (almost) every
-         block must be written to a different place.
-
-          This option allows such restriping to be done while the array
-         is online.
+         Enable the raid456 module to dispatch per-stripe raid operations to a
+         thread pool.
 
-         You will need mdadm version 2.4.1 or later to use this
-         feature safely.  During the early stage of reshape there is
-         a critical section where live data is being over-written.  A
-         crash during this time needs extra care for recovery.  The
-         newer mdadm takes a copy of the data in the critical section
-         and will restore it, if necessary, after a crash.
-
-         The mdadm usage is e.g.
-              mdadm --grow /dev/md1 --raid-disks=6
-         to grow '/dev/md1' to having 6 disks.
+         If unsure, say N.
 
-         Note: The array can only be expanded, not contracted.
-         There should be enough spares already present to make the new
-         array workable.
+config ASYNC_RAID6_TEST
+       tristate "Self test for hardware accelerated raid6 recovery"
+       depends on RAID6_PQ
+       select ASYNC_RAID6_RECOV
+       ---help---
+         This is a one-shot self test that permutes through the
+         recovery of all the possible two disk failure scenarios for a
+         N-disk array.  Recovery is performed with the asynchronous
+         raid6 recovery routines, and will optionally use an offload
+         engine if one is available.
 
-         If unsure, say Y.
+         If unsure, say N.
 
 config MD_MULTIPATH
        tristate "Multipath I/O support"
@@ -189,7 +201,6 @@ config MD_FAULTY
 
 config BLK_DEV_DM
        tristate "Device mapper support"
-       depends on MD
        ---help---
          Device-mapper is a low level volume manager.  It works by allowing
          people to specify mappings for ranges of logical sectors.  Various
@@ -205,7 +216,7 @@ config BLK_DEV_DM
 
 config DM_DEBUG
        boolean "Device mapper debugging support"
-       depends on BLK_DEV_DM && EXPERIMENTAL
+       depends on BLK_DEV_DM
        ---help---
          Enable this for messages that may help debug device-mapper problems.
 
@@ -213,7 +224,7 @@ config DM_DEBUG
 
 config DM_CRYPT
        tristate "Crypt target support"
-       depends on BLK_DEV_DM && EXPERIMENTAL
+       depends on BLK_DEV_DM
        select CRYPTO
        select CRYPTO_CBC
        ---help---
@@ -231,37 +242,79 @@ config DM_CRYPT
          If unsure, say N.
 
 config DM_SNAPSHOT
-       tristate "Snapshot target (EXPERIMENTAL)"
-       depends on BLK_DEV_DM && EXPERIMENTAL
+       tristate "Snapshot target"
+       depends on BLK_DEV_DM
        ---help---
          Allow volume managers to take writable snapshots of a device.
 
 config DM_MIRROR
-       tristate "Mirror target (EXPERIMENTAL)"
-       depends on BLK_DEV_DM && EXPERIMENTAL
+       tristate "Mirror target"
+       depends on BLK_DEV_DM
        ---help---
          Allow volume managers to mirror logical volumes, also
          needed for live data migration tools such as 'pvmove'.
 
+config DM_LOG_USERSPACE
+       tristate "Mirror userspace logging (EXPERIMENTAL)"
+       depends on DM_MIRROR && EXPERIMENTAL && NET
+       select CONNECTOR
+       ---help---
+         The userspace logging module provides a mechanism for
+         relaying the dm-dirty-log API to userspace.  Log designs
+         which are more suited to userspace implementation (e.g.
+         shared storage logs) or experimental logs can be implemented
+         by leveraging this framework.
+
 config DM_ZERO
-       tristate "Zero target (EXPERIMENTAL)"
-       depends on BLK_DEV_DM && EXPERIMENTAL
+       tristate "Zero target"
+       depends on BLK_DEV_DM
        ---help---
          A target that discards writes, and returns all zeroes for
          reads.  Useful in some recovery situations.
 
 config DM_MULTIPATH
-       tristate "Multipath target (EXPERIMENTAL)"
-       depends on BLK_DEV_DM && EXPERIMENTAL
+       tristate "Multipath target"
+       depends on BLK_DEV_DM
+       # nasty syntax but means make DM_MULTIPATH independent
+       # of SCSI_DH if the latter isn't defined but if
+       # it is, DM_MULTIPATH must depend on it.  We get a build
+       # error if SCSI_DH=m and DM_MULTIPATH=y
+       depends on SCSI_DH || !SCSI_DH
        ---help---
          Allow volume managers to support multipath hardware.
 
-config DM_MULTIPATH_EMC
-       tristate "EMC CX/AX multipath support (EXPERIMENTAL)"
-       depends on DM_MULTIPATH && BLK_DEV_DM && EXPERIMENTAL
+config DM_MULTIPATH_QL
+       tristate "I/O Path Selector based on the number of in-flight I/Os"
+       depends on DM_MULTIPATH
+       ---help---
+         This path selector is a dynamic load balancer which selects
+         the path with the least number of in-flight I/Os.
+
+         If unsure, say N.
+
+config DM_MULTIPATH_ST
+       tristate "I/O Path Selector based on the service time"
+       depends on DM_MULTIPATH
        ---help---
-         Multipath support for EMC CX/AX series hardware.
+         This path selector is a dynamic load balancer which selects
+         the path expected to complete the incoming I/O in the shortest
+         time.
 
-endmenu
+         If unsure, say N.
+
+config DM_DELAY
+       tristate "I/O delaying target (EXPERIMENTAL)"
+       depends on BLK_DEV_DM && EXPERIMENTAL
+       ---help---
+       A target that delays reads and/or writes and can send
+       them to different devices.  Useful for testing.
+
+       If unsure, say N.
+
+config DM_UEVENT
+       bool "DM uevents (EXPERIMENTAL)"
+       depends on BLK_DEV_DM && EXPERIMENTAL
+       ---help---
+       Generate udev events for DM events.
 
-endif
+endif # MD