1 2Quota subsystem 3=============== 4 5Quota subsystem allows system administrator to set limits on used space and 6number of used inodes (inode is a filesystem structure which is associated with 7each file or directory) for users and/or groups. For both used space and number 8of used inodes there are actually two limits. The first one is called softlimit 9and the second one hardlimit. A user can never exceed a hardlimit for any 10resource (unless he has CAP_SYS_RESOURCE capability). User is allowed to exceed 11softlimit but only for limited period of time. This period is called "grace 12period" or "grace time". When grace time is over, user is not able to allocate 13more space/inodes until he frees enough of them to get below softlimit. 14 15Quota limits (and amount of grace time) are set independently for each 16filesystem. 17 18For more details about quota design, see the documentation in quota-tools package 19(http://sourceforge.net/projects/linuxquota). 20 21Quota netlink interface 22======================= 23When user exceeds a softlimit, runs out of grace time or reaches hardlimit, 24quota subsystem traditionally printed a message to the controlling terminal of 25the process which caused the excess. This method has the disadvantage that 26when user is using a graphical desktop he usually cannot see the message. 27Thus quota netlink interface has been designed to pass information about 28the above events to userspace. There they can be captured by an application 29and processed accordingly. 30 31The interface uses generic netlink framework (see 32http://lwn.net/Articles/208755/ and http://people.suug.ch/~tgr/libnl/ for more 33details about this layer). The name of the quota generic netlink interface 34is "VFS_DQUOT". Definitions of constants below are in <linux/quota.h>. 35Since the quota netlink protocol is not namespace aware, quota netlink messages 36are sent only in initial network namespace. 37 38Currently, the interface supports only one message type QUOTA_NL_C_WARNING. 39This command is used to send a notification about any of the above mentioned 40events. Each message has six attributes. These are (type of the argument is 41in parentheses): 42 QUOTA_NL_A_QTYPE (u32) 43 - type of quota being exceeded (one of USRQUOTA, GRPQUOTA) 44 QUOTA_NL_A_EXCESS_ID (u64) 45 - UID/GID (depends on quota type) of user / group whose limit 46 is being exceeded. 47 QUOTA_NL_A_CAUSED_ID (u64) 48 - UID of a user who caused the event 49 QUOTA_NL_A_WARNING (u32) 50 - what kind of limit is exceeded: 51 QUOTA_NL_IHARDWARN - inode hardlimit 52 QUOTA_NL_ISOFTLONGWARN - inode softlimit is exceeded longer 53 than given grace period 54 QUOTA_NL_ISOFTWARN - inode softlimit 55 QUOTA_NL_BHARDWARN - space (block) hardlimit 56 QUOTA_NL_BSOFTLONGWARN - space (block) softlimit is exceeded 57 longer than given grace period. 58 QUOTA_NL_BSOFTWARN - space (block) softlimit 59 - four warnings are also defined for the event when user stops 60 exceeding some limit: 61 QUOTA_NL_IHARDBELOW - inode hardlimit 62 QUOTA_NL_ISOFTBELOW - inode softlimit 63 QUOTA_NL_BHARDBELOW - space (block) hardlimit 64 QUOTA_NL_BSOFTBELOW - space (block) softlimit 65 QUOTA_NL_A_DEV_MAJOR (u32) 66 - major number of a device with the affected filesystem 67 QUOTA_NL_A_DEV_MINOR (u32) 68 - minor number of a device with the affected filesystem 69