# Ext3 configs are here for backward compatibility with old configs which may
# have EXT3_FS set but not EXT4_FS set and thus would result in non-bootable
# kernels after the removal of ext3 driver.
config EXT3_FS
	tristate "The Extended 3 (ext3) filesystem"
	# These must match EXT4_FS selects...
	select EXT4_FS
	select JBD2
	select CRC16
	select CRYPTO
	select CRYPTO_CRC32C
	help
	  This config option is here only for backward compatibility. ext3
	  filesystem is now handled by the ext4 driver.

config EXT3_FS_POSIX_ACL
	bool "Ext3 POSIX Access Control Lists"
	depends on EXT3_FS
	select EXT4_FS_POSIX_ACL
	select FS_POSIX_ACL
	help
	  This config option is here only for backward compatibility. ext3
	  filesystem is now handled by the ext4 driver.

config EXT3_FS_SECURITY
	bool "Ext3 Security Labels"
	depends on EXT3_FS
	select EXT4_FS_SECURITY
	help
	  This config option is here only for backward compatibility. ext3
	  filesystem is now handled by the ext4 driver.

config EXT4_FS
	tristate "The Extended 4 (ext4) filesystem"
	# Please update EXT3_FS selects when changing these
	select JBD2
	select CRC16
	select CRYPTO
	select CRYPTO_CRC32C
	help
	  This is the next generation of the ext3 filesystem.

	  Unlike the change from ext2 filesystem to ext3 filesystem,
	  the on-disk format of ext4 is not forwards compatible with
	  ext3; it is based on extent maps and it supports 48-bit
	  physical block numbers.  The ext4 filesystem also supports delayed
	  allocation, persistent preallocation, high resolution time stamps,
	  and a number of other features to improve performance and speed
	  up fsck time.  For more information, please see the web pages at
	  http://ext4.wiki.kernel.org.

	  The ext4 filesystem supports mounting an ext3 filesystem; while there
	  are some performance gains from the delayed allocation and inode
	  table readahead, the best performance gains require enabling ext4
	  features in the filesystem using tune2fs, or formatting a new
	  filesystem as an ext4 filesystem initially. Without explicit enabling
	  of ext4 features, the on disk filesystem format stays fully backward
	  compatible.

	  To compile this file system support as a module, choose M here. The
	  module will be called ext4.

	  If unsure, say N.

config EXT4_USE_FOR_EXT2
	bool "Use ext4 for ext2/ext3 file systems"
	depends on EXT4_FS
	depends on EXT2_FS=n
	default y
	help
	  Allow the ext4 file system driver code to be used for ext2
	  file system mounts.  This allows users to reduce their
	  compiled kernel size by using one file system driver for
	  ext2, ext3, and ext4 file systems.

config EXT4_FS_POSIX_ACL
	bool "Ext4 POSIX Access Control Lists"
	depends on EXT4_FS
	select FS_POSIX_ACL
	help
	  POSIX Access Control Lists (ACLs) support permissions for users and
	  groups beyond the owner/group/world scheme.

	  To learn more about Access Control Lists, visit the POSIX ACLs for
	  Linux website <http://acl.bestbits.at/>.

	  If you don't know what Access Control Lists are, say N

config EXT4_FS_SECURITY
	bool "Ext4 Security Labels"
	depends on EXT4_FS
	help
	  Security labels support alternative access control models
	  implemented by security modules like SELinux.  This option
	  enables an extended attribute handler for file security
	  labels in the ext4 filesystem.

	  If you are not using a security module that requires using
	  extended attributes for file security labels, say N.

config EXT4_ENCRYPTION
	tristate "Ext4 Encryption"
	depends on EXT4_FS
	select CRYPTO_AES
	select CRYPTO_CBC
	select CRYPTO_ECB
	select CRYPTO_XTS
	select CRYPTO_CTS
	select CRYPTO_CTR
	select CRYPTO_SHA256
	select KEYS
	select ENCRYPTED_KEYS
	help
	  Enable encryption of ext4 files and directories.  This
	  feature is similar to ecryptfs, but it is more memory
	  efficient since it avoids caching the encrypted and
	  decrypted pages in the page cache.

config EXT4_FS_ENCRYPTION
	bool
	default y
	depends on EXT4_ENCRYPTION

config EXT4_DEBUG
	bool "EXT4 debugging support"
	depends on EXT4_FS
	help
	  Enables run-time debugging support for the ext4 filesystem.

	  If you select Y here, then you will be able to turn on debugging
	  with a command such as:
		echo 1 > /sys/module/ext4/parameters/mballoc_debug
