# SPDX-License-Identifier: GPL-2.0-only
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 if UBIFS_FS_ZSTD
	select CRYPTO_LZO if UBIFS_FS_LZO
	select CRYPTO_DEFLATE if UBIFS_FS_ZLIB
	select CRYPTO_ZSTD if UBIFS_FS_ZSTD
	select CRYPTO_HASH_INFO
	select UBIFS_FS_XATTR if FS_ENCRYPTION
	depends on MTD_UBI
	help
	  UBIFS is a file system for flash devices which works on top of UBI.

if UBIFS_FS

config UBIFS_FS_ADVANCED_COMPR
	bool "Advanced compression options"
	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
	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
	default y
	help
	  Zlib compresses better than LZO but it is slower. Say 'Y' if unsure.

config UBIFS_FS_ZSTD
	bool "ZSTD compression support" if UBIFS_FS_ADVANCED_COMPR
	depends on UBIFS_FS
	default y
	help
	  ZSTD compresses is a big win in speed over Zlib and
	  in compression ratio over LZO. Say 'Y' if unsure.

config UBIFS_ATIME_SUPPORT
	bool "Access time support"
	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"
	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_SECURITY
	bool "UBIFS Security Labels"
	depends on 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 KEYS
	select CRYPTO_HMAC
	select SYSTEM_DATA_VERIFICATION
	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.

endif # UBIFS_FS
