# SPDX-License-Identifier: GPL-2.0-only
#
#  Quota configuration
#

config QUOTA
	bool "Quota support"
	select QUOTACTL
	select SRCU
	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
	  <https://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
