| 
									
										
										
										
											2007-10-16 23:29:31 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | Quota subsystem | 
					
						
							|  |  |  | =============== | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Quota subsystem allows system administrator to set limits on used space and | 
					
						
							| 
									
										
										
										
											2008-08-12 15:08:39 -07:00
										 |  |  | number of used inodes (inode is a filesystem structure which is associated with | 
					
						
							|  |  |  | each file or directory) for users and/or groups. For both used space and number | 
					
						
							|  |  |  | of used inodes there are actually two limits. The first one is called softlimit | 
					
						
							|  |  |  | and the second one hardlimit.  An user can never exceed a hardlimit for any | 
					
						
							|  |  |  | resource (unless he has CAP_SYS_RESOURCE capability). User is allowed to exceed | 
					
						
							|  |  |  | softlimit but only for limited period of time. This period is called "grace | 
					
						
							|  |  |  | period" or "grace time". When grace time is over, user is not able to allocate | 
					
						
							|  |  |  | more space/inodes until he frees enough of them to get below softlimit. | 
					
						
							| 
									
										
										
										
											2007-10-16 23:29:31 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | Quota limits (and amount of grace time) are set independently for each | 
					
						
							|  |  |  | filesystem. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For more details about quota design, see the documentation in quota-tools package | 
					
						
							|  |  |  | (http://sourceforge.net/projects/linuxquota). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Quota netlink interface | 
					
						
							|  |  |  | ======================= | 
					
						
							|  |  |  | When user exceeds a softlimit, runs out of grace time or reaches hardlimit, | 
					
						
							|  |  |  | quota subsystem traditionally printed a message to the controlling terminal of | 
					
						
							|  |  |  | the process which caused the excess. This method has the disadvantage that | 
					
						
							|  |  |  | when user is using a graphical desktop he usually cannot see the message. | 
					
						
							|  |  |  | Thus quota netlink interface has been designed to pass information about | 
					
						
							|  |  |  | the above events to userspace. There they can be captured by an application | 
					
						
							|  |  |  | and processed accordingly. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The interface uses generic netlink framework (see | 
					
						
							|  |  |  | http://lwn.net/Articles/208755/ and http://people.suug.ch/~tgr/libnl/ for more | 
					
						
							|  |  |  | details about this layer). The name of the quota generic netlink interface | 
					
						
							|  |  |  | is "VFS_DQUOT". Definitions of constants below are in <linux/quota.h>. | 
					
						
							|  |  |  |   Currently, the interface supports only one message type QUOTA_NL_C_WARNING. | 
					
						
							|  |  |  | This command is used to send a notification about any of the above mentioned | 
					
						
							|  |  |  | events. Each message has six attributes. These are (type of the argument is | 
					
						
							|  |  |  | in parentheses): | 
					
						
							|  |  |  |         QUOTA_NL_A_QTYPE (u32) | 
					
						
							|  |  |  | 	  - type of quota being exceeded (one of USRQUOTA, GRPQUOTA) | 
					
						
							|  |  |  |         QUOTA_NL_A_EXCESS_ID (u64) | 
					
						
							|  |  |  | 	  - UID/GID (depends on quota type) of user / group whose limit | 
					
						
							|  |  |  | 	    is being exceeded. | 
					
						
							|  |  |  |         QUOTA_NL_A_CAUSED_ID (u64) | 
					
						
							|  |  |  | 	  - UID of a user who caused the event | 
					
						
							|  |  |  |         QUOTA_NL_A_WARNING (u32) | 
					
						
							|  |  |  | 	  - what kind of limit is exceeded: | 
					
						
							|  |  |  | 		QUOTA_NL_IHARDWARN - inode hardlimit | 
					
						
							|  |  |  | 		QUOTA_NL_ISOFTLONGWARN - inode softlimit is exceeded longer | 
					
						
							|  |  |  | 		  than given grace period | 
					
						
							|  |  |  | 		QUOTA_NL_ISOFTWARN - inode softlimit | 
					
						
							|  |  |  | 		QUOTA_NL_BHARDWARN - space (block) hardlimit | 
					
						
							|  |  |  | 		QUOTA_NL_BSOFTLONGWARN - space (block) softlimit is exceeded | 
					
						
							|  |  |  | 		  longer than given grace period. | 
					
						
							|  |  |  | 		QUOTA_NL_BSOFTWARN - space (block) softlimit | 
					
						
							| 
									
										
										
										
											2008-08-12 15:08:39 -07:00
										 |  |  | 	  - four warnings are also defined for the event when user stops | 
					
						
							|  |  |  | 	    exceeding some limit: | 
					
						
							|  |  |  | 		QUOTA_NL_IHARDBELOW - inode hardlimit | 
					
						
							|  |  |  | 		QUOTA_NL_ISOFTBELOW - inode softlimit | 
					
						
							|  |  |  | 		QUOTA_NL_BHARDBELOW - space (block) hardlimit | 
					
						
							|  |  |  | 		QUOTA_NL_BSOFTBELOW - space (block) softlimit | 
					
						
							| 
									
										
										
										
											2007-10-16 23:29:31 -07:00
										 |  |  |         QUOTA_NL_A_DEV_MAJOR (u32) | 
					
						
							|  |  |  | 	  - major number of a device with the affected filesystem | 
					
						
							|  |  |  |         QUOTA_NL_A_DEV_MINOR (u32) | 
					
						
							|  |  |  | 	  - minor number of a device with the affected filesystem |