Annotation of sys/ufs/ufs/quota.h, Revision 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