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 #include <linux/mount.h>
  74 
  75 /*
  76  * Definitions for the default names of the quotas files.
  77  */
  78 #define INITQFNAMES { \
  79    "user",      /* USRQUOTA */ \
  80    "group",   /* GRPQUOTA */ \
  81    "undefined", \
  82 };
  83 
  84 #define QUOTAFILENAME "quota"
  85 #define QUOTAGROUP "staff"
  86 
  87 #define NR_DQHASH 43            /* Just an arbitrary number any suggestions ? */
  88 #define NR_DQUOTS 256           /* Number of quotas active at one time */
  89 
  90 /*
  91  * Command definitions for the 'quotactl' system call.
  92  * The commands are broken into a main command defined below
  93  * and a subcommand that is used to convey the type of
  94  * quota that is being manipulated (see above).
  95  */
  96 #define SUBCMDMASK  0x00ff
  97 #define SUBCMDSHIFT 8
  98 #define QCMD(cmd, type)  (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK))
  99 
 100 #define Q_QUOTAON  0x0100       /* enable quotas */
 101 #define Q_QUOTAOFF 0x0200       /* disable quotas */
 102 #define Q_GETQUOTA 0x0300       /* get limits and usage */
 103 #define Q_SETQUOTA 0x0400       /* set limits and usage */
 104 #define Q_SETUSE   0x0500       /* set usage */
 105 #define Q_SYNC     0x0600       /* sync disk copy of a filesystems quotas */
 106 #define Q_SETQLIM  0x0700       /* set limits */
 107 #define Q_GETSTATS 0x0800       /* get collected stats */
 108 
 109 /*
 110  * The following structure defines the format of the disk quota file
 111  * (as it appears on disk) - the file is an array of these structures
 112  * indexed by user or group number.
 113  */
 114 struct dqblk {
 115     __u32 dqb_bhardlimit;       /* absolute limit on disk blks alloc */
 116     __u32 dqb_bsoftlimit;       /* preferred limit on disk blks */
 117     __u32 dqb_curblocks;        /* current block count */
 118     __u32 dqb_ihardlimit;       /* maximum # allocated inodes */
 119     __u32 dqb_isoftlimit;       /* preferred inode limit */
 120     __u32 dqb_curinodes;        /* current # allocated inodes */
 121     time_t dqb_btime;           /* time limit for excessive disk use */
 122     time_t dqb_itime;           /* time limit for excessive files */
 123 };
 124 
 125 /*
 126  * Shorthand notation.
 127  */
 128 #define dq_bhardlimit   dq_dqb.dqb_bhardlimit
 129 #define dq_bsoftlimit   dq_dqb.dqb_bsoftlimit
 130 #define dq_curblocks    dq_dqb.dqb_curblocks
 131 #define dq_ihardlimit   dq_dqb.dqb_ihardlimit
 132 #define dq_isoftlimit   dq_dqb.dqb_isoftlimit
 133 #define dq_curinodes    dq_dqb.dqb_curinodes
 134 #define dq_btime        dq_dqb.dqb_btime
 135 #define dq_itime        dq_dqb.dqb_itime
 136 
 137 #define dqoff(UID)      ((off_t)((UID) * sizeof (struct dqblk)))
 138 
 139 struct dqstats {
 140    __u32 lookups;
 141    __u32 drops;
 142    __u32 reads;
 143    __u32 writes;
 144    __u32 cache_hits;
 145    __u32 pages_allocated;
 146    __u32 allocated_dquots;
 147    __u32 free_dquots;
 148    __u32 syncs;
 149 };
 150 
 151 #ifdef __KERNEL__
 152 
 153 /*
 154  * Maximum lenght 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] */