# SPDX-License-Identifier: GPL-2.0-only
config EXT2_FS
	tristate "Second extended fs support (DEPRECATED)"
	select BUFFER_HEAD
	select FS_IOMAP
	help
	  Ext2 is a standard Linux file system for hard disks.

	  This filesystem driver is deprecated because it does not properly
	  support inode time stamps beyond 03:14:07 UTC on 19 January 2038.

	  Ext2 users are advised to use ext4 driver to access their filesystem.
	  The driver is fully compatible, supports filesystems without journal
          or extents, and also supports larger time stamps if the filesystem
          is created with at least 256 byte inodes.

	  This code is kept as a simple reference for filesystem developers.

	  If unsure, say N.

config EXT2_FS_XATTR
	bool "Ext2 extended attributes"
	depends on EXT2_FS
	help
	  Extended attributes are name:value pairs associated with inodes by
	  the kernel or by users (see the attr(5) manual page for details).

	  If unsure, say N.

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

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

config EXT2_FS_SECURITY
	bool "Ext2 Security Labels"
	depends on EXT2_FS_XATTR
	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 ext2 filesystem.

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