config UBIFS_FS
	tristate "UBIFS file system support"
	select CRC16
	select CRC32
	select CRYPTO if UBIFS_FS_ADVANCED_COMPR
	select CRYPTO if UBIFS_FS_LZO
	select CRYPTO if UBIFS_FS_ZLIB
	select CRYPTO_LZO if UBIFS_FS_LZO
	select CRYPTO_DEFLATE if UBIFS_FS_ZLIB
	select CRYPTO_HASH_INFO
	depends on MTD_UBI
	help
	  UBIFS is a file system for flash devices which works on top of UBI.

config UBIFS_FS_ADVANCED_COMPR
	bool "Advanced compression options"
	depends on UBIFS_FS
	help
	  This option allows to explicitly choose which compressions, if any,
	  are enabled in UBIFS. Removing compressors means inability to read
	  existing file systems.

	  If unsure, say 'N'.

config UBIFS_FS_LZO
	bool "LZO compression support" if UBIFS_FS_ADVANCED_COMPR
	depends on UBIFS_FS
	default y
	help
	   LZO compressor is generally faster than zlib but compresses worse.
	   Say 'Y' if unsure.

config UBIFS_FS_ZLIB
	bool "ZLIB compression support" if UBIFS_FS_ADVANCED_COMPR
	depends on UBIFS_FS
	default y
	help
	  Zlib compresses better than LZO but it is slower. Say 'Y' if unsure.

config UBIFS_ATIME_SUPPORT
	bool "Access time support" if UBIFS_FS
	depends on UBIFS_FS
	default n
	help
	  Originally UBIFS did not support atime, because it looked like a bad idea due
	  increased flash wear. This option adds atime support and it is disabled by default
	  to preserve the old behavior. If you enable this option, UBIFS starts updating atime,
	  which means that file-system read operations will cause writes (inode atime
	  updates). This may affect file-system performance and increase flash device wear,
	  so be careful. How often atime is updated depends on the selected strategy:
	  strictatime is the "heavy", relatime is "lighter", etc.

	  If unsure, say 'N'

config UBIFS_FS_XATTR
	bool "UBIFS XATTR support"
	depends on UBIFS_FS
	default y
	help
	  Saying Y here includes support for extended attributes (xattrs).
	  Xattrs are name:value pairs associated with inodes by
	  the kernel or by users (see the attr(5) manual page).

	  If unsure, say Y.

config UBIFS_FS_ENCRYPTION
	bool "UBIFS Encryption"
	depends on UBIFS_FS && UBIFS_FS_XATTR && BLOCK
	select FS_ENCRYPTION
	default n
	help
	  Enable encryption of UBIFS 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 UBIFS_FS_SECURITY
	bool "UBIFS Security Labels"
	depends on UBIFS_FS && UBIFS_FS_XATTR
	default y
	help
	  Security labels provide an access control facility to support Linux
	  Security Models (LSMs) accepted by AppArmor, SELinux, Smack and TOMOYO
	  Linux. This option enables an extended attribute handler for file
	  security labels in the ubifs filesystem, so that it requires enabling
	  the extended attribute support in advance.

	  If you are not using a security module, say N.

config UBIFS_FS_AUTHENTICATION
	bool "UBIFS authentication support"
	select CRYPTO_HMAC
	help
	  Enable authentication support for UBIFS. This feature offers protection
	  against offline changes for both data and metadata of the filesystem.
	  If you say yes here you should also select a hashing algorithm such as
	  sha256, these are not selected automatically since there are many
	  different options.
