2
* Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
4
* This program is free software; you can redistribute it and/or modify it
5
* under the terms of version 2 of the GNU General Public License as
6
* published by the Free Software Foundation.
8
* This program is distributed in the hope that it would be useful, but
9
* WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
* Further, this software is distributed without any warranty that it is
13
* free of the rightful claim of any third person regarding infringement
14
* or the like. Any license provided herein, whether implied or
15
* otherwise, applies only to this software file. Patent licenses, if
16
* any, provided herein do not apply to combinations of this program with
17
* other software, or any other product whatsoever.
19
* You should have received a copy of the GNU General Public License along
20
* with this program; if not, write the Free Software Foundation, Inc., 59
21
* Temple Place - Suite 330, Boston MA 02111-1307, USA.
23
* Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
24
* Mountain View, CA 94043, or:
28
* For further information regarding this notice, see:
30
* http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
32
#ifndef __XFS_TYPES_H__
33
#define __XFS_TYPES_H__
36
* Some types are conditional based on the selected configuration.
37
* Set XFS_BIG_FILES=1 or 0 and XFS_BIG_FILESYSTEMS=1 or 0 depending
38
* on the desired configuration.
39
* XFS_BIG_FILES needs pgno_t to be 64 bits (64-bit kernels).
40
* XFS_BIG_FILESYSTEMS needs daddr_t to be 64 bits (N32 and 64-bit kernels).
42
* Expect these to be set from klocaldefs, or from the machine-type
43
* defs files for the normal case.
46
#define XFS_BIG_FILES 1
47
#define XFS_BIG_FILESYSTEMS 1
49
typedef __uint32_t xfs_agblock_t; /* blockno in alloc. group */
50
typedef __uint32_t xfs_extlen_t; /* extent length in blocks */
51
typedef __uint32_t xfs_agnumber_t; /* allocation group number */
52
typedef __int32_t xfs_extnum_t; /* # of extents in a file */
53
typedef __int16_t xfs_aextnum_t; /* # extents in an attribute fork */
54
typedef __int64_t xfs_fsize_t; /* bytes in a file */
55
typedef __uint64_t xfs_ufsize_t; /* unsigned bytes in a file */
57
typedef __int32_t xfs_suminfo_t; /* type of bitmap summary info */
58
typedef __int32_t xfs_rtword_t; /* word type for bitmap manipulations */
60
typedef __int64_t xfs_lsn_t; /* log sequence number */
61
typedef __int32_t xfs_tid_t; /* transaction identifier */
63
typedef __uint32_t xfs_dablk_t; /* dir/attr block number (in file) */
64
typedef __uint32_t xfs_dahash_t; /* dir/attr hash value */
66
typedef __uint16_t xfs_prid_t; /* prid_t truncated to 16bits in XFS */
69
* These types are 64 bits on disk but are either 32 or 64 bits in memory.
72
typedef __uint64_t xfs_dfsbno_t; /* blockno in filesystem (agno|agbno) */
73
typedef __uint64_t xfs_drfsbno_t; /* blockno in filesystem (raw) */
74
typedef __uint64_t xfs_drtbno_t; /* extent (block) in realtime area */
75
typedef __uint64_t xfs_dfiloff_t; /* block number in a file */
76
typedef __uint64_t xfs_dfilblks_t; /* number of blocks in a file */
79
* Memory based types are conditional.
81
#if XFS_BIG_FILESYSTEMS
82
typedef __uint64_t xfs_fsblock_t; /* blockno in filesystem (agno|agbno) */
83
typedef __uint64_t xfs_rfsblock_t; /* blockno in filesystem (raw) */
84
typedef __uint64_t xfs_rtblock_t; /* extent (block) in realtime area */
85
typedef __int64_t xfs_srtblock_t; /* signed version of xfs_rtblock_t */
87
typedef __uint32_t xfs_fsblock_t; /* blockno in filesystem (agno|agbno) */
88
typedef __uint32_t xfs_rfsblock_t; /* blockno in filesystem (raw) */
89
typedef __uint32_t xfs_rtblock_t; /* extent (block) in realtime area */
90
typedef __int32_t xfs_srtblock_t; /* signed version of xfs_rtblock_t */
93
typedef __uint64_t xfs_fileoff_t; /* block number in a file */
94
typedef __int64_t xfs_sfiloff_t; /* signed block number in a file */
95
typedef __uint64_t xfs_filblks_t; /* number of blocks in a file */
97
typedef __uint32_t xfs_fileoff_t; /* block number in a file */
98
typedef __int32_t xfs_sfiloff_t; /* signed block number in a file */
99
typedef __uint32_t xfs_filblks_t; /* number of blocks in a file */
102
typedef __uint8_t xfs_arch_t; /* architecutre of an xfs fs */
105
* Null values for the types.
107
#define NULLDFSBNO ((xfs_dfsbno_t)-1)
108
#define NULLDRFSBNO ((xfs_drfsbno_t)-1)
109
#define NULLDRTBNO ((xfs_drtbno_t)-1)
110
#define NULLDFILOFF ((xfs_dfiloff_t)-1)
112
#define NULLFSBLOCK ((xfs_fsblock_t)-1)
113
#define NULLRFSBLOCK ((xfs_rfsblock_t)-1)
114
#define NULLRTBLOCK ((xfs_rtblock_t)-1)
115
#define NULLFILEOFF ((xfs_fileoff_t)-1)
117
#define NULLAGBLOCK ((xfs_agblock_t)-1)
118
#define NULLAGNUMBER ((xfs_agnumber_t)-1)
119
#define NULLEXTNUM ((xfs_extnum_t)-1)
121
#define NULLCOMMITLSN ((xfs_lsn_t)-1)
124
* Max values for extlen, extnum, aextnum.
126
#define MAXEXTLEN ((xfs_extlen_t)0x001fffff) /* 21 bits */
127
#define MAXEXTNUM ((xfs_extnum_t)0x7fffffff) /* signed int */
128
#define MAXAEXTNUM ((xfs_aextnum_t)0x7fff) /* signed short */
131
* MAXNAMELEN is the length (including the terminating null) of
132
* the longest permissible file (component) name.
134
#define MAXNAMELEN 256
137
XFS_LOOKUP_EQi, XFS_LOOKUP_LEi, XFS_LOOKUP_GEi
141
XFS_BTNUM_BNOi, XFS_BTNUM_CNTi, XFS_BTNUM_BMAPi, XFS_BTNUM_INOi,
146
#if defined(CONFIG_PROC_FS) && defined(__KERNEL__)
148
* XFS global statistics
151
# define XFSSTAT_END_EXTENT_ALLOC 4
152
__uint32_t xs_allocx;
153
__uint32_t xs_allocb;
156
# define XFSSTAT_END_ALLOC_BTREE (XFSSTAT_END_EXTENT_ALLOC+4)
157
__uint32_t xs_abt_lookup;
158
__uint32_t xs_abt_compare;
159
__uint32_t xs_abt_insrec;
160
__uint32_t xs_abt_delrec;
161
# define XFSSTAT_END_BLOCK_MAPPING (XFSSTAT_END_ALLOC_BTREE+7)
162
__uint32_t xs_blk_mapr;
163
__uint32_t xs_blk_mapw;
164
__uint32_t xs_blk_unmap;
165
__uint32_t xs_add_exlist;
166
__uint32_t xs_del_exlist;
167
__uint32_t xs_look_exlist;
168
__uint32_t xs_cmp_exlist;
169
# define XFSSTAT_END_BLOCK_MAP_BTREE (XFSSTAT_END_BLOCK_MAPPING+4)
170
__uint32_t xs_bmbt_lookup;
171
__uint32_t xs_bmbt_compare;
172
__uint32_t xs_bmbt_insrec;
173
__uint32_t xs_bmbt_delrec;
174
# define XFSSTAT_END_DIRECTORY_OPS (XFSSTAT_END_BLOCK_MAP_BTREE+4)
175
__uint32_t xs_dir_lookup;
176
__uint32_t xs_dir_create;
177
__uint32_t xs_dir_remove;
178
__uint32_t xs_dir_getdents;
179
# define XFSSTAT_END_TRANSACTIONS (XFSSTAT_END_DIRECTORY_OPS+3)
180
__uint32_t xs_trans_sync;
181
__uint32_t xs_trans_async;
182
__uint32_t xs_trans_empty;
183
# define XFSSTAT_END_INODE_OPS (XFSSTAT_END_TRANSACTIONS+7)
184
__uint32_t xs_ig_attempts;
185
__uint32_t xs_ig_found;
186
__uint32_t xs_ig_frecycle;
187
__uint32_t xs_ig_missed;
188
__uint32_t xs_ig_dup;
189
__uint32_t xs_ig_reclaims;
190
__uint32_t xs_ig_attrchg;
191
# define XFSSTAT_END_LOG_OPS (XFSSTAT_END_INODE_OPS+5)
192
__uint32_t xs_log_writes;
193
__uint32_t xs_log_blocks;
194
__uint32_t xs_log_noiclogs;
195
__uint32_t xs_log_force;
196
__uint32_t xs_log_force_sleep;
197
# define XFSSTAT_END_TAIL_PUSHING (XFSSTAT_END_LOG_OPS+10)
198
__uint32_t xs_try_logspace;
199
__uint32_t xs_sleep_logspace;
200
__uint32_t xs_push_ail;
201
__uint32_t xs_push_ail_success;
202
__uint32_t xs_push_ail_pushbuf;
203
__uint32_t xs_push_ail_pinned;
204
__uint32_t xs_push_ail_locked;
205
__uint32_t xs_push_ail_flushing;
206
__uint32_t xs_push_ail_restarts;
207
__uint32_t xs_push_ail_flush;
208
# define XFSSTAT_END_WRITE_CONVERT (XFSSTAT_END_TAIL_PUSHING+2)
209
__uint32_t xs_xstrat_quick;
210
__uint32_t xs_xstrat_split;
211
# define XFSSTAT_END_READ_WRITE_OPS (XFSSTAT_END_WRITE_CONVERT+2)
212
__uint32_t xs_write_calls;
213
__uint32_t xs_read_calls;
214
# define XFSSTAT_END_ATTRIBUTE_OPS (XFSSTAT_END_READ_WRITE_OPS+4)
215
__uint32_t xs_attr_get;
216
__uint32_t xs_attr_set;
217
__uint32_t xs_attr_remove;
218
__uint32_t xs_attr_list;
219
# define XFSSTAT_END_QUOTA_OPS (XFSSTAT_END_ATTRIBUTE_OPS+8)
220
__uint32_t xs_qm_dqreclaims;
221
__uint32_t xs_qm_dqreclaim_misses;
222
__uint32_t xs_qm_dquot_dups;
223
__uint32_t xs_qm_dqcachemisses;
224
__uint32_t xs_qm_dqcachehits;
225
__uint32_t xs_qm_dqwants;
226
__uint32_t xs_qm_dqshake_reclaims;
227
__uint32_t xs_qm_dqinact_reclaims;
228
# define XFSSTAT_END_INODE_CLUSTER (XFSSTAT_END_QUOTA_OPS+3)
229
__uint32_t xs_iflush_count;
230
__uint32_t xs_icluster_flushcnt;
231
__uint32_t xs_icluster_flushinode;
232
# define XFSSTAT_END_VNODE_OPS (XFSSTAT_END_INODE_CLUSTER+8)
233
__uint32_t vn_active; /* # vnodes not on free lists */
234
__uint32_t vn_alloc; /* # times vn_alloc called */
235
__uint32_t vn_get; /* # times vn_get called */
236
__uint32_t vn_hold; /* # times vn_hold called */
237
__uint32_t vn_rele; /* # times vn_rele called */
238
__uint32_t vn_reclaim; /* # times vn_reclaim called */
239
__uint32_t vn_remove; /* # times vn_remove called */
240
__uint32_t vn_free; /* # times vn_free called */
241
/* Extra precision counters */
242
__uint64_t xs_xstrat_bytes;
243
__uint64_t xs_write_bytes;
244
__uint64_t xs_read_bytes;
247
extern struct xfsstats xfsstats;
249
# define XFS_STATS_INC(count) ( (count)++ )
250
# define XFS_STATS_DEC(count) ( (count)-- )
251
# define XFS_STATS_ADD(count, inc) ( (count) += (inc) )
252
#else /* !CONFIG_PROC_FS */
253
# define XFS_STATS_INC(count)
254
# define XFS_STATS_DEC(count)
255
# define XFS_STATS_ADD(count, inc)
256
#endif /* !CONFIG_PROC_FS */
260
/* juggle IRIX device numbers - still used in ondisk structures */
263
#define MKDEV(major, minor) makedev(major, minor)
266
#define IRIX_DEV_BITSMAJOR 14
267
#define IRIX_DEV_BITSMINOR 18
268
#define IRIX_DEV_MAXMAJ 0x1ff
269
#define IRIX_DEV_MAXMIN 0x3ffff
270
#define IRIX_DEV_MAJOR(dev) ((int)(((unsigned)(dev)>>IRIX_DEV_BITSMINOR) \
272
#define IRIX_DEV_MINOR(dev) ((int)((dev)&IRIX_DEV_MAXMIN))
273
#define IRIX_MKDEV(major,minor) ((xfs_dev_t)(((major)<<IRIX_DEV_BITSMINOR) \
274
| (minor&IRIX_DEV_MAXMIN)))
276
#define IRIX_DEV_TO_KDEVT(dev) MKDEV(IRIX_DEV_MAJOR(dev),IRIX_DEV_MINOR(dev))
277
#define IRIX_DEV_TO_DEVT(dev) ((IRIX_DEV_MAJOR(dev)<<8)|IRIX_DEV_MINOR(dev))
280
/* __psint_t is the same size as a pointer */
281
#if (BITS_PER_LONG == 32)
282
typedef __int32_t __psint_t;
283
typedef __uint32_t __psunsigned_t;
284
#elif (BITS_PER_LONG == 64)
285
typedef __int64_t __psint_t;
286
typedef __uint64_t __psunsigned_t;
288
#error BITS_PER_LONG must be 32 or 64
293
* struct for passing owner/requestor id
295
typedef struct flid {
302
#endif /* __KERNEL__ */
304
#endif /* !__XFS_TYPES_H */