root/include/linux/quota.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


   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  * Version: $Id: quota.h,v 1.8 1995/03/11 11:43:07 mvw Exp mvw $
  37  */
  38 
  39 #ifndef _LINUX_QUOTA_
  40 #define _LINUX_QUOTA_
  41 
  42 #include <linux/errno.h>
  43 
  44 /*
  45  * Convert diskblocks to blocks and the other way around.
  46  * currently only to fool the BSD source. :-)
  47  */
  48 #define dbtob(num) (num << 10)
  49 #define btodb(num) (num >> 10)
  50 
  51 /*
  52  * Convert count of filesystem blocks to diskquota blocks, meant
  53  * for filesystems where i_blksize != BLOCK_SIZE
  54  */
  55 #define fs_to_dq_blocks(num, blksize) (((num) * (blksize)) / BLOCK_SIZE)
  56 
  57 /*
  58  * Definitions for disk quotas imposed on the average user
  59  * (big brother finally hits Linux).
  60  *
  61  * The following constants define the amount of time given a user
  62  * before the soft limits are treated as hard limits (usually resulting
  63  * in an allocation failure). The timer is started when the user crosses
  64  * their soft limit, it is reset when they go below their soft limit.
  65  */
  66 #define MAX_IQ_TIME  604800     /* (7*24*60*60) 1 week */
  67 #define MAX_DQ_TIME  604800     /* (7*24*60*60) 1 week */
  68 
  69 #define MAXQUOTAS 2
  70 #define USRQUOTA  0             /* element used for user quotas */
  71 #define GRPQUOTA  1             /* element used for group quotas */
  72 
  73 /*
  74  * Definitions for the default names of the quotas files.
  75  */
  76 #define INITQFNAMES { \
  77    "user",      /* USRQUOTA */ \
  78    "group",   /* GRPQUOTA */ \
  79    "undefined", \
  80 };
  81 
  82 #define QUOTAFILENAME "quota"
  83 #define QUOTAGROUP "staff"
  84 
  85 #define NR_DQHASH 43            /* Just an arbitrary number any suggestions ? */
  86 #define NR_DQUOTS 256           /* Number of quotas active at one time */
  87 
  88 /*
  89  * Command definitions for the 'quotactl' system call.
  90  * The commands are broken into a main command defined below
  91  * and a subcommand that is used to convey the type of
  92  * quota that is being manipulated (see above).
  93  */
  94 #define SUBCMDMASK  0x00ff
  95 #define SUBCMDSHIFT 8
  96 #define QCMD(cmd, type)  (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK))
  97 
  98 #define Q_QUOTAON  0x0100       /* enable quotas */
  99 #define Q_QUOTAOFF 0x0200       /* disable quotas */
 100 #define Q_GETQUOTA 0x0300       /* get limits and usage */
 101 #define Q_SETQUOTA 0x0400       /* set limits and usage */
 102 #define Q_SETUSE   0x0500       /* set usage */
 103 #define Q_SYNC     0x0600       /* sync disk copy of a filesystems quotas */
 104 #define Q_SETQLIM  0x0700       /* set limits */
 105 #define Q_GETSTATS 0x0800       /* get collected stats */
 106 
 107 /*
 108  * The following structure defines the format of the disk quota file
 109  * (as it appears on disk) - the file is an array of these structures
 110  * indexed by user or group number.
 111  */
 112 struct dqblk {
 113     __u32 dqb_bhardlimit;       /* absolute limit on disk blks alloc */
 114     __u32 dqb_bsoftlimit;       /* preferred limit on disk blks */
 115     __u32 dqb_curblocks;        /* current block count */
 116     __u32 dqb_ihardlimit;       /* maximum # allocated inodes */
 117     __u32 dqb_isoftlimit;       /* preferred inode limit */
 118     __u32 dqb_curinodes;        /* current # allocated inodes */
 119     time_t dqb_btime;           /* time limit for excessive disk use */
 120     time_t dqb_itime;           /* time limit for excessive files */
 121 };
 122 
 123 /*
 124  * Shorthand notation.
 125  */
 126 #define dq_bhardlimit   dq_dqb.dqb_bhardlimit
 127 #define dq_bsoftlimit   dq_dqb.dqb_bsoftlimit
 128 #define dq_curblocks    dq_dqb.dqb_curblocks
 129 #define dq_ihardlimit   dq_dqb.dqb_ihardlimit
 130 #define dq_isoftlimit   dq_dqb.dqb_isoftlimit
 131 #define dq_curinodes    dq_dqb.dqb_curinodes
 132 #define dq_btime        dq_dqb.dqb_btime
 133 #define dq_itime        dq_dqb.dqb_itime
 134 
 135 #define dqoff(UID)      ((off_t)((UID) * sizeof (struct dqblk)))
 136 
 137 struct dqstats {
 138    __u32 lookups;
 139    __u32 drops;
 140    __u32 reads;
 141    __u32 writes;
 142    __u32 cache_hits;
 143    __u32 pages_allocated;
 144    __u32 allocated_dquots;
 145    __u32 free_dquots;
 146    __u32 syncs;
 147 };
 148 
 149 #ifdef __KERNEL__
 150 
 151 #include <linux/mount.h>
 152 
 153 /*
 154  * Maximum length of a message generated in the quota system,
 155  * that needs to be kicked onto the tty.
 156  */
 157 #define MAX_QUOTA_MESSAGE 75
 158 
 159 #define DQ_LOCKED     0x01      /* locked for update */
 160 #define DQ_WANT       0x02      /* wanted for update */
 161 #define DQ_MOD        0x04      /* dquot modified since read */
 162 #define DQ_BLKS       0x10      /* uid/gid has been warned about blk limit */
 163 #define DQ_INODES     0x20      /* uid/gid has been warned about inode limit */
 164 #define DQ_FAKE       0x40      /* no limits only usage */
 165 
 166 struct dquot {
 167    unsigned int dq_id;          /* id this applies to (uid, gid) */
 168    short dq_type;               /* type of quota */
 169    kdev_t dq_dev;                /* Device this applies to */
 170    short dq_flags;              /* see DQ_* */
 171    short dq_count;              /* reference count */
 172    struct vfsmount *dq_mnt;     /* vfsmountpoint this applies to */
 173    struct dqblk dq_dqb;         /* diskquota usage */
 174    struct wait_queue *dq_wait;  /* pointer to waitqueue */
 175    struct dquot *dq_prev;       /* pointer to prev dquot */
 176    struct dquot *dq_next;       /* pointer to next dquot */
 177    struct dquot *dq_hash_prev;  /* pointer to prev dquot */
 178    struct dquot *dq_hash_next;  /* pointer to next dquot */
 179 };
 180 
 181 #define NODQUOT (struct dquot *)NULL
 182 
 183 /*
 184  * Flags used for set_dqblk.
 185  */
 186 #define QUOTA_SYSCALL     0x01
 187 #define SET_QUOTA         0x02
 188 #define SET_USE           0x04
 189 #define SET_QLIMIT        0x08
 190 
 191 #define QUOTA_OK          0
 192 #define NO_QUOTA          1
 193 
 194 /*
 195  * declaration of quota_function calls in kernel.
 196  */
 197 
 198 extern void dquot_initialize(struct inode *inode, short type);
 199 extern void dquot_drop(struct inode *inode);
 200 extern int dquot_alloc_block(const struct inode *inode, unsigned long number);
 201 extern int dquot_alloc_inode(const struct inode *inode, unsigned long number);
 202 extern void dquot_free_block(const struct inode *inode, unsigned long number);
 203 extern void dquot_free_inode(const struct inode *inode, unsigned long number);
 204 extern int dquot_transfer(struct inode *inode, struct iattr *iattr, char direction);
 205 
 206 extern void invalidate_dquots(kdev_t dev, short type);
 207 extern int quota_off(kdev_t dev, short type);
 208 extern int sync_dquots(kdev_t dev, short type);
 209 
 210 #else
 211 
 212 #include <sys/cdefs.h>
 213 
 214 __BEGIN_DECLS
 215 int quotactl __P ((int, const char *, int, caddr_t));
 216 __END_DECLS
 217 
 218 #endif /* __KERNEL__ */
 219 #endif /* _QUOTA_ */

/* [previous][next][first][last][top][bottom][index][help] */