# SPDX-License-Identifier: GPL-2.0

config EROFS_FS
	tristate "EROFS filesystem support"
	depends on BROKEN
	help
	  EROFS(Enhanced Read-Only File System) is a lightweight
	  read-only file system with modern designs (eg. page-sized
	  blocks, inline xattrs/data, etc.) for scenarios which need
	  high-performance read-only requirements, eg. firmwares in
	  mobile phone or LIVECDs.

	  It also provides VLE compression support, focusing on
	  random read improvements, keeping relatively lower
	  compression ratios, which is useful for high-performance
	  devices with limited memory and ROM space.

	  If unsure, say N.

config EROFS_FS_DEBUG
	bool "EROFS debugging feature"
	depends on EROFS_FS
	help
	  Print EROFS debugging messages and enable more BUG_ONs
	  which check the filesystem consistency aggressively.

	  For daily use, say N.

config EROFS_FS_XATTR
	bool "EROFS extended attributes"
	depends on EROFS_FS
	default y
	help
	  Extended attributes are name:value pairs associated with inodes by
	  the kernel or by users (see the attr(5) manual page, or visit
	  <http://acl.bestbits.at/> for details).

	  If unsure, say N.

config EROFS_FS_POSIX_ACL
	bool "EROFS Access Control Lists"
	depends on EROFS_FS_XATTR
	select FS_POSIX_ACL
	default y
	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 EROFS_FS_SECURITY
	bool "EROFS Security Labels"
	depends on EROFS_FS_XATTR
	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 erofs filesystem, so that it requires enabling
	  the extended attribute support in advance.

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

config EROFS_FS_USE_VM_MAP_RAM
	bool "EROFS VM_MAP_RAM Support"
	depends on EROFS_FS
	help
	  use vm_map_ram/vm_unmap_ram instead of vmap/vunmap.

	  If you don't know what these are, say N.

config EROFS_FAULT_INJECTION
	bool "EROFS fault injection facility"
	depends on EROFS_FS
	help
	  Test EROFS to inject faults such as ENOMEM, EIO, and so on.
	  If unsure, say N.

config EROFS_FS_ZIP
	bool "EROFS Data Compresssion Support"
	depends on EROFS_FS
	help
	  Currently we support VLE Compression only.
	  Play at your own risk.

	  If you don't want to use compression feature, say N.

config EROFS_FS_CLUSTER_PAGE_LIMIT
	int "EROFS Cluster Pages Hard Limit"
	depends on EROFS_FS_ZIP
	range 1 256
	default "1"
	help
	  Indicates VLE compressed pages hard limit of a
	  compressed cluster.

	  For example, if files of a image are compressed
	  into 8k-unit, the hard limit should not be less
	  than 2. Otherwise, the image cannot be mounted
	  correctly on this kernel.

choice
	prompt "EROFS VLE Data Decompression mode"
	depends on EROFS_FS_ZIP
	default EROFS_FS_ZIP_CACHE_BIPOLAR
	help
	  EROFS supports three options for VLE decompression.
	  "In-place Decompression Only" consumes the minimum memory
	  with lowest random read.

	  "Bipolar Cached Decompression" consumes the maximum memory
	  with highest random read.

	  If unsure, select "Bipolar Cached Decompression"

config EROFS_FS_ZIP_NO_CACHE
	bool "In-place Decompression Only"
	help
	  Read compressed data into page cache and do in-place
	  decompression directly.

config EROFS_FS_ZIP_CACHE_UNIPOLAR
	bool "Unipolar Cached Decompression"
	help
	  For each request, it caches the last compressed page
	  for further reading.
	  It still decompresses in place for the rest compressed pages.

config EROFS_FS_ZIP_CACHE_BIPOLAR
	bool "Bipolar Cached Decompression"
	help
	  For each request, it caches the both end compressed pages
	  for further reading.
	  It still decompresses in place for the rest compressed pages.

	  Recommended for performance priority.

endchoice

