19b6f151eSMauro Carvalho Chehab.. SPDX-License-Identifier: GPL-2.0 29b6f151eSMauro Carvalho Chehab 39b6f151eSMauro Carvalho Chehab=============== 49b6f151eSMauro Carvalho ChehabQuota subsystem 59b6f151eSMauro Carvalho Chehab=============== 69b6f151eSMauro Carvalho Chehab 79b6f151eSMauro Carvalho ChehabQuota subsystem allows system administrator to set limits on used space and 89b6f151eSMauro Carvalho Chehabnumber of used inodes (inode is a filesystem structure which is associated with 99b6f151eSMauro Carvalho Chehabeach file or directory) for users and/or groups. For both used space and number 109b6f151eSMauro Carvalho Chehabof used inodes there are actually two limits. The first one is called softlimit 119b6f151eSMauro Carvalho Chehaband the second one hardlimit. A user can never exceed a hardlimit for any 129b6f151eSMauro Carvalho Chehabresource (unless he has CAP_SYS_RESOURCE capability). User is allowed to exceed 139b6f151eSMauro Carvalho Chehabsoftlimit but only for limited period of time. This period is called "grace 149b6f151eSMauro Carvalho Chehabperiod" or "grace time". When grace time is over, user is not able to allocate 159b6f151eSMauro Carvalho Chehabmore space/inodes until he frees enough of them to get below softlimit. 169b6f151eSMauro Carvalho Chehab 179b6f151eSMauro Carvalho ChehabQuota limits (and amount of grace time) are set independently for each 189b6f151eSMauro Carvalho Chehabfilesystem. 199b6f151eSMauro Carvalho Chehab 209b6f151eSMauro Carvalho ChehabFor more details about quota design, see the documentation in quota-tools package 21*476fdf14SJan Kara(https://sourceforge.net/projects/linuxquota). 229b6f151eSMauro Carvalho Chehab 239b6f151eSMauro Carvalho ChehabQuota netlink interface 249b6f151eSMauro Carvalho Chehab======================= 259b6f151eSMauro Carvalho ChehabWhen user exceeds a softlimit, runs out of grace time or reaches hardlimit, 269b6f151eSMauro Carvalho Chehabquota subsystem traditionally printed a message to the controlling terminal of 279b6f151eSMauro Carvalho Chehabthe process which caused the excess. This method has the disadvantage that 289b6f151eSMauro Carvalho Chehabwhen user is using a graphical desktop he usually cannot see the message. 299b6f151eSMauro Carvalho ChehabThus quota netlink interface has been designed to pass information about 309b6f151eSMauro Carvalho Chehabthe above events to userspace. There they can be captured by an application 319b6f151eSMauro Carvalho Chehaband processed accordingly. 329b6f151eSMauro Carvalho Chehab 339b6f151eSMauro Carvalho ChehabThe interface uses generic netlink framework (see 34*476fdf14SJan Karahttps://lwn.net/Articles/208755/ and http://www.infradead.org/~tgr/libnl/ for 35*476fdf14SJan Karamore details about this layer). The name of the quota generic netlink interface 36*476fdf14SJan Karais "VFS_DQUOT". Definitions of constants below are in <linux/quota.h>. Since 37*476fdf14SJan Karathe quota netlink protocol is not namespace aware, quota netlink messages are 38*476fdf14SJan Karasent only in initial network namespace. 399b6f151eSMauro Carvalho Chehab 409b6f151eSMauro Carvalho ChehabCurrently, the interface supports only one message type QUOTA_NL_C_WARNING. 419b6f151eSMauro Carvalho ChehabThis command is used to send a notification about any of the above mentioned 429b6f151eSMauro Carvalho Chehabevents. Each message has six attributes. These are (type of the argument is 439b6f151eSMauro Carvalho Chehabin parentheses): 449b6f151eSMauro Carvalho Chehab 459b6f151eSMauro Carvalho Chehab QUOTA_NL_A_QTYPE (u32) 469b6f151eSMauro Carvalho Chehab - type of quota being exceeded (one of USRQUOTA, GRPQUOTA) 479b6f151eSMauro Carvalho Chehab QUOTA_NL_A_EXCESS_ID (u64) 489b6f151eSMauro Carvalho Chehab - UID/GID (depends on quota type) of user / group whose limit 499b6f151eSMauro Carvalho Chehab is being exceeded. 509b6f151eSMauro Carvalho Chehab QUOTA_NL_A_CAUSED_ID (u64) 519b6f151eSMauro Carvalho Chehab - UID of a user who caused the event 529b6f151eSMauro Carvalho Chehab QUOTA_NL_A_WARNING (u32) 539b6f151eSMauro Carvalho Chehab - what kind of limit is exceeded: 549b6f151eSMauro Carvalho Chehab 559b6f151eSMauro Carvalho Chehab QUOTA_NL_IHARDWARN 569b6f151eSMauro Carvalho Chehab inode hardlimit 579b6f151eSMauro Carvalho Chehab QUOTA_NL_ISOFTLONGWARN 589b6f151eSMauro Carvalho Chehab inode softlimit is exceeded longer 599b6f151eSMauro Carvalho Chehab than given grace period 609b6f151eSMauro Carvalho Chehab QUOTA_NL_ISOFTWARN 619b6f151eSMauro Carvalho Chehab inode softlimit 629b6f151eSMauro Carvalho Chehab QUOTA_NL_BHARDWARN 639b6f151eSMauro Carvalho Chehab space (block) hardlimit 649b6f151eSMauro Carvalho Chehab QUOTA_NL_BSOFTLONGWARN 659b6f151eSMauro Carvalho Chehab space (block) softlimit is exceeded 669b6f151eSMauro Carvalho Chehab longer than given grace period. 679b6f151eSMauro Carvalho Chehab QUOTA_NL_BSOFTWARN 689b6f151eSMauro Carvalho Chehab space (block) softlimit 699b6f151eSMauro Carvalho Chehab 709b6f151eSMauro Carvalho Chehab - four warnings are also defined for the event when user stops 719b6f151eSMauro Carvalho Chehab exceeding some limit: 729b6f151eSMauro Carvalho Chehab 739b6f151eSMauro Carvalho Chehab QUOTA_NL_IHARDBELOW 749b6f151eSMauro Carvalho Chehab inode hardlimit 759b6f151eSMauro Carvalho Chehab QUOTA_NL_ISOFTBELOW 769b6f151eSMauro Carvalho Chehab inode softlimit 779b6f151eSMauro Carvalho Chehab QUOTA_NL_BHARDBELOW 789b6f151eSMauro Carvalho Chehab space (block) hardlimit 799b6f151eSMauro Carvalho Chehab QUOTA_NL_BSOFTBELOW 809b6f151eSMauro Carvalho Chehab space (block) softlimit 819b6f151eSMauro Carvalho Chehab 829b6f151eSMauro Carvalho Chehab QUOTA_NL_A_DEV_MAJOR (u32) 839b6f151eSMauro Carvalho Chehab - major number of a device with the affected filesystem 849b6f151eSMauro Carvalho Chehab QUOTA_NL_A_DEV_MINOR (u32) 859b6f151eSMauro Carvalho Chehab - minor number of a device with the affected filesystem 86