home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / sys / ufs / quota.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-05-08  |  6.7 KB  |  183 lines

  1. /*
  2.  * Copyright (c) 1982, 1986 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * This code is derived from software contributed to Berkeley by
  6.  * Robert Elz at The University of Melbourne.
  7.  *
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions
  10.  * are met:
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer.
  13.  * 2. Redistributions in binary form must reproduce the above copyright
  14.  *    notice, this list of conditions and the following disclaimer in the
  15.  *    documentation and/or other materials provided with the distribution.
  16.  * 3. All advertising materials mentioning features or use of this software
  17.  *    must display the following acknowledgement:
  18.  *    This product includes software developed by the University of
  19.  *    California, Berkeley and its contributors.
  20.  * 4. Neither the name of the University nor the names of its contributors
  21.  *    may be used to endorse or promote products derived from this software
  22.  *    without specific prior written permission.
  23.  *
  24.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  25.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  26.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  27.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  28.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  29.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  30.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  31.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  32.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  33.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  34.  * SUCH DAMAGE.
  35.  *
  36.  *    @(#)quota.h    7.9 (Berkeley) 2/22/91
  37.  */
  38.  
  39. #ifndef _QUOTA_
  40. #define _QUOTA_
  41.  
  42. /*
  43.  * Definitions for disk quotas imposed on the average user
  44.  * (big brother finally hits UNIX).
  45.  *
  46.  * The following constants define the amount of time given a user
  47.  * before the soft limits are treated as hard limits (usually resulting
  48.  * in an allocation failure). The timer is started when the user crosses
  49.  * their soft limit, it is reset when they go below their soft limit.
  50.  */
  51. #define    MAX_IQ_TIME    (7*24*60*60)    /* 1 week */
  52. #define    MAX_DQ_TIME    (7*24*60*60)    /* 1 week */
  53.  
  54. /*
  55.  * The following constants define the usage of the quota file array
  56.  * in the ufsmount structure and dquot array in the inode structure.
  57.  * The semantics of the elements of these arrays are defined in the
  58.  * routine getinoquota; the remainder of the quota code treats them
  59.  * generically and need not be inspected when changing the size of
  60.  * the array.
  61.  */
  62. #define    MAXQUOTAS    2
  63. #define    USRQUOTA    0    /* element used for user quotas */
  64. #define    GRPQUOTA    1    /* element used for group quotas */
  65.  
  66. /*
  67.  * Definitions for the default names of the quotas files.
  68.  */
  69. #define INITQFNAMES { \
  70.     "user",        /* USRQUOTA */ \
  71.     "group",    /* GRPQUOTA */ \
  72.     "undefined", \
  73. };
  74. #define QUOTAFILENAME "quota"
  75. #define QUOTAGROUP "operator"
  76.  
  77. /*
  78.  * Command definitions for the 'quotactl' system call.
  79.  * The commands are broken into a main command defined below
  80.  * and a subcommand that is used to convey the type of
  81.  * quota that is being manipulated (see above).
  82.  */
  83. #define SUBCMDMASK    0x00ff
  84. #define SUBCMDSHIFT    8
  85. #define    QCMD(cmd, type)    (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK))
  86.  
  87. #define    Q_QUOTAON    0x0100    /* enable quotas */
  88. #define    Q_QUOTAOFF    0x0200    /* disable quotas */
  89. #define    Q_GETQUOTA    0x0300    /* get limits and usage */
  90. #define    Q_SETQUOTA    0x0400    /* set limits and usage */
  91. #define    Q_SETUSE    0x0500    /* set usage */
  92. #define    Q_SYNC        0x0600    /* sync disk copy of a filesystems quotas */
  93.  
  94. /*
  95.  * The following structure defines the format of the disk quota file
  96.  * (as it appears on disk) - the file is an array of these structures
  97.  * indexed by user or group number.  The setquota system call establishes
  98.  * the vnode for each quota file (a pointer is retained in the ufsmount
  99.  * structure).
  100.  */
  101. struct    dqblk {
  102.     u_long    dqb_bhardlimit;    /* absolute limit on disk blks alloc */
  103.     u_long    dqb_bsoftlimit;    /* preferred limit on disk blks */
  104.     u_long    dqb_curblocks;    /* current block count */
  105.     u_long    dqb_ihardlimit;    /* maximum # allocated inodes + 1 */
  106.     u_long    dqb_isoftlimit;    /* preferred inode limit */
  107.     u_long    dqb_curinodes;    /* current # allocated inodes */
  108.     time_t    dqb_btime;    /* time limit for excessive disk use */
  109.     time_t    dqb_itime;    /* time limit for excessive files */
  110. };
  111.  
  112. #ifdef KERNEL
  113. /*
  114.  * The following structure records disk usage for a user or group on a
  115.  * filesystem. There is one allocated for each quota that exists on any
  116.  * filesystem for the current user or group. A cache is kept of recently
  117.  * used entries.
  118.  */
  119. struct    dquot {
  120.     struct    dquot *dq_forw, *dq_back;/* MUST be first entry */
  121.     struct    dquot *dq_freef, **dq_freeb; /* free list */
  122.     short    dq_flags;        /* flags, see below */
  123.     short    dq_cnt;            /* count of active references */
  124.     short    dq_spare;        /* unused spare padding */
  125.     short    dq_type;        /* quota type of this dquot */
  126.     u_long    dq_id;            /* identifier this applies to */
  127.     struct    ufsmount *dq_ump;    /* filesystem that this is taken from */
  128.     struct    dqblk dq_dqb;        /* actual usage & quotas */
  129. };
  130. /*
  131.  * Flag values.
  132.  */
  133. #define    DQ_LOCK        0x01        /* this quota locked (no MODS) */
  134. #define    DQ_WANT        0x02        /* wakeup on unlock */
  135. #define    DQ_MOD        0x04        /* this quota modified since read */
  136. #define    DQ_FAKE        0x08        /* no limits here, just usage */
  137. #define    DQ_BLKS        0x10        /* has been warned about blk limit */
  138. #define    DQ_INODS    0x20        /* has been warned about inode limit */
  139. /*
  140.  * Shorthand notation.
  141.  */
  142. #define    dq_bhardlimit    dq_dqb.dqb_bhardlimit
  143. #define    dq_bsoftlimit    dq_dqb.dqb_bsoftlimit
  144. #define    dq_curblocks    dq_dqb.dqb_curblocks
  145. #define    dq_ihardlimit    dq_dqb.dqb_ihardlimit
  146. #define    dq_isoftlimit    dq_dqb.dqb_isoftlimit
  147. #define    dq_curinodes    dq_dqb.dqb_curinodes
  148. #define    dq_btime    dq_dqb.dqb_btime
  149. #define    dq_itime    dq_dqb.dqb_itime
  150.  
  151. /*
  152.  * If the system has never checked for a quota for this file,
  153.  * then it is set to NODQUOT. Once a write attempt is made
  154.  * the inode pointer is set to reference a dquot structure.
  155.  */
  156. #define    NODQUOT        ((struct dquot *) 0)
  157.  
  158. /*
  159.  * Flags to chkdq() and chkiq()
  160.  */
  161. #define    FORCE    0x01    /* force usage changes independent of limits */
  162. #define    CHOWN    0x02    /* (advisory) change initiated by chown */
  163.  
  164. /*
  165.  * Macros to avoid subroutine calls to trivial functions.
  166.  */
  167. #ifndef DIAGNOSTIC
  168. #define    DQREF(dq)    (dq)->dq_cnt++
  169. #else
  170. #define    DQREF(dq)    dqref(dq)
  171. #endif /* DIAGNOSTIC */
  172.  
  173. #else
  174.  
  175. #include <sys/cdefs.h>
  176.  
  177. __BEGIN_DECLS
  178. int    quotactl __P((const char *, int, int, void *));
  179. __END_DECLS
  180.  
  181. #endif /* KERNEL */
  182. #endif /* _QUOTA_ */
  183.