gfs2_ondisk.h
001:
002:
003:
004:
005:
006:
007:
008:
009:
010: #ifndef __GFS2_ONDISK_DOT_H__
011: #define __GFS2_ONDISK_DOT_H__
012:
013: #include <linux/types.h>
014:
015: #define GFS2_MAGIC 0x01161970
016: #define GFS2_BASIC_BLOCK 512
017: #define GFS2_BASIC_BLOCK_SHIFT 9
018:
019:
020:
021: #define GFS2_MOUNT_LOCK 0
022: #define GFS2_LIVE_LOCK 1
023: #define GFS2_TRANS_LOCK 2
024: #define GFS2_RENAME_LOCK 3
025:
026:
027:
028: #define GFS2_FORMAT_NONE 0
029: #define GFS2_FORMAT_SB 100
030: #define GFS2_FORMAT_RG 200
031: #define GFS2_FORMAT_RB 300
032: #define GFS2_FORMAT_DI 400
033: #define GFS2_FORMAT_IN 500
034: #define GFS2_FORMAT_LF 600
035: #define GFS2_FORMAT_JD 700
036: #define GFS2_FORMAT_LH 800
037: #define GFS2_FORMAT_LD 900
038: #define GFS2_FORMAT_LB 1000
039: #define GFS2_FORMAT_EA 1600
040: #define GFS2_FORMAT_ED 1700
041: #define GFS2_FORMAT_QC 1400
042:
043: #define GFS2_FORMAT_RI 1100
044: #define GFS2_FORMAT_DE 1200
045: #define GFS2_FORMAT_QU 1500
046:
047: #define GFS2_FORMAT_FS 1801
048: #define GFS2_FORMAT_MULTI 1900
049:
050:
051:
052:
053:
054: struct gfs2_inum {
055: __be64 no_formal_ino;
056: __be64 no_addr;
057: };
058:
059:
060:
061:
062:
063:
064: #define GFS2_METATYPE_NONE 0
065: #define GFS2_METATYPE_SB 1
066: #define GFS2_METATYPE_RG 2
067: #define GFS2_METATYPE_RB 3
068: #define GFS2_METATYPE_DI 4
069: #define GFS2_METATYPE_IN 5
070: #define GFS2_METATYPE_LF 6
071: #define GFS2_METATYPE_JD 7
072: #define GFS2_METATYPE_LH 8
073: #define GFS2_METATYPE_LD 9
074: #define GFS2_METATYPE_LB 12
075: #define GFS2_METATYPE_EA 10
076: #define GFS2_METATYPE_ED 11
077: #define GFS2_METATYPE_QC 14
078:
079: struct gfs2_meta_header {
080: __be32 mh_magic;
081: __be32 mh_type;
082: __be64 __pad0;
083: __be32 mh_format;
084:
085: union {
086: __be32 mh_jid;
087: __be32 __pad1;
088: };
089: };
090:
091:
092:
093:
094:
095:
096:
097:
098:
099:
100:
101: #define GFS2_SB_ADDR 128
102:
103:
104: #define GFS2_SB_LOCK 0
105:
106:
107:
108: #define GFS2_LOCKNAME_LEN 64
109:
110: struct gfs2_sb {
111: struct gfs2_meta_header sb_header;
112:
113: __be32 sb_fs_format;
114: __be32 sb_multihost_format;
115: __u32 __pad0;
116:
117: __be32 sb_bsize;
118: __be32 sb_bsize_shift;
119: __u32 __pad1;
120:
121: struct gfs2_inum sb_master_dir;
122: struct gfs2_inum __pad2;
123: struct gfs2_inum sb_root_dir;
124:
125: char sb_lockproto[GFS2_LOCKNAME_LEN];
126: char sb_locktable[GFS2_LOCKNAME_LEN];
127:
128: struct gfs2_inum __pad3;
129: struct gfs2_inum __pad4;
130: #define GFS2_HAS_UUID 1
131: __u8 sb_uuid[16];
132: };
133:
134:
135:
136:
137:
138: struct gfs2_rindex {
139: __be64 ri_addr;
140: __be32 ri_length;
141: __u32 __pad;
142:
143: __be64 ri_data0;
144: __be32 ri_data;
145:
146: __be32 ri_bitbytes;
147:
148: __u8 ri_reserved[64];
149: };
150:
151:
152:
153:
154:
155:
156: #define GFS2_NBBY 4
157: #define GFS2_BIT_SIZE 2
158: #define GFS2_BIT_MASK 0x00000003
159:
160: #define GFS2_BLKST_FREE 0
161: #define GFS2_BLKST_USED 1
162: #define GFS2_BLKST_UNLINKED 2
163: #define GFS2_BLKST_DINODE 3
164:
165: #define GFS2_RGF_JOURNAL 0x00000001
166: #define GFS2_RGF_METAONLY 0x00000002
167: #define GFS2_RGF_DATAONLY 0x00000004
168: #define GFS2_RGF_NOALLOC 0x00000008
169:
170: struct gfs2_rgrp {
171: struct gfs2_meta_header rg_header;
172:
173: __be32 rg_flags;
174: __be32 rg_free;
175: __be32 rg_dinodes;
176: __be32 __pad;
177: __be64 rg_igeneration;
178:
179: __u8 rg_reserved[80];
180: };
181:
182:
183:
184:
185:
186: struct gfs2_quota {
187: __be64 qu_limit;
188: __be64 qu_warn;
189: __be64 qu_value;
190: __u8 qu_reserved[64];
191: };
192:
193:
194:
195:
196:
197: #define GFS2_MAX_META_HEIGHT 10
198: #define GFS2_DIR_MAX_DEPTH 17
199:
200: #define DT2IF(dt) (((dt) << 12) & S_IFMT)
201: #define IF2DT(sif) (((sif) & S_IFMT) >> 12)
202:
203: enum {
204: gfs2fl_Jdata = 0,
205: gfs2fl_ExHash = 1,
206: gfs2fl_Unused = 2,
207: gfs2fl_EaIndirect = 3,
208: gfs2fl_Directio = 4,
209: gfs2fl_Immutable = 5,
210: gfs2fl_AppendOnly = 6,
211: gfs2fl_NoAtime = 7,
212: gfs2fl_Sync = 8,
213: gfs2fl_System = 9,
214: gfs2fl_TruncInProg = 29,
215: gfs2fl_InheritDirectio = 30,
216: gfs2fl_InheritJdata = 31,
217: };
218:
219:
220: #define GFS2_DIF_JDATA 0x00000001
221: #define GFS2_DIF_EXHASH 0x00000002
222: #define GFS2_DIF_UNUSED 0x00000004
223: #define GFS2_DIF_EA_INDIRECT 0x00000008
224: #define GFS2_DIF_DIRECTIO 0x00000010
225: #define GFS2_DIF_IMMUTABLE 0x00000020
226: #define GFS2_DIF_APPENDONLY 0x00000040
227: #define GFS2_DIF_NOATIME 0x00000080
228: #define GFS2_DIF_SYNC 0x00000100
229: #define GFS2_DIF_SYSTEM 0x00000200
230: #define GFS2_DIF_TRUNC_IN_PROG 0x20000000
231: #define GFS2_DIF_INHERIT_DIRECTIO 0x40000000
232: #define GFS2_DIF_INHERIT_JDATA 0x80000000
233:
234: struct gfs2_dinode {
235: struct gfs2_meta_header di_header;
236:
237: struct gfs2_inum di_num;
238:
239: __be32 di_mode;
240: __be32 di_uid;
241: __be32 di_gid;
242: __be32 di_nlink;
243: __be64 di_size;
244: __be64 di_blocks;
245: __be64 di_atime;
246: __be64 di_mtime;
247: __be64 di_ctime;
248: __be32 di_major;
249: __be32 di_minor;
250:
251:
252:
253:
254: __be64 di_goal_meta;
255: __be64 di_goal_data;
256: __be64 di_generation;
257:
258: __be32 di_flags;
259: __be32 di_payload_format;
260: __u16 __pad1;
261: __be16 di_height;
262: __u32 __pad2;
263:
264:
265: __u16 __pad3;
266: __be16 di_depth;
267: __be32 di_entries;
268:
269: struct gfs2_inum __pad4;
270:
271: __be64 di_eattr;
272: __be32 di_atime_nsec;
273: __be32 di_mtime_nsec;
274: __be32 di_ctime_nsec;
275:
276: __u8 di_reserved[44];
277: };
278:
279:
280:
281:
282:
283: #define GFS2_FNAMESIZE 255
284: #define GFS2_DIRENT_SIZE(name_len) ((sizeof(struct gfs2_dirent) + (name_len) + 7) & ~7)
285:
286: struct gfs2_dirent {
287: struct gfs2_inum de_inum;
288: __be32 de_hash;
289: __be16 de_rec_len;
290: __be16 de_name_len;
291: __be16 de_type;
292: __u8 __pad[14];
293: };
294:
295:
296:
297:
298:
299: struct gfs2_leaf {
300: struct gfs2_meta_header lf_header;
301:
302: __be16 lf_depth;
303: __be16 lf_entries;
304: __be32 lf_dirent_format;
305: __be64 lf_next;
306:
307: __u8 lf_reserved[64];
308: };
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336: #define GFS2_EA_MAX_NAME_LEN 255
337: #define GFS2_EA_MAX_DATA_LEN 65536
338:
339: #define GFS2_EATYPE_UNUSED 0
340: #define GFS2_EATYPE_USR 1
341: #define GFS2_EATYPE_SYS 2
342: #define GFS2_EATYPE_SECURITY 3
343:
344: #define GFS2_EATYPE_LAST 3
345: #define GFS2_EATYPE_VALID(x) ((x) <= GFS2_EATYPE_LAST)
346:
347: #define GFS2_EAFLAG_LAST 0x01
348:
349: struct gfs2_ea_header {
350: __be32 ea_rec_len;
351: __be32 ea_data_len;
352: __u8 ea_name_len;
353: __u8 ea_type;
354: __u8 ea_flags;
355: __u8 ea_num_ptrs;
356: __u32 __pad;
357: };
358:
359:
360:
361:
362:
363: #define GFS2_LOG_HEAD_UNMOUNT 0x00000001
364:
365: struct gfs2_log_header {
366: struct gfs2_meta_header lh_header;
367:
368: __be64 lh_sequence;
369: __be32 lh_flags;
370: __be32 lh_tail;
371: __be32 lh_blkno;
372: __be32 lh_hash;
373: };
374:
375:
376:
377:
378:
379: #define GFS2_LOG_DESC_METADATA 300
380:
381:
382:
383: #define GFS2_LOG_DESC_REVOKE 301
384:
385:
386:
387: #define GFS2_LOG_DESC_JDATA 302
388:
389:
390:
391: struct gfs2_log_descriptor {
392: struct gfs2_meta_header ld_header;
393:
394: __be32 ld_type;
395: __be32 ld_length;
396: __be32 ld_data1;
397: __be32 ld_data2;
398:
399: __u8 ld_reserved[32];
400: };
401:
402:
403:
404:
405:
406:
407:
408: #define GFS2_INUM_QUANTUM 1048576
409:
410: struct gfs2_inum_range {
411: __be64 ir_start;
412: __be64 ir_length;
413: };
414:
415:
416:
417:
418:
419:
420:
421: struct gfs2_statfs_change {
422: __be64 sc_total;
423: __be64 sc_free;
424: __be64 sc_dinodes;
425: };
426:
427:
428:
429:
430:
431:
432:
433: #define GFS2_QCF_USER 0x00000001
434:
435: struct gfs2_quota_change {
436: __be64 qc_change;
437: __be32 qc_flags;
438: __be32 qc_id;
439: };
440:
441: struct gfs2_quota_lvb {
442: __be32 qb_magic;
443: __u32 __pad;
444: __be64 qb_limit;
445: __be64 qb_warn;
446: __be64 qb_value;
447: };
448:
449: #endif
450:
© Andrew Scott 2006 -
2025,
All Rights Reserved