1: /*
   2:  * Copyright (c) 1982, 1986 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  *
   6:  *	@(#)quota.h	7.1.1 (2.11BSD) 1996/1/23
   7:  */
   8: 
   9: /*
  10:  * MELBOURNE DISC QUOTAS
  11:  *
  12:  * Various junk to do with various quotas (etc) imposed upon
  13:  * the average user (big brother finally hits UNIX).
  14:  *
  15:  * The following structure exists in core for each logged on user.
  16:  * It contains global junk relevant to that user's quotas.
  17:  *
  18:  * The u_quota field of each user struct contains a pointer to
  19:  * the quota struct relevant to the current process, this is changed
  20:  * by 'setuid' sys call, &/or by the Q_SETUID quota() call.
  21:  */
  22: struct quota {
  23:     struct  quota *q_forw, *q_back; /* hash chain, MUST be first */
  24:     short   q_cnt;          /* ref count (# processes) */
  25:     uid_t   q_uid;          /* real uid of owner */
  26:     int q_flags;        /* struct management flags */
  27: #define Q_LOCK  0x01        /* quota struct locked (for disc i/o) */
  28: #define Q_WANT  0x02        /* issue a wakeup when lock goes off */
  29: #define Q_NEW   0x04        /* new quota - no proc1 msg sent yet */
  30: #define Q_NDQ   0x08        /* account has NO disc quota */
  31:     struct  quota *q_freef, **q_freeb;
  32:     struct  dquot *q_dq[NMOUNT];    /* disc quotas for mounted filesys's */
  33: };
  34: 
  35: #define NOQUOTA ((struct quota *) 0)
  36: 
  37: #if defined(KERNEL) && defined(QUOTA) && !defined(SUPERVISOR)
  38: struct  quota *quota, *quotaNQUOTA;
  39: int nquota;
  40: struct  quota *getquota(), *qfind();
  41: #endif
  42: 
  43: /*
  44:  * The following structure defines the format of the disc quota file
  45:  * (as it appears on disc) - the file is an array of these structures
  46:  * indexed by user number.  The setquota sys call establishes the inode
  47:  * for each quota file (a pointer is retained in the mount structure).
  48:  *
  49:  * The following constants define the number of warnings given a user
  50:  * before the soft limits are treated as hard limits (usually resulting
  51:  * in an allocation failure).  The warnings are normally manipulated
  52:  * each time a user logs in through the Q_DOWARN quota call.  If
  53:  * the user logs in and is under the soft limit the warning count
  54:  * is reset to MAX_*_WARN, otherwise a message is printed and the
  55:  * warning count is decremented.  This makes MAX_*_WARN equivalent to
  56:  * the number of logins before soft limits are treated as hard limits.
  57:  */
  58: #define MAX_IQ_WARN 3
  59: #define MAX_DQ_WARN 3
  60: 
  61: struct  dqblk {
  62:     u_long  dqb_bhardlimit; /* absolute limit on disc blks alloc */
  63:     u_long  dqb_bsoftlimit; /* preferred limit on disc blks */
  64:     u_long  dqb_curblocks;  /* current block count */
  65:     u_short dqb_ihardlimit; /* maximum # allocated inodes + 1 */
  66:     u_short dqb_isoftlimit; /* preferred inode limit */
  67:     u_short dqb_curinodes;  /* current # allocated inodes */
  68:     u_char  dqb_bwarn;  /* # warnings left about excessive disc use */
  69:     u_char  dqb_iwarn;  /* # warnings left about excessive inodes */
  70: };
  71: 
  72: /*
  73:  * The following structure records disc usage for a user on a filesystem.
  74:  * There is one allocated for each quota that exists on any filesystem
  75:  * for the current user. A cache is kept of other recently used entries.
  76:  */
  77: struct  dquot {
  78:     struct  dquot *dq_forw, *dq_back;/* MUST be first entry */
  79:     union   {
  80:         struct  quota *Dq_own;  /* the quota that points to this */
  81:         struct {        /* free list */
  82:             struct  dquot *Dq_freef, **Dq_freeb;
  83:         } dq_f;
  84:     } dq_u;
  85:     short   dq_flags;
  86: #define DQ_LOCK     0x01        /* this quota locked (no MODS) */
  87: #define DQ_WANT     0x02        /* wakeup on unlock */
  88: #define DQ_MOD      0x04        /* this quota modified since read */
  89: #define DQ_FAKE     0x08        /* no limits here, just usage */
  90: #define DQ_BLKS     0x10        /* has been warned about blk limit */
  91: #define DQ_INODS    0x20        /* has been warned about inode limit */
  92:     short   dq_cnt;         /* count of active references */
  93:     uid_t   dq_uid;         /* user this applies to */
  94:     dev_t   dq_dev;         /* filesystem this relates to */
  95:     struct dqblk dq_dqb;        /* actual usage & quotas */
  96: };
  97: 
  98: #define dq_own      dq_u.Dq_own
  99: #define dq_freef    dq_u.dq_f.Dq_freef
 100: #define dq_freeb    dq_u.dq_f.Dq_freeb
 101: #define dq_bhardlimit   dq_dqb.dqb_bhardlimit
 102: #define dq_bsoftlimit   dq_dqb.dqb_bsoftlimit
 103: #define dq_curblocks    dq_dqb.dqb_curblocks
 104: #define dq_ihardlimit   dq_dqb.dqb_ihardlimit
 105: #define dq_isoftlimit   dq_dqb.dqb_isoftlimit
 106: #define dq_curinodes    dq_dqb.dqb_curinodes
 107: #define dq_bwarn    dq_dqb.dqb_bwarn
 108: #define dq_iwarn    dq_dqb.dqb_iwarn
 109: 
 110: #define NODQUOT     ((struct dquot *) 0)
 111: #define LOSTDQUOT   ((struct dquot *) 1)
 112: 
 113: #if defined(KERNEL) && defined(QUOTA) && !defined(SUPERVISOR)
 114: struct  dquot *dquot, *dquotNDQUOT;
 115: int ndquot;
 116: struct  dquot *discquota(), *inoquota(), *dqalloc(), *dqp();
 117: #endif
 118: 
 119: #define QUOTAFILENAME   "quotas"
 120: #define QUOTAGROUP  "operator"
 121: 
 122: /*
 123:  * Definitions for the 'quota' system call.
 124:  */
 125: #define Q_SETDLIM   1   /* set disc limits & usage */
 126: #define Q_GETDLIM   2   /* get disc limits & usage */
 127: #define Q_SETDUSE   3   /* set disc usage only */
 128: #define Q_SYNC      4   /* update disc copy of quota usages */
 129: #define Q_SETUID    16  /* change proc to use quotas for uid */
 130: #define Q_SETWARN   25  /* alter inode/block warning counts */
 131: #define Q_DOWARN    26  /* warn user about excessive space/inodes */
 132: 
 133: /*
 134:  * Used in Q_SETDUSE.
 135:  */
 136: struct  dqusage {
 137:     u_short du_curinodes;
 138:     u_long  du_curblocks;
 139: };
 140: 
 141: /*
 142:  * Used in Q_SETWARN.
 143:  */
 144: struct  dqwarn {
 145:     u_char  dw_bwarn;
 146:     u_char  dw_iwarn;
 147: };
 148: 
 149: #if defined(KERNEL) && defined(QUOTA) && !defined(SUPERVISOR)
 150: #include "../machine/seg.h"
 151: 
 152: struct  qhash {
 153:     struct  qhash *qh_forw;
 154:     struct  qhash *qh_back;
 155: };
 156: 
 157: struct  dqhead {
 158:     struct  dqhead *dqh_forw;
 159:     struct  dqhead *dqh_back;
 160: };
 161: 
 162: #define QUOTAMAP()  mapseg5(quotreg, quotdesc)
 163: #define QUOTAUNMAP()    normalseg5()
 164: 
 165: memaddr quotreg;
 166: u_short quotdesc;
 167: struct  dquot **ix_dquot;
 168: 
 169: #define NQHASH      16  /* small power of 2 */
 170: #define NDQHASH     37  /* 4.3bsd used 51 which isn't even prime */
 171: #define NQUOTA      40
 172: #define NDQUOT      150
 173: #endif

Defined variables

Defined struct's

dqblk defined in line 61; used 70 times
dqhead defined in line 157; used 34 times
dquot defined in line 77; used 91 times
dqusage defined in line 136; used 4 times
dqwarn defined in line 144; used 2 times
qhash defined in line 152; used 34 times
quota defined in line 22; used 70 times

Defined macros

DQ_BLKS defined in line 90; used 7 times
DQ_FAKE defined in line 89; never used
DQ_INODS defined in line 91; used 7 times
DQ_LOCK defined in line 86; used 7 times
DQ_WANT defined in line 87; used 7 times
QUOTAGROUP defined in line 120; used 1 times
Q_DOWARN defined in line 131; used 2 times
Q_GETDLIM defined in line 126; used 2 times
Q_LOCK defined in line 27; used 8 times
Q_NEW defined in line 29; used 2 times
Q_SETDLIM defined in line 125; used 1 times
Q_SETDUSE defined in line 127; used 1 times
Q_SETWARN defined in line 130; never used
Q_WANT defined in line 28; used 8 times
dq_bhardlimit defined in line 101; used 2 times
dq_freeb defined in line 100; used 9 times
dq_freef defined in line 99; used 7 times
dq_ihardlimit defined in line 104; used 2 times

Usage of this include

Last modified: 1996-01-24
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 707
Valid CSS Valid XHTML 1.0 Strict