xref: /onnv-gate/usr/src/lib/libparted/common/libparted/fs/xfs/xfs_types.h (revision 9663:ace9a2ac3683)
1 /*
2  * Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
3  *
4  * This program is free software; you can redistribute it and/or modify it
5  * under the terms of version 3 of the GNU General Public License as
6  * published by the Free Software Foundation.
7  *
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.
11  *
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.
18  *
19  * You should have received a copy of the GNU General Public License along
20  * with this program.  If not, see <http://www.gnu.org/licenses/>.
21  *
22  * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
23  * Mountain View, CA  94043, or:
24  *
25  * http://www.sgi.com
26  *
27  * For further information regarding this notice, see:
28  *
29  * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
30  */
31 #ifndef __XFS_TYPES_H__
32 #define	__XFS_TYPES_H__
33 
34 /*
35  * Some types are conditional based on the selected configuration.
36  * Set XFS_BIG_FILES=1 or 0 and XFS_BIG_FILESYSTEMS=1 or 0 depending
37  * on the desired configuration.
38  * XFS_BIG_FILES needs pgno_t to be 64 bits (64-bit kernels).
39  * XFS_BIG_FILESYSTEMS needs daddr_t to be 64 bits (N32 and 64-bit kernels).
40  *
41  * Expect these to be set from klocaldefs, or from the machine-type
42  * defs files for the normal case.
43  */
44 
45 #define	XFS_BIG_FILES		1
46 #define	XFS_BIG_FILESYSTEMS	1
47 
48 typedef uint32_t	xfs_agblock_t;	/* blockno in alloc. group */
49 typedef	uint32_t	xfs_extlen_t;	/* extent length in blocks */
50 typedef	uint32_t	xfs_agnumber_t;	/* allocation group number */
51 typedef int32_t	xfs_extnum_t;	/* # of extents in a file */
52 typedef int16_t	xfs_aextnum_t;	/* # extents in an attribute fork */
53 typedef	int64_t	xfs_fsize_t;	/* bytes in a file */
54 typedef uint64_t	xfs_ufsize_t;	/* unsigned bytes in a file */
55 
56 typedef	int32_t	xfs_suminfo_t;	/* type of bitmap summary info */
57 typedef	int32_t	xfs_rtword_t;	/* word type for bitmap manipulations */
58 
59 typedef	int64_t	xfs_lsn_t;	/* log sequence number */
60 typedef	int32_t	xfs_tid_t;	/* transaction identifier */
61 
62 typedef	uint32_t	xfs_dablk_t;	/* dir/attr block number (in file) */
63 typedef	uint32_t	xfs_dahash_t;	/* dir/attr hash value */
64 
65 typedef uint16_t	xfs_prid_t;	/* prid_t truncated to 16bits in XFS */
66 
67 /*
68  * These types are 64 bits on disk but are either 32 or 64 bits in memory.
69  * Disk based types:
70  */
71 typedef uint64_t	xfs_dfsbno_t;	/* blockno in filesystem (agno|agbno) */
72 typedef uint64_t	xfs_drfsbno_t;	/* blockno in filesystem (raw) */
73 typedef	uint64_t	xfs_drtbno_t;	/* extent (block) in realtime area */
74 typedef	uint64_t	xfs_dfiloff_t;	/* block number in a file */
75 typedef	uint64_t	xfs_dfilblks_t;	/* number of blocks in a file */
76 
77 /*
78  * Memory based types are conditional.
79  */
80 #if XFS_BIG_FILESYSTEMS
81 typedef	uint64_t	xfs_fsblock_t;	/* blockno in filesystem (agno|agbno) */
82 typedef uint64_t	xfs_rfsblock_t;	/* blockno in filesystem (raw) */
83 typedef uint64_t	xfs_rtblock_t;	/* extent (block) in realtime area */
84 typedef	int64_t	xfs_srtblock_t;	/* signed version of xfs_rtblock_t */
85 #else
86 typedef	uint32_t	xfs_fsblock_t;	/* blockno in filesystem (agno|agbno) */
87 typedef uint32_t	xfs_rfsblock_t;	/* blockno in filesystem (raw) */
88 typedef uint32_t	xfs_rtblock_t;	/* extent (block) in realtime area */
89 typedef	int32_t	xfs_srtblock_t;	/* signed version of xfs_rtblock_t */
90 #endif
91 #if XFS_BIG_FILES
92 typedef	uint64_t	xfs_fileoff_t;	/* block number in a file */
93 typedef	int64_t	xfs_sfiloff_t;	/* signed block number in a file */
94 typedef	uint64_t	xfs_filblks_t;	/* number of blocks in a file */
95 #else
96 typedef	uint32_t	xfs_fileoff_t;	/* block number in a file */
97 typedef	int32_t	xfs_sfiloff_t;	/* signed block number in a file */
98 typedef	uint32_t	xfs_filblks_t;	/* number of blocks in a file */
99 #endif
100 
101 typedef uint8_t       xfs_arch_t;     /* architecutre of an xfs fs */
102 
103 /*
104  * Null values for the types.
105  */
106 #define	NULLDFSBNO	((xfs_dfsbno_t)-1)
107 #define	NULLDRFSBNO	((xfs_drfsbno_t)-1)
108 #define	NULLDRTBNO	((xfs_drtbno_t)-1)
109 #define	NULLDFILOFF	((xfs_dfiloff_t)-1)
110 
111 #define	NULLFSBLOCK	((xfs_fsblock_t)-1)
112 #define	NULLRFSBLOCK	((xfs_rfsblock_t)-1)
113 #define	NULLRTBLOCK	((xfs_rtblock_t)-1)
114 #define	NULLFILEOFF	((xfs_fileoff_t)-1)
115 
116 #define	NULLAGBLOCK	((xfs_agblock_t)-1)
117 #define	NULLAGNUMBER	((xfs_agnumber_t)-1)
118 #define	NULLEXTNUM	((xfs_extnum_t)-1)
119 
120 #define NULLCOMMITLSN	((xfs_lsn_t)-1)
121 
122 /*
123  * Max values for extlen, extnum, aextnum.
124  */
125 #define	MAXEXTLEN	((xfs_extlen_t)0x001fffff)	/* 21 bits */
126 #define	MAXEXTNUM	((xfs_extnum_t)0x7fffffff)	/* signed int */
127 #define	MAXAEXTNUM	((xfs_aextnum_t)0x7fff)		/* signed short */
128 
129 /*
130  * MAXNAMELEN is the length (including the terminating null) of
131  * the longest permissible file (component) name.
132  */
133 #define MAXNAMELEN	256
134 
135 typedef enum {
136 	XFS_LOOKUP_EQi, XFS_LOOKUP_LEi, XFS_LOOKUP_GEi
137 } xfs_lookup_t;
138 
139 typedef enum {
140 	XFS_BTNUM_BNOi, XFS_BTNUM_CNTi, XFS_BTNUM_BMAPi, XFS_BTNUM_INOi,
141 	XFS_BTNUM_MAX
142 } xfs_btnum_t;
143 
144 
145 #ifdef CONFIG_PROC_FS
146 /*
147  * XFS global statistics
148  */
149 struct xfsstats {
150 # define XFSSTAT_END_EXTENT_ALLOC	4
151 	uint32_t		xs_allocx;
152 	uint32_t		xs_allocb;
153 	uint32_t		xs_freex;
154 	uint32_t		xs_freeb;
155 # define XFSSTAT_END_ALLOC_BTREE   	(XFSSTAT_END_EXTENT_ALLOC+4)
156 	uint32_t		xs_abt_lookup;
157 	uint32_t		xs_abt_compare;
158 	uint32_t		xs_abt_insrec;
159 	uint32_t		xs_abt_delrec;
160 # define XFSSTAT_END_BLOCK_MAPPING	(XFSSTAT_END_ALLOC_BTREE+7)
161 	uint32_t		xs_blk_mapr;
162 	uint32_t		xs_blk_mapw;
163 	uint32_t		xs_blk_unmap;
164 	uint32_t		xs_add_exlist;
165 	uint32_t		xs_del_exlist;
166 	uint32_t		xs_look_exlist;
167 	uint32_t		xs_cmp_exlist;
168 # define XFSSTAT_END_BLOCK_MAP_BTREE	(XFSSTAT_END_BLOCK_MAPPING+4)
169 	uint32_t		xs_bmbt_lookup;
170 	uint32_t		xs_bmbt_compare;
171 	uint32_t		xs_bmbt_insrec;
172 	uint32_t		xs_bmbt_delrec;
173 # define XFSSTAT_END_DIRECTORY_OPS	(XFSSTAT_END_BLOCK_MAP_BTREE+4)
174 	uint32_t		xs_dir_lookup;
175 	uint32_t		xs_dir_create;
176 	uint32_t		xs_dir_remove;
177 	uint32_t		xs_dir_getdents;
178 # define XFSSTAT_END_TRANSACTIONS	(XFSSTAT_END_DIRECTORY_OPS+3)
179 	uint32_t		xs_trans_sync;
180 	uint32_t		xs_trans_async;
181 	uint32_t		xs_trans_empty;
182 # define XFSSTAT_END_INODE_OPS		(XFSSTAT_END_TRANSACTIONS+7)
183 	uint32_t		xs_ig_attempts;
184 	uint32_t		xs_ig_found;
185 	uint32_t		xs_ig_frecycle;
186 	uint32_t		xs_ig_missed;
187 	uint32_t		xs_ig_dup;
188 	uint32_t		xs_ig_reclaims;
189 	uint32_t		xs_ig_attrchg;
190 # define XFSSTAT_END_LOG_OPS		(XFSSTAT_END_INODE_OPS+5)
191 	uint32_t		xs_log_writes;
192 	uint32_t		xs_log_blocks;
193 	uint32_t		xs_log_noiclogs;
194 	uint32_t		xs_log_force;
195 	uint32_t		xs_log_force_sleep;
196 # define XFSSTAT_END_TAIL_PUSHING	(XFSSTAT_END_LOG_OPS+10)
197 	uint32_t		xs_try_logspace;
198 	uint32_t		xs_sleep_logspace;
199 	uint32_t		xs_push_ail;
200 	uint32_t		xs_push_ail_success;
201 	uint32_t		xs_push_ail_pushbuf;
202 	uint32_t		xs_push_ail_pinned;
203 	uint32_t		xs_push_ail_locked;
204 	uint32_t		xs_push_ail_flushing;
205 	uint32_t		xs_push_ail_restarts;
206 	uint32_t		xs_push_ail_flush;
207 # define XFSSTAT_END_WRITE_CONVERT	(XFSSTAT_END_TAIL_PUSHING+2)
208 	uint32_t		xs_xstrat_quick;
209 	uint32_t		xs_xstrat_split;
210 # define XFSSTAT_END_READ_WRITE_OPS	(XFSSTAT_END_WRITE_CONVERT+2)
211 	uint32_t		xs_write_calls;
212 	uint32_t		xs_read_calls;
213 # define XFSSTAT_END_ATTRIBUTE_OPS	(XFSSTAT_END_READ_WRITE_OPS+4)
214 	uint32_t		xs_attr_get;
215 	uint32_t		xs_attr_set;
216 	uint32_t		xs_attr_remove;
217 	uint32_t		xs_attr_list;
218 # define XFSSTAT_END_QUOTA_OPS		(XFSSTAT_END_ATTRIBUTE_OPS+8)
219 	uint32_t		xs_qm_dqreclaims;
220 	uint32_t		xs_qm_dqreclaim_misses;
221 	uint32_t		xs_qm_dquot_dups;
222 	uint32_t		xs_qm_dqcachemisses;
223 	uint32_t		xs_qm_dqcachehits;
224 	uint32_t		xs_qm_dqwants;
225 	uint32_t		xs_qm_dqshake_reclaims;
226 	uint32_t		xs_qm_dqinact_reclaims;
227 # define XFSSTAT_END_INODE_CLUSTER	(XFSSTAT_END_QUOTA_OPS+3)
228 	uint32_t		xs_iflush_count;
229 	uint32_t		xs_icluster_flushcnt;
230 	uint32_t		xs_icluster_flushinode;
231 # define XFSSTAT_END_VNODE_OPS		(XFSSTAT_END_INODE_CLUSTER+8)
232 	uint32_t		vn_active;	/* # vnodes not on free lists */
233 	uint32_t		vn_alloc;	/* # times vn_alloc called */
234 	uint32_t		vn_get;		/* # times vn_get called */
235 	uint32_t		vn_hold;	/* # times vn_hold called */
236 	uint32_t		vn_rele;	/* # times vn_rele called */
237 	uint32_t		vn_reclaim;	/* # times vn_reclaim called */
238 	uint32_t		vn_remove;	/* # times vn_remove called */
239 	uint32_t		vn_free;	/* # times vn_free called */
240 	struct xfsstats_xpc {
241 		uint64_t	xs_xstrat_bytes;
242 		uint64_t	xs_write_bytes;
243 		uint64_t	xs_read_bytes;
244 	} xpc;
245 } xfsstats;
246 
247 # define XFS_STATS_INC(count)		( xfsstats.##count ++ )
248 # define XFS_STATS_DEC(count)		( xfsstats.##count -- )
249 # define XFS_STATS_ADD(count, inc)	( xfsstats.##count += (inc) )
250 # define XFS_STATS64_INC(count)		( xfsstats.xpc.##count ++ )
251 # define XFS_STATS64_ADD(count, inc)	( xfsstats.xpc.##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 # define XFS_STATS64_INC(count)
257 # define XFS_STATS64_ADD(count, inc)
258 #endif	/* !CONFIG_PROC_FS */
259 
260 
261 #ifdef __KERNEL__
262 
263 /* juggle IRIX device numbers - still used in ondisk structures */
264 
265 #define IRIX_DEV_BITSMAJOR      14
266 #define IRIX_DEV_BITSMINOR      18
267 #define IRIX_DEV_MAXMAJ         0x1ff
268 #define IRIX_DEV_MAXMIN         0x3ffff
269 #define IRIX_DEV_MAJOR(dev)     ((int)(((unsigned)(dev)>>IRIX_DEV_BITSMINOR) \
270                                     & IRIX_DEV_MAXMAJ))
271 #define IRIX_DEV_MINOR(dev)     ((int)((dev)&IRIX_DEV_MAXMIN))
272 #define IRIX_MKDEV(major,minor) ((xfs_dev_t)(((major)<<IRIX_DEV_BITSMINOR) \
273                                     | (minor&IRIX_DEV_MAXMIN)))
274 
275 #define IRIX_DEV_TO_KDEVT(dev)  MKDEV(IRIX_DEV_MAJOR(dev),IRIX_DEV_MINOR(dev))
276 #define IRIX_DEV_TO_DEVT(dev)   ((IRIX_DEV_MAJOR(dev)<<8)|IRIX_DEV_MINOR(dev))
277 
278 /* __psint_t is the same size as a pointer */
279 #if (BITS_PER_LONG == 32)
280 typedef int32_t __psint_t;
281 typedef uint32_t __psunsigned_t;
282 #elif (BITS_PER_LONG == 64)
283 typedef int64_t __psint_t;
284 typedef uint64_t __psunsigned_t;
285 #else
286 #error BITS_PER_LONG must be 32 or 64
287 #endif
288 
289 
290 /*
291  * struct for passing owner/requestor id
292  */
293 typedef struct flid {
294 #ifdef CELL_CAPABLE
295         pid_t   fl_pid;
296         sysid_t fl_sysid;
297 #endif
298 } flid_t;
299 
300 #endif	/* __KERNEL__ */
301 
302 #endif	/* !__XFS_TYPES_H */
303