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