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 */