#
# Block layer core configuration
#
config BLOCK
       bool "Enable the block layer" if EMBEDDED
       default y
       help
	 This permits the block layer to be removed from the kernel if it's not
	 needed (on some embedded devices for example).  If this option is
	 disabled, then blockdev files will become unusable and some
	 filesystems (such as ext3) will become unavailable.

	 This option will also disable SCSI character devices and USB storage
	 since they make use of various block layer definitions and
	 facilities.

	 Say Y here unless you know you really don't want to mount disks and
	 suchlike.

if BLOCK

#XXX - it makes sense to enable this only for 32-bit subarch's, not for x86_64
#for instance.
config LBD
	bool "Support for Large Block Devices"
	depends on X86 || (MIPS && 32BIT) || PPC32 || (S390 && !64BIT) || SUPERH || UML
	help
	  Say Y here if you want to attach large (bigger than 2TB) discs to
	  your machine, or if you want to have a raid or loopback device
	  bigger than 2TB.  Otherwise say N.

config BLK_DEV_IO_TRACE
	bool "Support for tracing block io actions"
	depends on SYSFS
	select RELAY
	select DEBUG_FS
	help
	  Say Y here, if you want to be able to trace the block layer actions
	  on a given queue. Tracing allows you to see any traffic happening
	  on a block device queue. For more information (and the user space
	  support tools needed), fetch the blktrace app from:

	  git://brick.kernel.dk/data/git/blktrace.git

config LSF
	bool "Support for Large Single Files"
	depends on X86 || (MIPS && 32BIT) || PPC32 || ARCH_S390_31 || SUPERH || UML
	help
	  Say Y here if you want to be able to handle very large files (bigger
	  than 2TB), otherwise say N.

	  If unsure, say Y.

endif

source block/Kconfig.iosched
