#
#  Quota configuration
#

config QUOTA
	bool "Quota support"
	select QUOTACTL
	help
	  If you say Y here, you will be able to set per user limits for disk
	  usage (also called disk quotas). Currently, it works for the
	  ext2, ext3, ext4, jfs, ocfs2 and reiserfs file systems.
	  Note that gfs2 and xfs use their own quota system.
	  Ext3, ext4 and reiserfs also support journaled quotas for which
	  you don't need to run quotacheck(8) after an unclean shutdown.
	  For further details, read the Quota mini-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>, or the documentation provided
	  with the quota tools. Probably the quota support is only useful for
	  multi user systems. If unsure, say N.

config QUOTA_NETLINK_INTERFACE
	bool "Report quota messages through netlink interface"
	depends on QUOTACTL && NET
	help
	  If you say Y here, quota warnings (about exceeding softlimit, reaching
	  hardlimit, etc.) will be reported through netlink interface. If unsure,
	  say Y.

config PRINT_QUOTA_WARNING
	bool "Print quota warnings to console (OBSOLETE)"
	depends on QUOTA
	default y
	help
	  If you say Y here, quota warnings (about exceeding softlimit, reaching
	  hardlimit, etc.) will be printed to the process' controlling terminal.
	  Note that this behavior is currently deprecated and may go away in
	  future. Please use notification via netlink socket instead.

config QUOTA_DEBUG
	bool "Additional quota sanity checks"
	depends on QUOTA
	default n
	help
	  If you say Y here, quota subsystem will perform some additional
	  sanity checks of quota internal structures. If unsure, say N.

# Generic support for tree structured quota files. Selected when needed.
config QUOTA_TREE
	 tristate

config QFMT_V1
	tristate "Old quota format support"
	depends on QUOTA
	help
	  This quota format was (is) used by kernels earlier than 2.4.22. If
	  you have quota working and you don't want to convert to new quota
	  format say Y here.

config QFMT_V2
	tristate "Quota format vfsv0 and vfsv1 support"
	depends on QUOTA
	select QUOTA_TREE
	help
	  This config option enables kernel support for vfsv0 and vfsv1 quota
	  formats. Both these formats support 32-bit UIDs/GIDs and vfsv1 format
	  also supports 64-bit inode and block quota limits. If you need this
	  functionality say Y here.

config QUOTACTL
	bool
	default n

config QUOTACTL_COMPAT
	bool
	depends on QUOTACTL && COMPAT_FOR_U64_ALIGNMENT
	default y
