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