Annotation of sys/ufs/ufs/quota.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: quota.h,v 1.8 2003/06/02 23:28:23 millert Exp $ */
2: /* $NetBSD: quota.h,v 1.6 1995/03/26 20:38:17 jtc Exp $ */
3:
4: /*
5: * Copyright (c) 1982, 1986, 1993
6: * The Regents of the University of California. All rights reserved.
7: *
8: * This code is derived from software contributed to Berkeley by
9: * Robert Elz at The University of Melbourne.
10: *
11: * Redistribution and use in source and binary forms, with or without
12: * modification, are permitted provided that the following conditions
13: * are met:
14: * 1. Redistributions of source code must retain the above copyright
15: * notice, this list of conditions and the following disclaimer.
16: * 2. Redistributions in binary form must reproduce the above copyright
17: * notice, this list of conditions and the following disclaimer in the
18: * documentation and/or other materials provided with the distribution.
19: * 3. Neither the name of the University nor the names of its contributors
20: * may be used to endorse or promote products derived from this software
21: * without specific prior written permission.
22: *
23: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33: * SUCH DAMAGE.
34: *
35: * @(#)quota.h 8.3 (Berkeley) 8/19/94
36: */
37:
38: #ifndef _QUOTA_
39: #define _QUOTA_
40:
41: /*
42: * Definitions for disk quotas imposed on the average user
43: * (big brother finally hits UNIX).
44: *
45: * The following constants define the amount of time given a user before the
46: * soft limits are treated as hard limits (usually resulting in an allocation
47: * failure). The timer is started when the user crosses their soft limit, it
48: * is reset when they go below their soft limit.
49: */
50: #define MAX_IQ_TIME (7*24*60*60) /* seconds in 1 week */
51: #define MAX_DQ_TIME (7*24*60*60) /* seconds in 1 week */
52:
53: /*
54: * The following constants define the usage of the quota file array in the
55: * ufsmount structure and dquot array in the inode structure. The semantics
56: * of the elements of these arrays are defined in the routine getinoquota;
57: * the remainder of the quota code treats them generically and need not be
58: * inspected when changing the size of the array.
59: */
60: #define MAXQUOTAS 2
61: #define USRQUOTA 0 /* element used for user quotas */
62: #define GRPQUOTA 1 /* element used for group quotas */
63:
64: /*
65: * Definitions for the default names of the quotas files.
66: */
67: #define INITQFNAMES { \
68: "user", /* USRQUOTA */ \
69: "group", /* GRPQUOTA */ \
70: "undefined", \
71: }
72: #define QUOTAFILENAME "quota"
73: #define QUOTAGROUP "operator"
74:
75: /*
76: * Command definitions for the 'quotactl' system call. The commands are
77: * broken into a main command defined below and a subcommand that is used
78: * to convey the type of quota that is being manipulated (see above).
79: */
80: #define SUBCMDMASK 0x00ff
81: #define SUBCMDSHIFT 8
82: #define QCMD(cmd, type) (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK))
83:
84: #define Q_QUOTAON 0x0100 /* enable quotas */
85: #define Q_QUOTAOFF 0x0200 /* disable quotas */
86: #define Q_GETQUOTA 0x0300 /* get limits and usage */
87: #define Q_SETQUOTA 0x0400 /* set limits and usage */
88: #define Q_SETUSE 0x0500 /* set usage */
89: #define Q_SYNC 0x0600 /* sync disk copy of a filesystems quotas */
90:
91: /*
92: * The following structure defines the format of the disk quota file
93: * (as it appears on disk) - the file is an array of these structures
94: * indexed by user or group number. The setquota system call establishes
95: * the vnode for each quota file (a pointer is retained in the ufsmount
96: * structure).
97: */
98: struct dqblk {
99: u_int32_t dqb_bhardlimit; /* absolute limit on disk blks alloc */
100: u_int32_t dqb_bsoftlimit; /* preferred limit on disk blks */
101: u_int32_t dqb_curblocks; /* current block count */
102: u_int32_t dqb_ihardlimit; /* maximum # allocated inodes + 1 */
103: u_int32_t dqb_isoftlimit; /* preferred inode limit */
104: u_int32_t dqb_curinodes; /* current # allocated inodes */
105: time_t dqb_btime; /* time limit for excessive disk use */
106: time_t dqb_itime; /* time limit for excessive files */
107: };
108:
109: #ifdef _KERNEL
110: /*
111: * Flags to ufs_quota_{alloc,free}_{blocks,inode}2
112: */
113: enum ufs_quota_flags {
114: UFS_QUOTA_NOUID = 0x1, /* Don't change UID quota */
115: UFS_QUOTA_NOGID = 0x2, /* Don't change GID quota */
116: UFS_QUOTA_FORCE = 0x1000 /* don't check limits - just change it */
117: }; /* Change GID */
118:
119: #include <sys/cdefs.h>
120:
121: struct dquot;
122: struct inode;
123: struct mount;
124: struct proc;
125: struct ucred;
126: struct ufsmount;
127: struct vnode;
128: __BEGIN_DECLS
129: #define ufs_quota_alloc_blocks(i, c, cr) ufs_quota_alloc_blocks2(i, c, cr, 0)
130: #define ufs_quota_free_blocks(i, c, cr) ufs_quota_free_blocks2(i, c, cr, 0)
131: #define ufs_quota_alloc_inode(i, cr) ufs_quota_alloc_inode2(i, cr, 0)
132: #define ufs_quota_free_inode(i, cr) ufs_quota_free_inode2(i, cr, 0)
133: int ufs_quota_alloc_blocks2(struct inode *, int32_t, struct ucred *, enum ufs_quota_flags);
134: int ufs_quota_free_blocks2(struct inode *, int32_t, struct ucred *, enum ufs_quota_flags);
135: int ufs_quota_alloc_inode2(struct inode *, struct ucred *, enum ufs_quota_flags);
136: int ufs_quota_free_inode2(struct inode *, struct ucred *, enum ufs_quota_flags);
137:
138: int ufs_quota_delete(struct inode *);
139:
140: int getinoquota(struct inode *);
141: int quotaoff(struct proc *, struct mount *, int);
142: int qsync(struct mount *mp);
143: int ufs_quotactl(struct mount *, int, uid_t, caddr_t, struct proc *);
144:
145: void ufs_quota_init(void);
146:
147: __END_DECLS
148: #endif /* _KERNEL */
149:
150: #endif /* _QUOTA_ */
CVSweb