1 | #ifndef _SAMBA_LINUX_XFS_H_
|
---|
2 | #define _SAMBA_LINUX_XFS_H_
|
---|
3 |
|
---|
4 | #ifndef _QUOTAIO_LINUX_XFS
|
---|
5 | #define _QUOTAIO_LINUX_XFS
|
---|
6 |
|
---|
7 | /*
|
---|
8 | * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
|
---|
9 | *
|
---|
10 | * This program is free software; you can redistribute it and/or modify it
|
---|
11 | * under the terms of version 2 of the GNU General Public License as
|
---|
12 | * published by the Free Software Foundation.
|
---|
13 | *
|
---|
14 | * This program is distributed in the hope that it would be useful, but
|
---|
15 | * WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
---|
17 | *
|
---|
18 | * Further, this software is distributed without any warranty that it is
|
---|
19 | * free of the rightful claim of any third person regarding infringement
|
---|
20 | * or the like. Any license provided herein, whether implied or
|
---|
21 | * otherwise, applies only to this software file. Patent licenses, if
|
---|
22 | * any, provided herein do not apply to combinations of this program with
|
---|
23 | * other software, or any other product whatsoever.
|
---|
24 | *
|
---|
25 | * You should have received a copy of the GNU General Public License along
|
---|
26 | * with this program; if not, write the Free Software Foundation, Inc., 59
|
---|
27 | * Temple Place - Suite 330, Boston MA 02111-1307, USA.
|
---|
28 | *
|
---|
29 | * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
|
---|
30 | * Mountain View, CA 94043, or:
|
---|
31 | *
|
---|
32 | * http://www.sgi.com
|
---|
33 | *
|
---|
34 | * For further information regarding this notice, see:
|
---|
35 | *
|
---|
36 | * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
|
---|
37 | */
|
---|
38 |
|
---|
39 | #include <linux/types.h>
|
---|
40 |
|
---|
41 | #define XQM_CMD(cmd) ( ('X'<<8)+(cmd) )
|
---|
42 | #define IS_XQM_CMD(cmd) ( ((int)(cmd)>>8) == 'X' )
|
---|
43 |
|
---|
44 | /*
|
---|
45 | * Disk quota - quotactl(2) commands for XFS Quota Manager (XQM).
|
---|
46 | */
|
---|
47 | #define Q_XQUOTAON XQM_CMD(0x1) /* enable quota accounting/enforcement */
|
---|
48 | #define Q_XQUOTAOFF XQM_CMD(0x2) /* disable quota accounting/enforcement */
|
---|
49 | #define Q_XGETQUOTA XQM_CMD(0x3) /* get disk limits & usage */
|
---|
50 | #define Q_XSETQLIM XQM_CMD(0x4) /* set disk limits only */
|
---|
51 | #define Q_XGETQSTAT XQM_CMD(0x5) /* returns fs_quota_stat_t struct */
|
---|
52 | #define Q_XQUOTARM XQM_CMD(0x6) /* free quota files' space */
|
---|
53 |
|
---|
54 | /*
|
---|
55 | * fs_disk_quota structure:
|
---|
56 | *
|
---|
57 | * This contains the current quota information regarding a user/proj/group.
|
---|
58 | * It is 64-bit aligned, and all the blk units are in BBs (Basic Blocks) of
|
---|
59 | * 512 bytes.
|
---|
60 | */
|
---|
61 | #define FS_DQUOT_VERSION 1 /* fs_disk_quota.d_version */
|
---|
62 | typedef struct fs_disk_quota {
|
---|
63 | u_int8_t d_version; /* version of this structure */
|
---|
64 | u_int8_t d_flags; /* XFS_{USER,PROJ,GROUP}_QUOTA */
|
---|
65 | u_int16_t d_fieldmask; /* field specifier */
|
---|
66 | u_int32_t d_id; /* user, project, or group ID */
|
---|
67 | u_int64_t d_blk_hardlimit; /* absolute limit on disk blks */
|
---|
68 | u_int64_t d_blk_softlimit; /* preferred limit on disk blks */
|
---|
69 | u_int64_t d_ino_hardlimit; /* maximum # allocated inodes */
|
---|
70 | u_int64_t d_ino_softlimit; /* preferred inode limit */
|
---|
71 | u_int64_t d_bcount; /* # disk blocks owned by the user */
|
---|
72 | u_int64_t d_icount; /* # inodes owned by the user */
|
---|
73 | int32_t d_itimer; /* zero if within inode limits */
|
---|
74 | /* if not, we refuse service */
|
---|
75 | int32_t d_btimer; /* similar to above; for disk blocks */
|
---|
76 | u_int16_t d_iwarns; /* # warnings issued wrt num inodes */
|
---|
77 | u_int16_t d_bwarns; /* # warnings issued wrt disk blocks */
|
---|
78 | int32_t d_padding2; /* padding2 - for future use */
|
---|
79 | u_int64_t d_rtb_hardlimit; /* absolute limit on realtime blks */
|
---|
80 | u_int64_t d_rtb_softlimit; /* preferred limit on RT disk blks */
|
---|
81 | u_int64_t d_rtbcount; /* # realtime blocks owned */
|
---|
82 | int32_t d_rtbtimer; /* similar to above; for RT disk blks */
|
---|
83 | u_int16_t d_rtbwarns; /* # warnings issued wrt RT disk blks */
|
---|
84 | int16_t d_padding3; /* padding3 - for future use */
|
---|
85 | char d_padding4[8]; /* yet more padding */
|
---|
86 | } fs_disk_quota_t;
|
---|
87 |
|
---|
88 | /*
|
---|
89 | * These fields are sent to Q_XSETQLIM to specify fields that need to change.
|
---|
90 | */
|
---|
91 | #define FS_DQ_ISOFT (1<<0)
|
---|
92 | #define FS_DQ_IHARD (1<<1)
|
---|
93 | #define FS_DQ_BSOFT (1<<2)
|
---|
94 | #define FS_DQ_BHARD (1<<3)
|
---|
95 | #define FS_DQ_RTBSOFT (1<<4)
|
---|
96 | #define FS_DQ_RTBHARD (1<<5)
|
---|
97 | #define FS_DQ_LIMIT_MASK (FS_DQ_ISOFT | FS_DQ_IHARD | FS_DQ_BSOFT | \
|
---|
98 | FS_DQ_BHARD | FS_DQ_RTBSOFT | FS_DQ_RTBHARD)
|
---|
99 | /*
|
---|
100 | * These timers can only be set in super user's dquot. For others, timers are
|
---|
101 | * automatically started and stopped. Superusers timer values set the limits
|
---|
102 | * for the rest. In case these values are zero, the DQ_{F,B}TIMELIMIT values
|
---|
103 | * defined below are used.
|
---|
104 | * These values also apply only to the d_fieldmask field for Q_XSETQLIM.
|
---|
105 | */
|
---|
106 | #define FS_DQ_BTIMER (1<<6)
|
---|
107 | #define FS_DQ_ITIMER (1<<7)
|
---|
108 | #define FS_DQ_RTBTIMER (1<<8)
|
---|
109 | #define FS_DQ_TIMER_MASK (FS_DQ_BTIMER | FS_DQ_ITIMER | FS_DQ_RTBTIMER)
|
---|
110 |
|
---|
111 | /*
|
---|
112 | * The following constants define the default amount of time given a user
|
---|
113 | * before the soft limits are treated as hard limits (usually resulting
|
---|
114 | * in an allocation failure). These may be modified by the quotactl(2)
|
---|
115 | * system call with the Q_XSETQLIM command.
|
---|
116 | */
|
---|
117 | #define DQ_FTIMELIMIT (7 * 24*60*60) /* 1 week */
|
---|
118 | #define DQ_BTIMELIMIT (7 * 24*60*60) /* 1 week */
|
---|
119 |
|
---|
120 | /*
|
---|
121 | * Various flags related to quotactl(2). Only relevant to XFS filesystems.
|
---|
122 | */
|
---|
123 | #define XFS_QUOTA_UDQ_ACCT (1<<0) /* user quota accounting */
|
---|
124 | #define XFS_QUOTA_UDQ_ENFD (1<<1) /* user quota limits enforcement */
|
---|
125 | #define XFS_QUOTA_GDQ_ACCT (1<<2) /* group quota accounting */
|
---|
126 | #define XFS_QUOTA_GDQ_ENFD (1<<3) /* group quota limits enforcement */
|
---|
127 |
|
---|
128 | #define XFS_USER_QUOTA (1<<0) /* user quota type */
|
---|
129 | #define XFS_PROJ_QUOTA (1<<1) /* (IRIX) project quota type */
|
---|
130 | #define XFS_GROUP_QUOTA (1<<2) /* group quota type */
|
---|
131 |
|
---|
132 | /*
|
---|
133 | * fs_quota_stat is the struct returned in Q_XGETQSTAT for a given file system.
|
---|
134 | * Provides a centralized way to get meta infomation about the quota subsystem.
|
---|
135 | * eg. space taken up for user and group quotas, number of dquots currently
|
---|
136 | * incore.
|
---|
137 | */
|
---|
138 | #define FS_QSTAT_VERSION 1 /* fs_quota_stat.qs_version */
|
---|
139 |
|
---|
140 | /*
|
---|
141 | * Some basic infomation about 'quota files'.
|
---|
142 | */
|
---|
143 | typedef struct fs_qfilestat {
|
---|
144 | u_int64_t qfs_ino; /* inode number */
|
---|
145 | u_int64_t qfs_nblks; /* number of BBs 512-byte-blks */
|
---|
146 | u_int32_t qfs_nextents; /* number of extents */
|
---|
147 | } fs_qfilestat_t;
|
---|
148 |
|
---|
149 | typedef struct fs_quota_stat {
|
---|
150 | u_int8_t qs_version; /* version number for future changes */
|
---|
151 | u_int16_t qs_flags; /* XFS_QUOTA_{U,P,G}DQ_{ACCT,ENFD} */
|
---|
152 | u_int8_t qs_pad; /* unused */
|
---|
153 | fs_qfilestat_t qs_uquota; /* user quota storage information */
|
---|
154 | fs_qfilestat_t qs_gquota; /* group quota storage information */
|
---|
155 | u_int32_t qs_incoredqs; /* number of dquots incore */
|
---|
156 | int32_t qs_btimelimit; /* limit for blks timer */
|
---|
157 | int32_t qs_itimelimit; /* limit for inodes timer */
|
---|
158 | int32_t qs_rtbtimelimit; /* limit for rt blks timer */
|
---|
159 | u_int16_t qs_bwarnlimit; /* limit for num warnings */
|
---|
160 | u_int16_t qs_iwarnlimit; /* limit for num warnings */
|
---|
161 | } fs_quota_stat_t;
|
---|
162 |
|
---|
163 | #endif /* _QUOTAIO_LINUX_XFS */
|
---|
164 |
|
---|
165 | #endif /* _SAMBA_LINUX_XFS_H_ */
|
---|