1 /* $OpenBSD: quota.h,v 1.12 2013/07/03 04:58:40 guenther 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 /* XXX 2038 */ 106 u_int32_t dqb_btime; /* time limit for excessive disk use */ 107 u_int32_t dqb_itime; /* time limit for excessive files */ 108 }; 109 110 #ifdef _KERNEL 111 /* 112 * Flags to ufs_quota_{alloc,free}_{blocks,inode}2 113 */ 114 enum ufs_quota_flags { 115 UFS_QUOTA_NOUID = 0x1, /* Don't change UID quota */ 116 UFS_QUOTA_NOGID = 0x2, /* Don't change GID quota */ 117 UFS_QUOTA_FORCE = 0x1000 /* don't check limits - just change it */ 118 }; /* Change GID */ 119 120 struct dquot; 121 struct inode; 122 struct mount; 123 struct proc; 124 struct ucred; 125 struct ufsmount; 126 struct vnode; 127 __BEGIN_DECLS 128 #define ufs_quota_alloc_blocks(i, c, cr) ufs_quota_alloc_blocks2(i, c, cr, 0) 129 #define ufs_quota_free_blocks(i, c, cr) ufs_quota_free_blocks2(i, c, cr, 0) 130 #define ufs_quota_alloc_inode(i, cr) ufs_quota_alloc_inode2(i, cr, 0) 131 #define ufs_quota_free_inode(i, cr) ufs_quota_free_inode2(i, cr, 0) 132 int ufs_quota_alloc_blocks2(struct inode *, daddr_t, struct ucred *, enum ufs_quota_flags); 133 int ufs_quota_free_blocks2(struct inode *, daddr_t, struct ucred *, enum ufs_quota_flags); 134 int ufs_quota_alloc_inode2(struct inode *, struct ucred *, enum ufs_quota_flags); 135 int ufs_quota_free_inode2(struct inode *, struct ucred *, enum ufs_quota_flags); 136 137 int ufs_quota_delete(struct inode *); 138 139 int getinoquota(struct inode *); 140 int quotaoff(struct proc *, struct mount *, int); 141 int qsync(struct mount *mp); 142 int ufs_quotactl(struct mount *, int, uid_t, caddr_t, struct proc *); 143 144 void ufs_quota_init(void); 145 146 __END_DECLS 147 #endif /* _KERNEL */ 148 149 #endif /* _QUOTA_ */ 150