#
# Block device driver configuration
#

menu "Multi-device support (RAID and LVM)"

config MD
	bool "Multiple devices driver support (RAID and LVM)"
	help
	  Support multiple physical spindles through a single logical device.
	  Required for RAID and logical volume management.

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
	  partition to another one or to combine several redundant hard disks
	  into a RAID1/4/5 device so as to provide protection against hard
	  disk failures. This is called "Software RAID" since the combining of
	  the partitions is done by the kernel. "Hardware RAID" means that the
	  combining is done by a dedicated controller; if you have such a
	  controller, you do not need to say Y here.

	  More information about Software RAID on Linux is contained in the
	  Software RAID mini-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>. There you will also learn
	  where to get the supporting user space utilities raidtools.

	  If unsure, say N.

config MD_LINEAR
	tristate "Linear (append) mode"
	depends on BLK_DEV_MD
	---help---
	  If you say Y here, then your multiple devices driver will be able to
	  use the so-called linear mode, i.e. it will combine the hard disk
	  partitions by simply appending one to the other.

	  To compile this as a module, choose M here: the module
	  will be called linear.

	  If unsure, say Y.

config MD_RAID0
	tristate "RAID-0 (striping) mode"
	depends on BLK_DEV_MD
	---help---
	  If you say Y here, then your multiple devices driver will be able to
	  use the so-called raid0 mode, i.e. it will combine the hard disk
	  partitions into one logical device in such a fashion as to fill them
	  up evenly, one chunk here and one chunk there. This will increase
	  the throughput rate if the partitions reside on distinct disks.

	  Information about Software RAID on Linux is contained in the
	  Software-RAID mini-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>. There you will also
	  learn where to get the supporting user space utilities raidtools.

	  To compile this as a module, choose M here: the module
	  will be called raid0.

	  If unsure, say Y.

config MD_RAID1
	tristate "RAID-1 (mirroring) mode"
	depends on BLK_DEV_MD
	---help---
	  A RAID-1 set consists of several disk drives which are exact copies
	  of each other.  In the event of a mirror failure, the RAID driver
	  will continue to use the operational mirrors in the set, providing
	  an error free MD (multiple device) to the higher levels of the
	  kernel.  In a set with N drives, the available space is the capacity
	  of a single drive, and the set protects against a failure of (N - 1)
	  drives.

	  Information about Software RAID on Linux is contained in the
	  Software-RAID mini-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.  There you will also
	  learn where to get the supporting user space utilities raidtools.

	  If you want to use such a RAID-1 set, say Y.  To compile this code
	  as a module, choose M here: the module will be called raid1.

	  If unsure, say Y.

config MD_RAID10
	tristate "RAID-10 (mirrored striping) mode (EXPERIMENTAL)"
	depends on BLK_DEV_MD && EXPERIMENTAL
	---help---
	  RAID-10 provides a combination of striping (RAID-0) and
	  mirroring (RAID-1) with easier configuration and more flexible
	  layout.
	  Unlike RAID-0, but like RAID-1, RAID-10 requires all devices to
	  be the same size (or at least, only as much as the smallest device
	  will be used).
	  RAID-10 provides a variety of layouts that provide different levels
	  of redundancy and performance.

	  RAID-10 requires mdadm-1.7.0 or later, available at:

	  ftp://ftp.kernel.org/pub/linux/utils/raid/mdadm/

	  If unsure, say Y.

config MD_RAID456
	tristate "RAID-4/RAID-5/RAID-6 mode"
	depends on BLK_DEV_MD
	---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
	  of a single drive. For a given sector (row) number, (N - 1) drives
	  contain data sectors, and one drive contains the parity protection.
	  For a RAID-4 set, the parity blocks are present on a single drive,
	  while a RAID-5 set distributes the parity across the drives in one
	  of the available parity distribution methods.

	  A RAID-6 set of N drives with a capacity of C MB per drive
	  provides the capacity of C * (N - 2) MB, and protects
	  against a failure of any two drives. For a given sector
	  (row) number, (N - 2) drives contain data sectors, and two
	  drives contains two independent redundancy syndromes.  Like
	  RAID-5, RAID-6 distributes the syndromes across the drives
	  in one of the available parity distribution methods.

	  Information about Software RAID on Linux is contained in the
	  Software-RAID mini-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>. There you will also
	  learn where to get the supporting user space utilities raidtools.

	  If you want to use such a RAID-4/RAID-5/RAID-6 set, say Y.  To
	  compile this code as a module, choose M here: the module
	  will be called raid456.

	  If unsure, say Y.

config MD_RAID5_RESHAPE
	bool "Support adding drives to a raid-5 array (experimental)"
	depends on MD_RAID456 && 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.  However it is still EXPERIMENTAL code.  It should
	  work, but please be sure that you have backups.

	  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.

	  Note: The array can only be expanded, not contracted.
	  There should be enough spares already present to make the new
	  array workable.

config MD_MULTIPATH
	tristate "Multipath I/O support"
	depends on BLK_DEV_MD
	help
	  Multipath-IO is the ability of certain devices to address the same
	  physical disk over multiple 'IO paths'. The code ensures that such
	  paths can be defined and handled at runtime, and ensures that a
	  transparent failover to the backup path(s) happens if a IO errors
	  arrives on the primary path.

	  If unsure, say N.

config MD_FAULTY
	tristate "Faulty test module for MD"
	depends on BLK_DEV_MD
	help
	  The "faulty" module allows for a block device that occasionally returns
	  read or write errors.  It is useful for testing.

	  In unsure, say N.

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
	  mapping types are available, in addition people may write their own
	  modules containing custom mappings if they wish.

	  Higher level volume managers such as LVM2 use this driver.

	  To compile this as a module, choose M here: the module will be
	  called dm-mod.

	  If unsure, say N.

config DM_CRYPT
	tristate "Crypt target support"
	depends on BLK_DEV_DM && EXPERIMENTAL
	select CRYPTO
	---help---
	  This device-mapper target allows you to create a device that
	  transparently encrypts the data on it. You'll need to activate
	  the ciphers you're going to use in the cryptoapi configuration.

	  Information on how to use dm-crypt can be found on

	  <http://www.saout.de/misc/dm-crypt/>

	  To compile this code as a module, choose M here: the module will
	  be called dm-crypt.

	  If unsure, say N.

config DM_SNAPSHOT
       tristate "Snapshot target (EXPERIMENTAL)"
       depends on BLK_DEV_DM && EXPERIMENTAL
       ---help---
         Allow volume managers to take writable snapshots of a device.

config DM_MIRROR
       tristate "Mirror target (EXPERIMENTAL)"
       depends on BLK_DEV_DM && EXPERIMENTAL
       ---help---
         Allow volume managers to mirror logical volumes, also
         needed for live data migration tools such as 'pvmove'.

config DM_ZERO
	tristate "Zero target (EXPERIMENTAL)"
	depends on BLK_DEV_DM && EXPERIMENTAL
	---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
	---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
	---help---
	  Multipath support for EMC CX/AX series hardware.

endmenu

