#
# 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.

### NB: this one is now provided by util-linux/volume_id/*
### 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
