• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * This header was generated from the Linux kernel headers by update_headers.py,
3  * to provide necessary information from kernel to userspace, such as constants,
4  * structures, and macros, and thus, contains no copyrightable information.
5  */
6 #ifndef __GFS2_ONDISK_DOT_H__
7 #define __GFS2_ONDISK_DOT_H__
8 #include <linux/types.h>
9 #define GFS2_MAGIC		0x01161970
10 #define GFS2_BASIC_BLOCK	512
11 #define GFS2_BASIC_BLOCK_SHIFT	9
12 #define GFS2_MOUNT_LOCK		0
13 #define GFS2_LIVE_LOCK		1
14 #define GFS2_FREEZE_LOCK	2
15 #define GFS2_RENAME_LOCK	3
16 #define GFS2_CONTROL_LOCK	4
17 #define GFS2_MOUNTED_LOCK	5
18 #define GFS2_FORMAT_NONE	0
19 #define GFS2_FORMAT_SB		100
20 #define GFS2_FORMAT_RG		200
21 #define GFS2_FORMAT_RB		300
22 #define GFS2_FORMAT_DI		400
23 #define GFS2_FORMAT_IN		500
24 #define GFS2_FORMAT_LF		600
25 #define GFS2_FORMAT_JD		700
26 #define GFS2_FORMAT_LH		800
27 #define GFS2_FORMAT_LD		900
28 #define GFS2_FORMAT_LB		1000
29 #define GFS2_FORMAT_EA		1600
30 #define GFS2_FORMAT_ED		1700
31 #define GFS2_FORMAT_QC		1400
32 #define GFS2_FORMAT_RI		1100
33 #define GFS2_FORMAT_DE		1200
34 #define GFS2_FORMAT_QU		1500
35 #define GFS2_FORMAT_FS		1801
36 #define GFS2_FORMAT_MULTI	1900
37 struct gfs2_inum {
38 	__be64 no_formal_ino;
39 	__be64 no_addr;
40 };
41 #define GFS2_METATYPE_NONE	0
42 #define GFS2_METATYPE_SB	1
43 #define GFS2_METATYPE_RG	2
44 #define GFS2_METATYPE_RB	3
45 #define GFS2_METATYPE_DI	4
46 #define GFS2_METATYPE_IN	5
47 #define GFS2_METATYPE_LF	6
48 #define GFS2_METATYPE_JD	7
49 #define GFS2_METATYPE_LH	8
50 #define GFS2_METATYPE_LD	9
51 #define GFS2_METATYPE_LB	12
52 #define GFS2_METATYPE_EA	10
53 #define GFS2_METATYPE_ED	11
54 #define GFS2_METATYPE_QC	14
55 struct gfs2_meta_header {
56 	__be32 mh_magic;
57 	__be32 mh_type;
58 	__be64 __pad0;
59 	__be32 mh_format;
60 
61 	union {
62 		__be32 mh_jid;
63 		__be32 __pad1;
64 	};
65 };
66 #define GFS2_SB_ADDR		128
67 #define GFS2_SB_LOCK		0
68 #define GFS2_LOCKNAME_LEN	64
69 struct gfs2_sb {
70 	struct gfs2_meta_header sb_header;
71 	__be32 sb_fs_format;
72 	__be32 sb_multihost_format;
73 	__u32  __pad0;
74 	__be32 sb_bsize;
75 	__be32 sb_bsize_shift;
76 	__u32 __pad1;
77 	struct gfs2_inum sb_master_dir;
78 	struct gfs2_inum __pad2;
79 	struct gfs2_inum sb_root_dir;
80 	char sb_lockproto[GFS2_LOCKNAME_LEN];
81 	char sb_locktable[GFS2_LOCKNAME_LEN];
82 	struct gfs2_inum __pad3;
83 	struct gfs2_inum __pad4;
84 #define GFS2_HAS_UUID 1
85 	__u8 sb_uuid[16];
86 };
87 struct gfs2_rindex {
88 	__be64 ri_addr;
89 	__be32 ri_length;
90 	__u32 __pad;
91 	__be64 ri_data0;
92 	__be32 ri_data;
93 	__be32 ri_bitbytes;
94 	__u8 ri_reserved[64];
95 };
96 #define GFS2_NBBY		4
97 #define GFS2_BIT_SIZE		2
98 #define GFS2_BIT_MASK		0x00000003
99 #define GFS2_BLKST_FREE		0
100 #define GFS2_BLKST_USED		1
101 #define GFS2_BLKST_UNLINKED	2
102 #define GFS2_BLKST_DINODE	3
103 #define GFS2_RGF_JOURNAL	0x00000001
104 #define GFS2_RGF_METAONLY	0x00000002
105 #define GFS2_RGF_DATAONLY	0x00000004
106 #define GFS2_RGF_NOALLOC	0x00000008
107 #define GFS2_RGF_TRIMMED	0x00000010
108 struct gfs2_rgrp_lvb {
109 	__be32 rl_magic;
110 	__be32 rl_flags;
111 	__be32 rl_free;
112 	__be32 rl_dinodes;
113 	__be64 rl_igeneration;
114 	__be32 rl_unlinked;
115 	__be32 __pad;
116 };
117 struct gfs2_rgrp {
118 	struct gfs2_meta_header rg_header;
119 	__be32 rg_flags;
120 	__be32 rg_free;
121 	__be32 rg_dinodes;
122 	union {
123 		__be32 __pad;
124 		__be32 rg_skip;
125 	};
126 	__be64 rg_igeneration;
127 
128 	__be64 rg_data0;
129 	__be32 rg_data;
130 	__be32 rg_bitbytes;
131 	__be32 rg_crc;
132 	__u8 rg_reserved[60];
133 };
134 struct gfs2_quota {
135 	__be64 qu_limit;
136 	__be64 qu_warn;
137 	__be64 qu_value;
138 	__u8 qu_reserved[64];
139 };
140 #define GFS2_MAX_META_HEIGHT	10
141 #define GFS2_DIR_MAX_DEPTH	17
142 #define DT2IF(dt) (((dt) << 12) & S_IFMT)
143 #define IF2DT(sif) (((sif) & S_IFMT) >> 12)
144 enum {
145 	gfs2fl_Jdata		= 0,
146 	gfs2fl_ExHash		= 1,
147 	gfs2fl_Unused		= 2,
148 	gfs2fl_EaIndirect	= 3,
149 	gfs2fl_Directio		= 4,
150 	gfs2fl_Immutable	= 5,
151 	gfs2fl_AppendOnly	= 6,
152 	gfs2fl_NoAtime		= 7,
153 	gfs2fl_Sync		= 8,
154 	gfs2fl_System		= 9,
155 	gfs2fl_TopLevel		= 10,
156 	gfs2fl_TruncInProg	= 29,
157 	gfs2fl_InheritDirectio	= 30,
158 	gfs2fl_InheritJdata	= 31,
159 };
160 #define GFS2_DIF_JDATA			0x00000001
161 #define GFS2_DIF_EXHASH			0x00000002
162 #define GFS2_DIF_UNUSED			0x00000004
163 #define GFS2_DIF_EA_INDIRECT		0x00000008
164 #define GFS2_DIF_DIRECTIO		0x00000010
165 #define GFS2_DIF_IMMUTABLE		0x00000020
166 #define GFS2_DIF_APPENDONLY		0x00000040
167 #define GFS2_DIF_NOATIME		0x00000080
168 #define GFS2_DIF_SYNC			0x00000100
169 #define GFS2_DIF_SYSTEM			0x00000200
170 #define GFS2_DIF_TOPDIR			0x00000400
171 #define GFS2_DIF_TRUNC_IN_PROG		0x20000000
172 #define GFS2_DIF_INHERIT_DIRECTIO	0x40000000
173 #define GFS2_DIF_INHERIT_JDATA		0x80000000
174 struct gfs2_dinode {
175 	struct gfs2_meta_header di_header;
176 	struct gfs2_inum di_num;
177 	__be32 di_mode;
178 	__be32 di_uid;
179 	__be32 di_gid;
180 	__be32 di_nlink;
181 	__be64 di_size;
182 	__be64 di_blocks;
183 	__be64 di_atime;
184 	__be64 di_mtime;
185 	__be64 di_ctime;
186 	__be32 di_major;
187 	__be32 di_minor;
188 
189 	__be64 di_goal_meta;
190 	__be64 di_goal_data;
191 	__be64 di_generation;
192 	__be32 di_flags;
193 	__be32 di_payload_format;
194 	__u16 __pad1;
195 	__be16 di_height;
196 	__u32 __pad2;
197 
198 	__u16 __pad3;
199 	__be16 di_depth;
200 	__be32 di_entries;
201 	struct gfs2_inum __pad4;
202 	__be64 di_eattr;
203 	__be32 di_atime_nsec;
204 	__be32 di_mtime_nsec;
205 	__be32 di_ctime_nsec;
206 	__u8 di_reserved[44];
207 };
208 #define GFS2_FNAMESIZE		255
209 #define GFS2_DIRENT_SIZE(name_len) ((sizeof(struct gfs2_dirent) + (name_len) + 7) & ~7)
210 #define GFS2_MIN_DIRENT_SIZE (GFS2_DIRENT_SIZE(1))
211 struct gfs2_dirent {
212 	struct gfs2_inum de_inum;
213 	__be32 de_hash;
214 	__be16 de_rec_len;
215 	__be16 de_name_len;
216 	__be16 de_type;
217 	__be16 de_rahead;
218 	union {
219 		__u8 __pad[12];
220 		struct {
221 			__u32 de_cookie;
222 			__u8 pad3[8];
223 		};
224 	};
225 };
226 struct gfs2_leaf {
227 	struct gfs2_meta_header lf_header;
228 	__be16 lf_depth;
229 	__be16 lf_entries;
230 	__be32 lf_dirent_format;
231 	__be64 lf_next;
232 	union {
233 		__u8 lf_reserved[64];
234 		struct {
235 			__be64 lf_inode;
236 			__be32 lf_dist;
237 			__be32 lf_nsec;
238 			__be64 lf_sec;
239 			__u8 lf_reserved2[40];
240 		};
241 	};
242 };
243 #define GFS2_EA_MAX_NAME_LEN	255
244 #define GFS2_EA_MAX_DATA_LEN	65536
245 #define GFS2_EATYPE_UNUSED	0
246 #define GFS2_EATYPE_USR		1
247 #define GFS2_EATYPE_SYS		2
248 #define GFS2_EATYPE_SECURITY	3
249 #define GFS2_EATYPE_LAST	3
250 #define GFS2_EATYPE_VALID(x)	((x) <= GFS2_EATYPE_LAST)
251 #define GFS2_EAFLAG_LAST	0x01
252 struct gfs2_ea_header {
253 	__be32 ea_rec_len;
254 	__be32 ea_data_len;
255 	__u8 ea_name_len;
256 	__u8 ea_type;
257 	__u8 ea_flags;
258 	__u8 ea_num_ptrs;
259 	__u32 __pad;
260 };
261 #define GFS2_LOG_HEAD_UNMOUNT		0x00000001
262 #define GFS2_LOG_HEAD_FLUSH_NORMAL	0x00000002
263 #define GFS2_LOG_HEAD_FLUSH_SYNC	0x00000004
264 #define GFS2_LOG_HEAD_FLUSH_SHUTDOWN	0x00000008
265 #define GFS2_LOG_HEAD_FLUSH_FREEZE	0x00000010
266 #define GFS2_LOG_HEAD_RECOVERY		0x00000020
267 #define GFS2_LOG_HEAD_USERSPACE		0x80000000
268 #define GFS2_LFC_SHUTDOWN		0x00000100
269 #define GFS2_LFC_JDATA_WPAGES		0x00000200
270 #define GFS2_LFC_SET_FLAGS		0x00000400
271 #define GFS2_LFC_AIL_EMPTY_GL		0x00000800
272 #define GFS2_LFC_AIL_FLUSH		0x00001000
273 #define GFS2_LFC_RGRP_GO_SYNC		0x00002000
274 #define GFS2_LFC_INODE_GO_SYNC		0x00004000
275 #define GFS2_LFC_INODE_GO_INVAL		0x00008000
276 #define GFS2_LFC_FREEZE_GO_SYNC		0x00010000
277 #define GFS2_LFC_KILL_SB		0x00020000
278 #define GFS2_LFC_DO_SYNC		0x00040000
279 #define GFS2_LFC_INPLACE_RESERVE	0x00080000
280 #define GFS2_LFC_WRITE_INODE		0x00100000
281 #define GFS2_LFC_MAKE_FS_RO		0x00200000
282 #define GFS2_LFC_SYNC_FS		0x00400000
283 #define GFS2_LFC_EVICT_INODE		0x00800000
284 #define GFS2_LFC_TRANS_END		0x01000000
285 #define GFS2_LFC_LOGD_JFLUSH_REQD	0x02000000
286 #define GFS2_LFC_LOGD_AIL_FLUSH_REQD	0x04000000
287 #define LH_V1_SIZE (offsetofend(struct gfs2_log_header, lh_hash))
288 struct gfs2_log_header {
289 	struct gfs2_meta_header lh_header;
290 	__be64 lh_sequence;
291 	__be32 lh_flags;
292 	__be32 lh_tail;
293 	__be32 lh_blkno;
294 	__be32 lh_hash;
295 
296 	__be32 lh_crc;
297 	__be32 lh_nsec;
298 	__be64 lh_sec;
299 	__be64 lh_addr;
300 	__be64 lh_jinode;
301 	__be64 lh_statfs_addr;
302 	__be64 lh_quota_addr;
303 
304 	__be64 lh_local_total;
305 	__be64 lh_local_free;
306 	__be64 lh_local_dinodes;
307 };
308 #define GFS2_LOG_DESC_METADATA	300
309 #define GFS2_LOG_DESC_REVOKE	301
310 #define GFS2_LOG_DESC_JDATA	302
311 struct gfs2_log_descriptor {
312 	struct gfs2_meta_header ld_header;
313 	__be32 ld_type;
314 	__be32 ld_length;
315 	__be32 ld_data1;
316 	__be32 ld_data2;
317 	__u8 ld_reserved[32];
318 };
319 #define GFS2_INUM_QUANTUM	1048576
320 struct gfs2_inum_range {
321 	__be64 ir_start;
322 	__be64 ir_length;
323 };
324 struct gfs2_statfs_change {
325 	__be64 sc_total;
326 	__be64 sc_free;
327 	__be64 sc_dinodes;
328 };
329 #define GFS2_QCF_USER		0x00000001
330 struct gfs2_quota_change {
331 	__be64 qc_change;
332 	__be32 qc_flags;
333 	__be32 qc_id;
334 };
335 struct gfs2_quota_lvb {
336         __be32 qb_magic;
337         __u32 __pad;
338         __be64 qb_limit;
339         __be64 qb_warn;
340         __be64 qb_value;
341 };
342 #endif
343