OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [uclinux/] [uC-libc/] [include/] [linux/] [quota.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 199 simons
/*
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.1.1.1 2001-09-10 07:43:50 simons Exp $
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
   short dq_locknest;           /* lock nesting */
173
   struct task_struct *dq_lockproc;     /* process holding the lock */
174
   struct vfsmount *dq_mnt;     /* vfsmountpoint this applies to */
175
   struct dqblk dq_dqb;         /* diskquota usage */
176
   struct wait_queue *dq_wait;  /* pointer to waitqueue */
177
   struct dquot *dq_prev;       /* pointer to prev dquot */
178
   struct dquot *dq_next;       /* pointer to next dquot */
179
   struct dquot *dq_hash_prev;  /* pointer to prev dquot */
180
   struct dquot *dq_hash_next;  /* pointer to next dquot */
181
};
182
 
183
#define NODQUOT (struct dquot *)NULL
184
 
185
/*
186
 * Flags used for set_dqblk.
187
 */
188
#define QUOTA_SYSCALL     0x01
189
#define SET_QUOTA         0x02
190
#define SET_USE           0x04
191
#define SET_QLIMIT        0x08
192
 
193
#define QUOTA_OK          0
194
#define NO_QUOTA          1
195
 
196
/*
197
 * declaration of quota_function calls in kernel.
198
 */
199
 
200
extern void dquot_initialize(struct inode *inode, short type);
201
extern void dquot_drop(struct inode *inode);
202
extern int dquot_alloc_block(const struct inode *inode, unsigned long number);
203
extern int dquot_alloc_inode(const struct inode *inode, unsigned long number);
204
extern void dquot_free_block(const struct inode *inode, unsigned long number);
205
extern void dquot_free_inode(const struct inode *inode, unsigned long number);
206
extern int dquot_transfer(struct inode *inode, struct iattr *iattr, char direction);
207
 
208
extern void invalidate_dquots(kdev_t dev, short type);
209
extern int quota_off(kdev_t dev, short type);
210
extern int sync_dquots(kdev_t dev, short type);
211
 
212
#else
213
 
214
#include <sys/cdefs.h>
215
 
216
__BEGIN_DECLS
217
int quotactl __P ((int, const char *, int, caddr_t));
218
__END_DECLS
219
 
220
#endif /* __KERNEL__ */
221
#endif /* _QUOTA_ */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.