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 (Berkeley) 6/4/86
   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)
  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)
 114: struct  dquot *dquot, *dquotNDQUOT;
 115: int ndquot;
 116: struct  dquot *discquota(), *inoquota(), *dqalloc(), *dqp();
 117: #endif
 118: 
 119: /*
 120:  * Definitions for the 'quota' system call.
 121:  */
 122: #define Q_SETDLIM   1   /* set disc limits & usage */
 123: #define Q_GETDLIM   2   /* get disc limits & usage */
 124: #define Q_SETDUSE   3   /* set disc usage only */
 125: #define Q_SYNC      4   /* update disc copy of quota usages */
 126: #define Q_SETUID    16  /* change proc to use quotas for uid */
 127: #define Q_SETWARN   25  /* alter inode/block warning counts */
 128: #define Q_DOWARN    26  /* warn user about excessive space/inodes */
 129: 
 130: /*
 131:  * Used in Q_SETDUSE.
 132:  */
 133: struct  dqusage {
 134:     u_short du_curinodes;
 135:     u_long  du_curblocks;
 136: };
 137: 
 138: /*
 139:  * Used in Q_SETWARN.
 140:  */
 141: struct  dqwarn {
 142:     u_char  dw_bwarn;
 143:     u_char  dw_iwarn;
 144: };

Defined variables

dquot defined in line 114; used 3 times
dquotNDQUOT defined in line 114; used 2 times
ndquot defined in line 115; used 2 times
nquota defined in line 39; used 2 times

Defined struct's

dqblk defined in line 61; used 18 times
dquot defined in line 77; used 71 times
dqusage defined in line 133; used 2 times
dqwarn defined in line 141; used 2 times
quota defined in line 22; used 66 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
MAX_IQ_WARN defined in line 58; used 2 times
Q_DOWARN defined in line 128; used 1 times
Q_GETDLIM defined in line 123; never used
Q_LOCK defined in line 27; used 8 times
Q_NEW defined in line 29; used 2 times
Q_SETDLIM defined in line 122; never used
Q_SETDUSE defined in line 124; never used
Q_SETUID defined in line 126; used 1 times
Q_SETWARN defined in line 127; never used
Q_SYNC defined in line 125; used 1 times
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: 1986-06-05
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1103
Valid CSS Valid XHTML 1.0 Strict