#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#

menu "Linux Ext2 FS Progs"

config CHATTR
	bool "chattr"
	default n
	help
	  chattr changes the file attributes on a second extended file system.

config E2FSCK
	bool "e2fsck"
	default n
	help
	  e2fsck is used to check Linux second extended file systems (ext2fs).
	  e2fsck also supports ext2 filesystems countaining a journal (ext3).
	  The normal compat symlinks 'fsck.ext2' and 'fsck.ext3' are also
	  provided.

config FSCK
	bool "fsck"
	default n
	help
	  fsck is used to check and optionally repair one or more filesystems.
	  In actuality, fsck is simply a front-end for the various file system
	  checkers (fsck.fstype) available under Linux.

config LSATTR
	bool "lsattr"
	default n
	help
	  lsattr lists the file attributes on a second extended file system.

config MKE2FS
	bool "mke2fs"
	default n
	help
	  mke2fs is used to create an ext2/ext3 filesystem.  The normal compat
	  symlinks 'mkfs.ext2' and 'mkfs.ext3' are also provided.

config TUNE2FS
	bool "tune2fs"
	default n
	help
	  tune2fs allows the system administrator to adjust various tunable
	  filesystem parameters on Linux ext2/ext3 filesystems.

config E2LABEL
	bool "e2label"
	default n
	depends on TUNE2FS
	help
	  e2label will display or change the filesystem label on the ext2
	  filesystem located on device.

config FINDFS
	bool "findfs"
	default n
	depends on TUNE2FS
	help
	  findfs will search the disks in the system looking for a filesystem
	  which has a label matching label or a UUID equal to uuid.

endmenu
