]>
Commit | Line | Data |
---|---|---|
0b61f8a4 | 1 | // SPDX-License-Identifier: GPL-2.0 |
1da177e4 | 2 | /* |
7b718769 NS |
3 | * Copyright (c) 2000-2005 Silicon Graphics, Inc. |
4 | * All Rights Reserved. | |
1da177e4 LT |
5 | */ |
6 | #ifndef __XFS_TYPES_H__ | |
7 | #define __XFS_TYPES_H__ | |
8 | ||
c8ce540d | 9 | typedef uint32_t prid_t; /* project ID */ |
d386b32b | 10 | |
c8ce540d DW |
11 | typedef uint32_t xfs_agblock_t; /* blockno in alloc. group */ |
12 | typedef uint32_t xfs_agino_t; /* inode # within allocation grp */ | |
13 | typedef uint32_t xfs_extlen_t; /* extent length in blocks */ | |
14 | typedef uint32_t xfs_agnumber_t; /* allocation group number */ | |
755c38ff CB |
15 | typedef uint64_t xfs_extnum_t; /* # of extents in a file */ |
16 | typedef uint32_t xfs_aextnum_t; /* # extents in an attribute fork */ | |
c8ce540d DW |
17 | typedef int64_t xfs_fsize_t; /* bytes in a file */ |
18 | typedef uint64_t xfs_ufsize_t; /* unsigned bytes in a file */ | |
1da177e4 | 19 | |
c8ce540d | 20 | typedef int32_t xfs_suminfo_t; /* type of bitmap summary info */ |
2483113f | 21 | typedef uint32_t xfs_rtword_t; /* word type for bitmap manipulations */ |
1da177e4 | 22 | |
c8ce540d | 23 | typedef int64_t xfs_lsn_t; /* log sequence number */ |
5f9b4b0d | 24 | typedef int64_t xfs_csn_t; /* CIL sequence number */ |
1da177e4 | 25 | |
c8ce540d DW |
26 | typedef uint32_t xfs_dablk_t; /* dir/attr block number (in file) */ |
27 | typedef uint32_t xfs_dahash_t; /* dir/attr hash value */ | |
1da177e4 | 28 | |
c8ce540d DW |
29 | typedef uint64_t xfs_fsblock_t; /* blockno in filesystem (agno|agbno) */ |
30 | typedef uint64_t xfs_rfsblock_t; /* blockno in filesystem (raw) */ | |
31 | typedef uint64_t xfs_rtblock_t; /* extent (block) in realtime area */ | |
32 | typedef uint64_t xfs_fileoff_t; /* block number in a file */ | |
33 | typedef uint64_t xfs_filblks_t; /* number of blocks in a file */ | |
1da177e4 | 34 | |
c8ce540d | 35 | typedef int64_t xfs_srtblock_t; /* signed version of xfs_rtblock_t */ |
60a34607 | 36 | |
52c732ee DW |
37 | /* |
38 | * New verifiers will return the instruction address of the failing check. | |
39 | * NULL means everything is ok. | |
40 | */ | |
41 | typedef void * xfs_failaddr_t; | |
42 | ||
1da177e4 LT |
43 | /* |
44 | * Null values for the types. | |
45 | */ | |
1da177e4 LT |
46 | #define NULLFSBLOCK ((xfs_fsblock_t)-1) |
47 | #define NULLRFSBLOCK ((xfs_rfsblock_t)-1) | |
48 | #define NULLRTBLOCK ((xfs_rtblock_t)-1) | |
49 | #define NULLFILEOFF ((xfs_fileoff_t)-1) | |
50 | ||
51 | #define NULLAGBLOCK ((xfs_agblock_t)-1) | |
52 | #define NULLAGNUMBER ((xfs_agnumber_t)-1) | |
1da177e4 LT |
53 | |
54 | #define NULLCOMMITLSN ((xfs_lsn_t)-1) | |
55 | ||
60a34607 DC |
56 | #define NULLFSINO ((xfs_ino_t)-1) |
57 | #define NULLAGINO ((xfs_agino_t)-1) | |
58 | ||
77c1a08f DC |
59 | /* |
60 | * Minimum and maximum blocksize and sectorsize. | |
61 | * The blocksize upper limit is pretty much arbitrary. | |
62 | * The sectorsize upper limit is due to sizeof(sb_sectsize). | |
bec9d48d DW |
63 | * CRC enable filesystems use 512 byte inodes, meaning 512 byte block sizes |
64 | * cannot be used. | |
77c1a08f DC |
65 | */ |
66 | #define XFS_MIN_BLOCKSIZE_LOG 9 /* i.e. 512 bytes */ | |
67 | #define XFS_MAX_BLOCKSIZE_LOG 16 /* i.e. 65536 bytes */ | |
68 | #define XFS_MIN_BLOCKSIZE (1 << XFS_MIN_BLOCKSIZE_LOG) | |
69 | #define XFS_MAX_BLOCKSIZE (1 << XFS_MAX_BLOCKSIZE_LOG) | |
bec9d48d | 70 | #define XFS_MIN_CRC_BLOCKSIZE (1 << (XFS_MIN_BLOCKSIZE_LOG + 1)) |
77c1a08f DC |
71 | #define XFS_MIN_SECTORSIZE_LOG 9 /* i.e. 512 bytes */ |
72 | #define XFS_MAX_SECTORSIZE_LOG 15 /* i.e. 32768 bytes */ | |
73 | #define XFS_MIN_SECTORSIZE (1 << XFS_MIN_SECTORSIZE_LOG) | |
74 | #define XFS_MAX_SECTORSIZE (1 << XFS_MAX_SECTORSIZE_LOG) | |
75 | ||
69432832 DC |
76 | /* |
77 | * Inode fork identifiers. | |
78 | */ | |
79 | #define XFS_DATA_FORK 0 | |
80 | #define XFS_ATTR_FORK 1 | |
3993baeb | 81 | #define XFS_COW_FORK 2 |
69432832 | 82 | |
f93f85f7 DW |
83 | #define XFS_WHICHFORK_STRINGS \ |
84 | { XFS_DATA_FORK, "data" }, \ | |
85 | { XFS_ATTR_FORK, "attr" }, \ | |
86 | { XFS_COW_FORK, "cow" } | |
87 | ||
d8cc890d NS |
88 | /* |
89 | * Min numbers of data/attr fork btree root pointers. | |
90 | */ | |
91 | #define MINDBTPTRS 3 | |
92 | #define MINABTPTRS 2 | |
93 | ||
1da177e4 LT |
94 | /* |
95 | * MAXNAMELEN is the length (including the terminating null) of | |
96 | * the longest permissible file (component) name. | |
97 | */ | |
98 | #define MAXNAMELEN 256 | |
99 | ||
85f8dff0 DW |
100 | /* |
101 | * This enum is used in string mapping in xfs_trace.h; please keep the | |
102 | * TRACE_DEFINE_ENUMs for it up to date. | |
103 | */ | |
1da177e4 LT |
104 | typedef enum { |
105 | XFS_LOOKUP_EQi, XFS_LOOKUP_LEi, XFS_LOOKUP_GEi | |
106 | } xfs_lookup_t; | |
107 | ||
05c753c4 DW |
108 | #define XFS_AG_BTREE_CMP_FORMAT_STR \ |
109 | { XFS_LOOKUP_EQi, "eq" }, \ | |
110 | { XFS_LOOKUP_LEi, "le" }, \ | |
111 | { XFS_LOOKUP_GEi, "ge" } | |
112 | ||
c494213f | 113 | /* |
86d163db DW |
114 | * This enum is used in string mapping in xfs_trace.h and scrub/trace.h; |
115 | * please keep the TRACE_DEFINE_ENUMs for it up to date. | |
c494213f | 116 | */ |
1da177e4 | 117 | typedef enum { |
b8704944 | 118 | XFS_BTNUM_BNOi, XFS_BTNUM_CNTi, XFS_BTNUM_RMAPi, XFS_BTNUM_BMAPi, |
46eeb521 | 119 | XFS_BTNUM_INOi, XFS_BTNUM_FINOi, XFS_BTNUM_REFCi, XFS_BTNUM_MAX |
1da177e4 LT |
120 | } xfs_btnum_t; |
121 | ||
c494213f DW |
122 | #define XFS_BTNUM_STRINGS \ |
123 | { XFS_BTNUM_BNOi, "bnobt" }, \ | |
124 | { XFS_BTNUM_CNTi, "cntbt" }, \ | |
125 | { XFS_BTNUM_RMAPi, "rmapbt" }, \ | |
126 | { XFS_BTNUM_BMAPi, "bmbt" }, \ | |
127 | { XFS_BTNUM_INOi, "inobt" }, \ | |
128 | { XFS_BTNUM_FINOi, "finobt" }, \ | |
129 | { XFS_BTNUM_REFCi, "refcbt" } | |
130 | ||
556b8b16 | 131 | struct xfs_name { |
e2bcd936 DC |
132 | const unsigned char *name; |
133 | int len; | |
0cb97766 | 134 | int type; |
556b8b16 BN |
135 | }; |
136 | ||
6ca1c906 DC |
137 | /* |
138 | * uid_t and gid_t are hard-coded to 32 bits in the inode. | |
139 | * Hence, an 'id' in a dquot is 32 bits.. | |
140 | */ | |
c8ce540d | 141 | typedef uint32_t xfs_dqid_t; |
6ca1c906 | 142 | |
c7298202 DC |
143 | /* |
144 | * Constants for bit manipulations. | |
145 | */ | |
146 | #define XFS_NBBYLOG 3 /* log2(NBBY) */ | |
147 | #define XFS_WORDLOG 2 /* log2(sizeof(xfs_rtword_t)) */ | |
148 | #define XFS_NBWORDLOG (XFS_NBBYLOG + XFS_WORDLOG) | |
149 | #define XFS_NBWORD (1 << XFS_NBWORDLOG) | |
150 | #define XFS_WORDMASK ((1 << XFS_WORDLOG) - 1) | |
151 | ||
b2b1712a | 152 | struct xfs_iext_cursor { |
6bdcf26a CH |
153 | struct xfs_iext_leaf *leaf; |
154 | int pos; | |
b2b1712a | 155 | }; |
c7298202 | 156 | |
866d7826 CH |
157 | typedef enum { |
158 | XFS_EXT_NORM, XFS_EXT_UNWRITTEN, | |
159 | } xfs_exntst_t; | |
160 | ||
161 | typedef struct xfs_bmbt_irec | |
162 | { | |
163 | xfs_fileoff_t br_startoff; /* starting file offset */ | |
164 | xfs_fsblock_t br_startblock; /* starting block number */ | |
165 | xfs_filblks_t br_blockcount; /* number of blocks */ | |
166 | xfs_exntst_t br_state; /* extent state */ | |
167 | } xfs_bmbt_irec_t; | |
168 | ||
0ad95687 DC |
169 | /* per-AG block reservation types */ |
170 | enum xfs_ag_resv_type { | |
171 | XFS_AG_RESV_NONE = 0, | |
172 | XFS_AG_RESV_AGFL, | |
173 | XFS_AG_RESV_METADATA, | |
174 | XFS_AG_RESV_RMAPBT, | |
175 | }; | |
176 | ||
86210fbe DC |
177 | /* |
178 | * Type verifier functions | |
179 | */ | |
180 | struct xfs_mount; | |
181 | ||
86210fbe | 182 | bool xfs_verify_fsbno(struct xfs_mount *mp, xfs_fsblock_t fsbno); |
67457eb0 DW |
183 | bool xfs_verify_fsbext(struct xfs_mount *mp, xfs_fsblock_t fsbno, |
184 | xfs_fsblock_t len); | |
86210fbe | 185 | |
86210fbe DC |
186 | bool xfs_verify_ino(struct xfs_mount *mp, xfs_ino_t ino); |
187 | bool xfs_internal_inum(struct xfs_mount *mp, xfs_ino_t ino); | |
188 | bool xfs_verify_dir_ino(struct xfs_mount *mp, xfs_ino_t ino); | |
189 | bool xfs_verify_rtbno(struct xfs_mount *mp, xfs_rtblock_t rtbno); | |
18695ad4 DW |
190 | bool xfs_verify_rtext(struct xfs_mount *mp, xfs_rtblock_t rtbno, |
191 | xfs_rtblock_t len); | |
69775fd1 | 192 | bool xfs_verify_icount(struct xfs_mount *mp, unsigned long long icount); |
f8c1d702 | 193 | bool xfs_verify_dablk(struct xfs_mount *mp, xfs_fileoff_t off); |
75efa57d DW |
194 | void xfs_icount_range(struct xfs_mount *mp, unsigned long long *min, |
195 | unsigned long long *max); | |
33005fd0 DW |
196 | bool xfs_verify_fileoff(struct xfs_mount *mp, xfs_fileoff_t off); |
197 | bool xfs_verify_fileext(struct xfs_mount *mp, xfs_fileoff_t off, | |
198 | xfs_fileoff_t len); | |
86210fbe | 199 | |
1da177e4 | 200 | #endif /* __XFS_TYPES_H__ */ |