Merge tag 'libnvdimm-for-5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdim...
[linux-2.6-microblaze.git] / Documentation / filesystems / quota.rst
1 .. SPDX-License-Identifier: GPL-2.0
2
3 ===============
4 Quota subsystem
5 ===============
6
7 Quota subsystem allows system administrator to set limits on used space and
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
11 and the second one hardlimit.  A user can never exceed a hardlimit for any
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.
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
21 (https://sourceforge.net/projects/linuxquota).
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
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.
39
40 Currently, the interface supports only one message type QUOTA_NL_C_WARNING.
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):
44
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:
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
70           - four warnings are also defined for the event when user stops
71             exceeding some limit:
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
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