probe.h revision 801b0053336cc5fe5b3447ddad58505352a6578e
1e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/*
2e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * probe.h - constants and on-disk structures for extracting device data
3e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o *
4e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * Copyright (C) 1999 by Andries Brouwer
550b380b4d4ab668bad45033e3a8aaf93c7f42844Theodore Ts'o * Copyright (C) 1999, 2000, 2003 by Theodore Ts'o
6e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * Copyright (C) 2001 by Andreas Dilger
7e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o *
8e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * %Begin-Header%
9e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * This file may be redistributed under the terms of the
10e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * GNU Lesser General Public License.
11e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * %End-Header%
12e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o */
13e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o
14e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o#ifndef _BLKID_PROBE_H
15e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o#define _BLKID_PROBE_H
16e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o
17e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o#include <blkid/blkid_types.h>
18e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o
19e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct blkid_magic;
20e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o
21ca7498596f80896c8c495d5b0c3f20dd12ca9336Theodore Ts'o#define SB_BUFFER_SIZE		0x11000
22ca7498596f80896c8c495d5b0c3f20dd12ca9336Theodore Ts'o
23ca7498596f80896c8c495d5b0c3f20dd12ca9336Theodore Ts'ostruct blkid_probe {
24ca7498596f80896c8c495d5b0c3f20dd12ca9336Theodore Ts'o	int			fd;
25ca7498596f80896c8c495d5b0c3f20dd12ca9336Theodore Ts'o	blkid_cache		cache;
26ca7498596f80896c8c495d5b0c3f20dd12ca9336Theodore Ts'o	blkid_dev		dev;
27ca7498596f80896c8c495d5b0c3f20dd12ca9336Theodore Ts'o	unsigned char		*sbbuf;
28ca7498596f80896c8c495d5b0c3f20dd12ca9336Theodore Ts'o	size_t			sb_valid;
29ca7498596f80896c8c495d5b0c3f20dd12ca9336Theodore Ts'o	unsigned char		*buf;
30ca7498596f80896c8c495d5b0c3f20dd12ca9336Theodore Ts'o	size_t			buf_max;
31ca7498596f80896c8c495d5b0c3f20dd12ca9336Theodore Ts'o};
32ca7498596f80896c8c495d5b0c3f20dd12ca9336Theodore Ts'o
33efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'otypedef int (*blkid_probe_t)(struct blkid_probe *probe,
3479dd234a799434b6dc8365c49e743f00eb09d2fdTheodore Ts'o			     struct blkid_magic *id, unsigned char *buf);
35e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o
36e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct blkid_magic {
37e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	const char	*bim_type;	/* type name for this magic */
38e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	long		bim_kboff;	/* kilobyte offset of superblock */
39e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	unsigned	bim_sboff;	/* byte offset within superblock */
40e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	unsigned	bim_len;	/* length of magic */
41d3f917989badf78d1f97654e46d60d1f3d25cd17Theodore Ts'o	const char	*bim_magic;	/* magic string */
42e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	blkid_probe_t	bim_probe;	/* probe function */
43e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o};
44e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o
45e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/*
46e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * Structures for each of the content types we want to extract information
47e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * from.  We do not necessarily need the magic field here, because we have
48e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * already identified the content type before we get this far.  It may still
49e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * be useful if there are probe functions which handle multiple content types.
50e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o */
51e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct ext2_super_block {
52e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		s_inodes_count;
53e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		s_blocks_count;
54e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		s_r_blocks_count;
55e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		s_free_blocks_count;
56e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		s_free_inodes_count;
57e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		s_first_data_block;
58e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		s_log_block_size;
59e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		s_dummy3[7];
60e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	unsigned char	s_magic[2];
61e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u16		s_state;
62e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		s_dummy5[8];
63e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		s_feature_compat;
64e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		s_feature_incompat;
65e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		s_feature_ro_compat;
66e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	unsigned char   s_uuid[16];
67d3f917989badf78d1f97654e46d60d1f3d25cd17Theodore Ts'o	char	   s_volume_name[16];
68ba5e38494e6b42d77f76d9ad18744388958eca7cTheodore Ts'o	char	s_last_mounted[64];
69ba5e38494e6b42d77f76d9ad18744388958eca7cTheodore Ts'o	__u32	s_algorithm_usage_bitmap;
70ba5e38494e6b42d77f76d9ad18744388958eca7cTheodore Ts'o	__u8	s_prealloc_blocks;
71ba5e38494e6b42d77f76d9ad18744388958eca7cTheodore Ts'o	__u8	s_prealloc_dir_blocks;
72ba5e38494e6b42d77f76d9ad18744388958eca7cTheodore Ts'o	__u16	s_reserved_gdt_blocks;
73ba5e38494e6b42d77f76d9ad18744388958eca7cTheodore Ts'o	__u8	s_journal_uuid[16];
74ba5e38494e6b42d77f76d9ad18744388958eca7cTheodore Ts'o	__u32	s_journal_inum;
75ba5e38494e6b42d77f76d9ad18744388958eca7cTheodore Ts'o	__u32	s_journal_dev;
76ba5e38494e6b42d77f76d9ad18744388958eca7cTheodore Ts'o	__u32	s_last_orphan;
77ba5e38494e6b42d77f76d9ad18744388958eca7cTheodore Ts'o	__u32	s_hash_seed[4];
78ba5e38494e6b42d77f76d9ad18744388958eca7cTheodore Ts'o	__u8	s_def_hash_version;
79ba5e38494e6b42d77f76d9ad18744388958eca7cTheodore Ts'o	__u8	s_jnl_backup_type;
80ba5e38494e6b42d77f76d9ad18744388958eca7cTheodore Ts'o	__u16	s_reserved_word_pad;
81ba5e38494e6b42d77f76d9ad18744388958eca7cTheodore Ts'o	__u32	s_default_mount_opts;
82ba5e38494e6b42d77f76d9ad18744388958eca7cTheodore Ts'o	__u32	s_first_meta_bg;
83ba5e38494e6b42d77f76d9ad18744388958eca7cTheodore Ts'o	__u32	s_mkfs_time;
84ba5e38494e6b42d77f76d9ad18744388958eca7cTheodore Ts'o	__u32	s_jnl_blocks[17];
852921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o	__u32	s_blocks_count_hi;
862921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o	__u32	s_r_blocks_count_hi;
872921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o	__u32	s_free_blocks_hi;
882921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o	__u16	s_min_extra_isize;
892921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o	__u16	s_want_extra_isize;
902921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o	__u32	s_flags;
912921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o	__u16   s_raid_stride;
922921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o	__u16   s_mmp_interval;
932921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o	__u64   s_mmp_block;
942921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o	__u32   s_raid_stripe_width;
952921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o	__u32   s_reserved[163];
96e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o};
972921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o
982921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o/* for s_flags */
992921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT2_FLAGS_TEST_FILESYS		0x0004
1002921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o
1012921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o/* for s_feature_compat */
1022921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT3_FEATURE_COMPAT_HAS_JOURNAL		0x0004
1032921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o
1042921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o/* for s_feature_ro_compat */
1052921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER	0x0001
1062921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE	0x0002
1072921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT2_FEATURE_RO_COMPAT_BTREE_DIR	0x0004
1082921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT4_FEATURE_RO_COMPAT_HUGE_FILE	0x0008
1092921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT4_FEATURE_RO_COMPAT_GDT_CSUM		0x0010
1102921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT4_FEATURE_RO_COMPAT_DIR_NLINK	0x0020
1112921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE	0x0040
1122921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o
1132921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o/* for s_feature_incompat */
1142921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT2_FEATURE_INCOMPAT_FILETYPE		0x0002
1152921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT3_FEATURE_INCOMPAT_RECOVER		0x0004
1162921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV	0x0008
1172921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT2_FEATURE_INCOMPAT_META_BG		0x0010
1182921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT4_FEATURE_INCOMPAT_EXTENTS		0x0040 /* extents support */
1192921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT4_FEATURE_INCOMPAT_64BIT		0x0080
1202921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT4_FEATURE_INCOMPAT_MMP		0x0100
1212921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT4_FEATURE_INCOMPAT_FLEX_BG		0x0200
1222921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o
1232921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT2_FEATURE_RO_COMPAT_SUPP	(EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
1242921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o					 EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
1252921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o					 EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
1262921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT2_FEATURE_INCOMPAT_SUPP	(EXT2_FEATURE_INCOMPAT_FILETYPE| \
1272921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o					 EXT2_FEATURE_INCOMPAT_META_BG)
1282921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT2_FEATURE_INCOMPAT_UNSUPPORTED	~EXT2_FEATURE_INCOMPAT_SUPP
1292921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT2_FEATURE_RO_COMPAT_UNSUPPORTED	~EXT2_FEATURE_RO_COMPAT_SUPP
1302921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o
1312921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT3_FEATURE_RO_COMPAT_SUPP	(EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
1322921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o					 EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
1332921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o					 EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
1342921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT3_FEATURE_INCOMPAT_SUPP	(EXT2_FEATURE_INCOMPAT_FILETYPE| \
1352921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o					 EXT3_FEATURE_INCOMPAT_RECOVER| \
1362921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o					 EXT2_FEATURE_INCOMPAT_META_BG)
1372921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT3_FEATURE_INCOMPAT_UNSUPPORTED	~EXT3_FEATURE_INCOMPAT_SUPP
1382921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o#define EXT3_FEATURE_RO_COMPAT_UNSUPPORTED	~EXT3_FEATURE_RO_COMPAT_SUPP
1392921332fd88b843ffb828d9c18f05bfd171ace76Theodore Ts'o
140e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o
141e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct xfs_super_block {
142e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	unsigned char	xs_magic[4];
143e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		xs_blocksize;
144e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u64		xs_dblocks;
145e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u64		xs_rblocks;
14609a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o	__u32		xs_dummy1[2];
147e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	unsigned char	xs_uuid[16];
148e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		xs_dummy2[15];
149d3f917989badf78d1f97654e46d60d1f3d25cd17Theodore Ts'o	char		xs_fname[12];
150e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		xs_dummy3[2];
151e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u64		xs_icount;
152e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u64		xs_ifree;
153e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u64		xs_fdblocks;
154e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o};
155e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o
156e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct reiserfs_super_block {
157e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		rs_blocks_count;
158e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		rs_free_blocks;
159e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		rs_root_block;
160e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		rs_journal_block;
161e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		rs_journal_dev;
162e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		rs_orig_journal_size;
163e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		rs_dummy2[5];
164e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u16		rs_blocksize;
165e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u16		rs_dummy3[3];
166e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	unsigned char	rs_magic[12];
167e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		rs_dummy4[5];
168e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	unsigned char	rs_uuid[16];
169d3f917989badf78d1f97654e46d60d1f3d25cd17Theodore Ts'o	char		rs_label[16];
170e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o};
171e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o
172bb626bcd546a039b39b9f25e65881b36b2abe24fTheodore Ts'ostruct reiser4_super_block {
173bb626bcd546a039b39b9f25e65881b36b2abe24fTheodore Ts'o	unsigned char	rs4_magic[16];
174bb626bcd546a039b39b9f25e65881b36b2abe24fTheodore Ts'o	__u16		rs4_dummy[2];
175bb626bcd546a039b39b9f25e65881b36b2abe24fTheodore Ts'o	unsigned char	rs4_uuid[16];
176bb626bcd546a039b39b9f25e65881b36b2abe24fTheodore Ts'o	unsigned char	rs4_label[16];
177bb626bcd546a039b39b9f25e65881b36b2abe24fTheodore Ts'o	__u64		rs4_dummy2;
178bb626bcd546a039b39b9f25e65881b36b2abe24fTheodore Ts'o};
179bb626bcd546a039b39b9f25e65881b36b2abe24fTheodore Ts'o
18009a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'ostruct jfs_super_block {
18109a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o	unsigned char	js_magic[4];
18209a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o	__u32		js_version;
18309a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o	__u64		js_size;
184b41fb002257d4b997560cd77676b78219be03c24Theodore Ts'o	__u32		js_bsize;	/* 4: aggregate block size in bytes */
185b41fb002257d4b997560cd77676b78219be03c24Theodore Ts'o	__u16		js_l2bsize;	/* 2: log2 of s_bsize */
186b41fb002257d4b997560cd77676b78219be03c24Theodore Ts'o	__u16		js_l2bfactor;	/* 2: log2(s_bsize/hardware block size) */
187b41fb002257d4b997560cd77676b78219be03c24Theodore Ts'o	__u32		js_pbsize;	/* 4: hardware/LVM block size in bytes */
188b41fb002257d4b997560cd77676b78219be03c24Theodore Ts'o	__u16		js_l2pbsize;	/* 2: log2 of s_pbsize */
189b41fb002257d4b997560cd77676b78219be03c24Theodore Ts'o	__u16 		js_pad;		/* 2: padding necessary for alignment */
190b41fb002257d4b997560cd77676b78219be03c24Theodore Ts'o	__u32		js_dummy2[26];
19109a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o	unsigned char	js_uuid[16];
19209a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o	unsigned char	js_label[16];
19309a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o	unsigned char	js_loguuid[16];
19409a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o};
19509a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o
19609a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'ostruct romfs_super_block {
19709a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o	unsigned char	ros_magic[8];
19809a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o	__u32		ros_dummy1[2];
19909a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o	unsigned char	ros_volume[16];
20009a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o};
20109a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o
2024c4e3f784330978fa127edaa3936957d38c7e93aTheodore Ts'ostruct cramfs_super_block {
2034c4e3f784330978fa127edaa3936957d38c7e93aTheodore Ts'o	__u8		magic[4];
2044c4e3f784330978fa127edaa3936957d38c7e93aTheodore Ts'o	__u32		size;
2054c4e3f784330978fa127edaa3936957d38c7e93aTheodore Ts'o	__u32		flags;
2064c4e3f784330978fa127edaa3936957d38c7e93aTheodore Ts'o	__u32		future;
2074c4e3f784330978fa127edaa3936957d38c7e93aTheodore Ts'o	__u8		signature[16];
2084c4e3f784330978fa127edaa3936957d38c7e93aTheodore Ts'o	struct cramfs_info {
2094c4e3f784330978fa127edaa3936957d38c7e93aTheodore Ts'o		__u32		crc;
2104c4e3f784330978fa127edaa3936957d38c7e93aTheodore Ts'o		__u32		edition;
2114c4e3f784330978fa127edaa3936957d38c7e93aTheodore Ts'o		__u32		blocks;
2124c4e3f784330978fa127edaa3936957d38c7e93aTheodore Ts'o		__u32		files;
2134c4e3f784330978fa127edaa3936957d38c7e93aTheodore Ts'o	} info;
2144c4e3f784330978fa127edaa3936957d38c7e93aTheodore Ts'o	__u8		name[16];
2154c4e3f784330978fa127edaa3936957d38c7e93aTheodore Ts'o};
2164c4e3f784330978fa127edaa3936957d38c7e93aTheodore Ts'o
2177369f0ce5fdde7f8a1cc6e49211469b905c2c58fTheodore Ts'ostruct swap_id_block {
2187369f0ce5fdde7f8a1cc6e49211469b905c2c58fTheodore Ts'o/*	unsigned char	sws_boot[1024]; */
2197369f0ce5fdde7f8a1cc6e49211469b905c2c58fTheodore Ts'o	__u32		sws_version;
2207369f0ce5fdde7f8a1cc6e49211469b905c2c58fTheodore Ts'o	__u32		sws_lastpage;
2217369f0ce5fdde7f8a1cc6e49211469b905c2c58fTheodore Ts'o	__u32		sws_nrbad;
2227369f0ce5fdde7f8a1cc6e49211469b905c2c58fTheodore Ts'o	unsigned char	sws_uuid[16];
22312b3c8ec1d314b8775fc7d9cefd6bfff551f1de0Theodore Ts'o	char		sws_volume[16];
2247369f0ce5fdde7f8a1cc6e49211469b905c2c58fTheodore Ts'o	unsigned char	sws_pad[117];
2257369f0ce5fdde7f8a1cc6e49211469b905c2c58fTheodore Ts'o	__u32		sws_badpg;
2267369f0ce5fdde7f8a1cc6e49211469b905c2c58fTheodore Ts'o};
2277369f0ce5fdde7f8a1cc6e49211469b905c2c58fTheodore Ts'o
228e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* Yucky misaligned values */
229e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct vfat_super_block {
230e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 00*/	unsigned char	vs_ignored[3];
231e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 03*/	unsigned char	vs_sysid[8];
232e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 0b*/	unsigned char	vs_sector_size[2];
233e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 0d*/	__u8		vs_cluster_size;
234e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 0e*/	__u16		vs_reserved;
235e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 10*/	__u8		vs_fats;
236e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 11*/	unsigned char	vs_dir_entries[2];
237e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 13*/	unsigned char	vs_sectors[2];
238e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 15*/	unsigned char	vs_media;
239e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 16*/	__u16		vs_fat_length;
240e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 18*/	__u16		vs_secs_track;
241e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 1a*/	__u16		vs_heads;
242e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 1c*/	__u32		vs_hidden;
243e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 20*/	__u32		vs_total_sect;
244e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 24*/	__u32		vs_fat32_length;
245e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 28*/	__u16		vs_flags;
246e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 2a*/	__u8		vs_version[2];
247e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 2c*/	__u32		vs_root_cluster;
248e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 30*/	__u16		vs_insfo_sector;
249e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 32*/	__u16		vs_backup_boot;
250e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 34*/	__u16		vs_reserved2[6];
251e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 40*/	unsigned char	vs_unknown[3];
252e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 43*/	unsigned char	vs_serno[4];
253ca7498596f80896c8c495d5b0c3f20dd12ca9336Theodore Ts'o/* 47*/	unsigned char	vs_label[11];
254e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 52*/	unsigned char   vs_magic[8];
255e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 5a*/	unsigned char	vs_dummy2[164];
256e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/*1fe*/	unsigned char	vs_pmagic[2];
257e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o};
258e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o
259e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* Yucky misaligned values */
260e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct msdos_super_block {
261e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 00*/	unsigned char	ms_ignored[3];
262e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 03*/	unsigned char	ms_sysid[8];
263e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 0b*/	unsigned char	ms_sector_size[2];
264e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 0d*/	__u8		ms_cluster_size;
265e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 0e*/	__u16		ms_reserved;
266e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 10*/	__u8		ms_fats;
267e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 11*/	unsigned char	ms_dir_entries[2];
268e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 13*/	unsigned char	ms_sectors[2];
269e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 15*/	unsigned char	ms_media;
270e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 16*/	__u16		ms_fat_length;
271e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 18*/	__u16		ms_secs_track;
272e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 1a*/	__u16		ms_heads;
273e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 1c*/	__u32		ms_hidden;
274e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 20*/	__u32		ms_total_sect;
275e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 24*/	unsigned char	ms_unknown[3];
276e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 27*/	unsigned char	ms_serno[4];
277ca7498596f80896c8c495d5b0c3f20dd12ca9336Theodore Ts'o/* 2b*/	unsigned char	ms_label[11];
278e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 36*/	unsigned char   ms_magic[8];
279e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 3d*/	unsigned char	ms_dummy2[192];
280e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/*1fe*/	unsigned char	ms_pmagic[2];
281e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o};
282e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o
283c4c740ff488dae232dd3a64fccd26ec7265165a4Karel Zakstruct vfat_dir_entry {
284c4c740ff488dae232dd3a64fccd26ec7265165a4Karel Zak	__u8	name[11];
285c4c740ff488dae232dd3a64fccd26ec7265165a4Karel Zak	__u8	attr;
286c4c740ff488dae232dd3a64fccd26ec7265165a4Karel Zak	__u16	time_creat;
287c4c740ff488dae232dd3a64fccd26ec7265165a4Karel Zak	__u16	date_creat;
288c4c740ff488dae232dd3a64fccd26ec7265165a4Karel Zak	__u16	time_acc;
289c4c740ff488dae232dd3a64fccd26ec7265165a4Karel Zak	__u16	date_acc;
290c4c740ff488dae232dd3a64fccd26ec7265165a4Karel Zak	__u16	cluster_high;
291c4c740ff488dae232dd3a64fccd26ec7265165a4Karel Zak	__u16	time_write;
292c4c740ff488dae232dd3a64fccd26ec7265165a4Karel Zak	__u16	date_write;
293c4c740ff488dae232dd3a64fccd26ec7265165a4Karel Zak	__u16	cluster_low;
294c4c740ff488dae232dd3a64fccd26ec7265165a4Karel Zak	__u32	size;
295c4c740ff488dae232dd3a64fccd26ec7265165a4Karel Zak};
296c4c740ff488dae232dd3a64fccd26ec7265165a4Karel Zak
297c4c740ff488dae232dd3a64fccd26ec7265165a4Karel Zak/* maximum number of clusters */
298c4c740ff488dae232dd3a64fccd26ec7265165a4Karel Zak#define FAT12_MAX 0xFF4
299c4c740ff488dae232dd3a64fccd26ec7265165a4Karel Zak#define FAT16_MAX 0xFFF4
300c4c740ff488dae232dd3a64fccd26ec7265165a4Karel Zak#define FAT32_MAX 0x0FFFFFF6
301c4c740ff488dae232dd3a64fccd26ec7265165a4Karel Zak
302e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct minix_super_block {
303e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u16		ms_ninodes;
304e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u16		ms_nzones;
305e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u16		ms_imap_blocks;
306e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u16		ms_zmap_blocks;
307e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u16		ms_firstdatazone;
308e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u16		ms_log_zone_size;
309e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		ms_max_size;
310e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	unsigned char	ms_magic[2];
311e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u16		ms_state;
312e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32		ms_zones;
313e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o};
314e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o
315e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct mdp_superblock_s {
316e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32 md_magic;
317e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32 major_version;
318e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32 minor_version;
319e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32 patch_version;
320e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32 gvalid_words;
321e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32 set_uuid0;
322e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32 ctime;
323e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32 level;
324e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32 size;
325e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32 nr_disks;
326e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32 raid_disks;
327e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32 md_minor;
328e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32 not_persistent;
329e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32 set_uuid1;
330e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32 set_uuid2;
331e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32 set_uuid3;
332e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o};
333e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o
334e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct hfs_super_block {
335e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	char	h_magic[2];
336e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	char	h_dummy[18];
337e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o	__u32	h_blksize;
338e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o};
339e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o
3409387c281ef88cd1fba7cb1c9336b5ab00a2d82b4Theodore Ts'ostruct ocfs_volume_header {
3413838f7df134035089e8e8df317112e4fd645602dTheodore Ts'o	unsigned char	minor_version[4];
3423838f7df134035089e8e8df317112e4fd645602dTheodore Ts'o	unsigned char	major_version[4];
3433838f7df134035089e8e8df317112e4fd645602dTheodore Ts'o	unsigned char	signature[128];
34412b3c8ec1d314b8775fc7d9cefd6bfff551f1de0Theodore Ts'o	char		mount[128];
34512b3c8ec1d314b8775fc7d9cefd6bfff551f1de0Theodore Ts'o	unsigned char   mount_len[2];
3469387c281ef88cd1fba7cb1c9336b5ab00a2d82b4Theodore Ts'o};
3479387c281ef88cd1fba7cb1c9336b5ab00a2d82b4Theodore Ts'o
3489387c281ef88cd1fba7cb1c9336b5ab00a2d82b4Theodore Ts'ostruct ocfs_volume_label {
3493838f7df134035089e8e8df317112e4fd645602dTheodore Ts'o	unsigned char	disk_lock[48];
350efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o	char		label[64];
3513838f7df134035089e8e8df317112e4fd645602dTheodore Ts'o	unsigned char	label_len[2];
3523838f7df134035089e8e8df317112e4fd645602dTheodore Ts'o	unsigned char  vol_id[16];
3533838f7df134035089e8e8df317112e4fd645602dTheodore Ts'o	unsigned char  vol_id_len[2];
3549387c281ef88cd1fba7cb1c9336b5ab00a2d82b4Theodore Ts'o};
3559387c281ef88cd1fba7cb1c9336b5ab00a2d82b4Theodore Ts'o
3563838f7df134035089e8e8df317112e4fd645602dTheodore Ts'o#define ocfsmajor(o) ((__u32)o.major_version[0] \
3573838f7df134035089e8e8df317112e4fd645602dTheodore Ts'o                   + (((__u32) o.major_version[1]) << 8) \
3583838f7df134035089e8e8df317112e4fd645602dTheodore Ts'o                   + (((__u32) o.major_version[2]) << 16) \
3593838f7df134035089e8e8df317112e4fd645602dTheodore Ts'o                   + (((__u32) o.major_version[3]) << 24))
3603838f7df134035089e8e8df317112e4fd645602dTheodore Ts'o#define ocfslabellen(o)	((__u32)o.label_len[0] + (((__u32) o.label_len[1]) << 8))
3613838f7df134035089e8e8df317112e4fd645602dTheodore Ts'o#define ocfsmountlen(o)	((__u32)o.mount_len[0] + (((__u32) o.mount_len[1])<<8))
3629387c281ef88cd1fba7cb1c9336b5ab00a2d82b4Theodore Ts'o
3639387c281ef88cd1fba7cb1c9336b5ab00a2d82b4Theodore Ts'o#define OCFS_MAGIC "OracleCFS"
3649387c281ef88cd1fba7cb1c9336b5ab00a2d82b4Theodore Ts'o
365414846b126d4d751bd6b36df0a39dcb030e0feb3Theodore Ts'ostruct ocfs2_super_block {
3663838f7df134035089e8e8df317112e4fd645602dTheodore Ts'o	unsigned char  signature[8];
3673838f7df134035089e8e8df317112e4fd645602dTheodore Ts'o	unsigned char  s_dummy1[184];
3683838f7df134035089e8e8df317112e4fd645602dTheodore Ts'o	unsigned char  s_dummy2[80];
36912b3c8ec1d314b8775fc7d9cefd6bfff551f1de0Theodore Ts'o	char	       s_label[64];
3703838f7df134035089e8e8df317112e4fd645602dTheodore Ts'o	unsigned char  s_uuid[16];
371414846b126d4d751bd6b36df0a39dcb030e0feb3Theodore Ts'o};
372414846b126d4d751bd6b36df0a39dcb030e0feb3Theodore Ts'o
373414846b126d4d751bd6b36df0a39dcb030e0feb3Theodore Ts'o#define OCFS2_MIN_BLOCKSIZE             512
374414846b126d4d751bd6b36df0a39dcb030e0feb3Theodore Ts'o#define OCFS2_MAX_BLOCKSIZE             4096
375414846b126d4d751bd6b36df0a39dcb030e0feb3Theodore Ts'o
376414846b126d4d751bd6b36df0a39dcb030e0feb3Theodore Ts'o#define OCFS2_SUPER_BLOCK_BLKNO         2
377414846b126d4d751bd6b36df0a39dcb030e0feb3Theodore Ts'o
378414846b126d4d751bd6b36df0a39dcb030e0feb3Theodore Ts'o#define OCFS2_SUPER_BLOCK_SIGNATURE     "OCFSV2"
379414846b126d4d751bd6b36df0a39dcb030e0feb3Theodore Ts'o
3802c92375ea426768a6e37faf876b2b06f0bf781a6Theodore Ts'ostruct oracle_asm_disk_label {
3812c92375ea426768a6e37faf876b2b06f0bf781a6Theodore Ts'o	char dummy[32];
3822c92375ea426768a6e37faf876b2b06f0bf781a6Theodore Ts'o	char dl_tag[8];
3832c92375ea426768a6e37faf876b2b06f0bf781a6Theodore Ts'o	char dl_id[24];
3842c92375ea426768a6e37faf876b2b06f0bf781a6Theodore Ts'o};
3852c92375ea426768a6e37faf876b2b06f0bf781a6Theodore Ts'o
3862c92375ea426768a6e37faf876b2b06f0bf781a6Theodore Ts'o#define ORACLE_ASM_DISK_LABEL_MARKED    "ORCLDISK"
3872c92375ea426768a6e37faf876b2b06f0bf781a6Theodore Ts'o#define ORACLE_ASM_DISK_LABEL_OFFSET    32
3882c92375ea426768a6e37faf876b2b06f0bf781a6Theodore Ts'o
3893de5bf61060634c5c8c3a0d231e8a7246094a2c2Theodore Ts'ostruct iso_volume_descriptor {
39045a3fa873852ce407b5eda0f764c63bab04e4c0cTheodore Ts'o	unsigned char	vd_type;
39145a3fa873852ce407b5eda0f764c63bab04e4c0cTheodore Ts'o	unsigned char	vd_id[5];
39245a3fa873852ce407b5eda0f764c63bab04e4c0cTheodore Ts'o	unsigned char	vd_version;
39345a3fa873852ce407b5eda0f764c63bab04e4c0cTheodore Ts'o	unsigned char	flags;
39445a3fa873852ce407b5eda0f764c63bab04e4c0cTheodore Ts'o	unsigned char	system_id[32];
39545a3fa873852ce407b5eda0f764c63bab04e4c0cTheodore Ts'o	unsigned char	volume_id[32];
39645a3fa873852ce407b5eda0f764c63bab04e4c0cTheodore Ts'o	unsigned char	unused[8];
39745a3fa873852ce407b5eda0f764c63bab04e4c0cTheodore Ts'o	unsigned char	space_size[8];
39845a3fa873852ce407b5eda0f764c63bab04e4c0cTheodore Ts'o	unsigned char	escape_sequences[8];
3993de5bf61060634c5c8c3a0d231e8a7246094a2c2Theodore Ts'o};
4003de5bf61060634c5c8c3a0d231e8a7246094a2c2Theodore Ts'o
401b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak/* Common gfs/gfs2 constants: */
402b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak#define GFS_MAGIC               0x01161970
403b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak#define GFS_DEFAULT_BSIZE       4096
404b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak#define GFS_SUPERBLOCK_OFFSET	(0x10 * GFS_DEFAULT_BSIZE)
405b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak#define GFS_METATYPE_SB         1
406b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak#define GFS_FORMAT_SB           100
407b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak#define GFS_LOCKNAME_LEN        64
408b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak
409b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak/* gfs1 constants: */
410b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak#define GFS_FORMAT_FS           1309
411b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak#define GFS_FORMAT_MULTI        1401
412b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak/* gfs2 constants: */
413b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak#define GFS2_FORMAT_FS          1801
414b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak#define GFS2_FORMAT_MULTI       1900
415b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak
416b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zakstruct gfs2_meta_header {
417b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak	__u32 mh_magic;
418b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak	__u32 mh_type;
419b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak	__u64 __pad0;          /* Was generation number in gfs1 */
420b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak	__u32 mh_format;
421b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak	__u32 __pad1;          /* Was incarnation number in gfs1 */
422b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak};
423b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak
424b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zakstruct gfs2_inum {
425b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak	__u64 no_formal_ino;
426b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak	__u64 no_addr;
427b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak};
428b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak
429b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zakstruct gfs2_sb {
430b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak	struct gfs2_meta_header sb_header;
431b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak
432b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak	__u32 sb_fs_format;
433b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak	__u32 sb_multihost_format;
434b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak	__u32  __pad0;  /* Was superblock flags in gfs1 */
435efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o
436b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak	__u32 sb_bsize;
437b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak	__u32 sb_bsize_shift;
438b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak	__u32 __pad1;   /* Was journal segment size in gfs1 */
439efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o
440b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak	struct gfs2_inum sb_master_dir; /* Was jindex dinode in gfs1 */
441b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak	struct gfs2_inum __pad2; /* Was rindex dinode in gfs1 */
442b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak	struct gfs2_inum sb_root_dir;
443efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o
444b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak	char sb_lockproto[GFS_LOCKNAME_LEN];
445b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak	char sb_locktable[GFS_LOCKNAME_LEN];
446b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak	/* In gfs1, quota and license dinodes followed */
447b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak};
448b5517ca6678d590b52f38ad701fbaf6c9716b73dKarel Zak
449cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'ostruct ntfs_super_block {
450cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u8	jump[3];
451cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u8	oem_id[8];
452cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u8	bios_parameter_block[25];
453cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u16	unused[2];
454cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u64	number_of_sectors;
455cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u64	mft_cluster_location;
456cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u64	mft_mirror_cluster_location;
457cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__s8	cluster_per_mft_record;
458cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u8	reserved1[3];
459cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__s8	cluster_per_index_record;
460cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u8	reserved2[3];
461cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u64	volume_serial;
462cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u16	checksum;
463cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o};
464cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o
465cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'ostruct master_file_table_record {
466cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u32	magic;
467cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u16	usa_ofs;
468cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u16	usa_count;
469cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u64	lsn;
470cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u16	sequence_number;
471cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u16	link_count;
472cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u16	attrs_offset;
473cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u16	flags;
474cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u32	bytes_in_use;
475cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u32	bytes_allocated;
476cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o} __attribute__((__packed__));
477cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o
478cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'ostruct file_attribute {
479cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u32	type;
480cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u32	len;
481cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u8	non_resident;
482cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u8	name_len;
483cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u16	name_offset;
484cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u16	flags;
485cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u16	instance;
486cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u32	value_len;
487cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o	__u16	value_offset;
488cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o} __attribute__((__packed__));
489cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o
490cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o#define MFT_RECORD_VOLUME			3
491cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o#define MFT_RECORD_ATTR_VOLUME_NAME		0x60
492cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o#define MFT_RECORD_ATTR_VOLUME_INFO		0x70
493cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o#define MFT_RECORD_ATTR_OBJECT_ID		0x40
494cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o#define MFT_RECORD_ATTR_END			0xffffffffu
495cb0c5d701a8852f72fe75c9bd223643fb5222399Theodore Ts'o
49669d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o/* HFS / HFS+ */
49769d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'ostruct hfs_finder_info {
49869d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u32        boot_folder;
49969d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u32        start_app;
50069d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u32        open_folder;
50169d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u32        os9_folder;
50269d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u32        reserved;
50369d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u32        osx_folder;
50469d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u8         id[8];
50569d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o} __attribute__((packed));
50669d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o
50769d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'ostruct hfs_mdb {
50869d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u8         signature[2];
50969d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u32        cr_date;
51069d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u32        ls_Mod;
51169d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u16        atrb;
51269d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u16        nm_fls;
51369d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u16        vbm_st;
51469d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u16        alloc_ptr;
51569d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u16        nm_al_blks;
51669d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u32        al_blk_size;
51769d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u32        clp_size;
51869d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u16        al_bl_st;
51969d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u32        nxt_cnid;
52069d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u16        free_bks;
52169d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u8         label_len;
52269d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u8         label[27];
52369d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u32        vol_bkup;
52469d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u16        vol_seq_num;
52569d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u32        wr_cnt;
52669d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u32        xt_clump_size;
52769d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u32        ct_clump_size;
52869d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u16        num_root_dirs;
52969d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u32        file_count;
53069d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u32        dir_count;
53169d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        struct hfs_finder_info finder_info;
53269d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u8         embed_sig[2];
53369d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u16        embed_startblock;
53469d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o        __u16        embed_blockcount;
53569d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o} __attribute__((packed));
53669d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o
5379c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o
5389c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o#define HFS_NODE_LEAF			0xff
5399c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o#define HFSPLUS_POR_CNID		1
5409c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o
5419c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'ostruct hfsplus_bnode_descriptor {
5429c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		next;
5439c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		prev;
5449c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u8		type;
5459c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u8		height;
5469c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u16		num_recs;
5479c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u16		reserved;
5489c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o} __attribute__((packed));
5499c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o
5509c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'ostruct hfsplus_bheader_record {
5519c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u16		depth;
5529c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		root;
5539c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		leaf_count;
5549c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		leaf_head;
5559c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		leaf_tail;
5569c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u16		node_size;
5579c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o} __attribute__((packed));
5589c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o
5599c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'ostruct hfsplus_catalog_key {
5609c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u16	key_len;
5619c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32	parent_id;
5629c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u16	unicode_len;
5639c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u8		unicode[255 * 2];
5649c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o} __attribute__((packed));
5659c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o
5669c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'ostruct hfsplus_extent {
5679c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		start_block;
5689c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		block_count;
5699c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o} __attribute__((packed));
5709c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o
5719c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o#define HFSPLUS_EXTENT_COUNT		8
5729c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'ostruct hfsplus_fork {
5739c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u64		total_size;
5749c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		clump_size;
5759c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		total_blocks;
5769c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	struct hfsplus_extent extents[HFSPLUS_EXTENT_COUNT];
5779c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o} __attribute__((packed));
5789c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o
5799c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'ostruct hfsplus_vol_header {
5809c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u8		signature[2];
5819c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u16		version;
5829c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		attributes;
5839c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		last_mount_vers;
5849c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		reserved;
5859c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		create_date;
5869c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		modify_date;
5879c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		backup_date;
5889c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		checked_date;
5899c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		file_count;
5909c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		folder_count;
5919c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		blocksize;
5929c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		total_blocks;
5939c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		free_blocks;
5949c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		next_alloc;
5959c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		rsrc_clump_sz;
5969c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		data_clump_sz;
5979c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		next_cnid;
5989c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u32		write_count;
5999c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	__u64		encodings_bmp;
6009c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	struct hfs_finder_info finder_info;
6019c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	struct hfsplus_fork alloc_file;
6029c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	struct hfsplus_fork ext_file;
6039c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	struct hfsplus_fork cat_file;
6049c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	struct hfsplus_fork attr_file;
6059c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o	struct hfsplus_fork start_file;
6069c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o}  __attribute__((packed));
6079c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o
6089c460caae3dab7803c0e7d9399b47e790cf90661Theodore Ts'o
609a451d92f38188f7218a837a395b310354864b5a4Eric Sandeen/* this is lvm's label_header & pv_header combined. */
610a451d92f38188f7218a837a395b310354864b5a4Eric Sandeen
611a451d92f38188f7218a837a395b310354864b5a4Eric Sandeen#define LVM2_ID_LEN 32
612a451d92f38188f7218a837a395b310354864b5a4Eric Sandeen
613a451d92f38188f7218a837a395b310354864b5a4Eric Sandeenstruct lvm2_pv_label_header {
614a451d92f38188f7218a837a395b310354864b5a4Eric Sandeen	/* label_header */
615a451d92f38188f7218a837a395b310354864b5a4Eric Sandeen	__u8	id[8];		/* LABELONE */
616a451d92f38188f7218a837a395b310354864b5a4Eric Sandeen	__u64	sector_xl;	/* Sector number of this label */
617a451d92f38188f7218a837a395b310354864b5a4Eric Sandeen	__u32	crc_xl;		/* From next field to end of sector */
618a451d92f38188f7218a837a395b310354864b5a4Eric Sandeen	__u32	offset_xl;	/* Offset from start of struct to contents */
619a451d92f38188f7218a837a395b310354864b5a4Eric Sandeen	__u8	type[8];	/* LVM2 001 */
620a451d92f38188f7218a837a395b310354864b5a4Eric Sandeen	/* pv_header */
621a451d92f38188f7218a837a395b310354864b5a4Eric Sandeen	__u8	pv_uuid[LVM2_ID_LEN];
622a451d92f38188f7218a837a395b310354864b5a4Eric Sandeen} __attribute__ ((packed));
62369d742284d083c8f6ce7d9240019e21f2fbd9ed5Theodore Ts'o
624801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
625801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen/*
626801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen * this is a very generous portion of the super block, giving us
627801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen * room to translate 14 chunks with 3 stripes each.
628801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen */
629801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen#define BTRFS_SYSTEM_CHUNK_ARRAY_SIZE 2048
630801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen#define BTRFS_LABEL_SIZE 256
631801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen#define BTRFS_UUID_SIZE 16
632801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen#define BTRFS_FSID_SIZE 16
633801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen#define BTRFS_CSUM_SIZE 32
634801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
635801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeenstruct btrfs_dev_item {
636801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	/* the internal btrfs device id */
637801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 devid;
638801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
639801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	/* size of the device */
640801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 total_bytes;
641801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
642801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	/* bytes used */
643801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 bytes_used;
644801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
645801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	/* optimal io alignment for this device */
646801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u32 io_align;
647801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
648801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	/* optimal io width for this device */
649801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u32 io_width;
650801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
651801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	/* minimal io size for this device */
652801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u32 sector_size;
653801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
654801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	/* type and info about this device */
655801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 type;
656801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
657801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	/* expected generation for this device */
658801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 generation;
659801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
660801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	/*
661801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	 * starting byte of this partition on the device,
662801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	 * to allowr for stripe alignment in the future
663801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	 */
664801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 start_offset;
665801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
666801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	/* grouping information for allocation decisions */
667801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u32 dev_group;
668801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
669801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	/* seek speed 0-100 where 100 is fastest */
670801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u8 seek_speed;
671801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
672801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	/* bandwidth 0-100 where 100 is fastest */
673801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u8 bandwidth;
674801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
675801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	/* btrfs generated uuid for this device */
676801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u8 uuid[BTRFS_UUID_SIZE];
677801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
678801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	/* uuid of FS who owns this device */
679801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u8 fsid[BTRFS_UUID_SIZE];
680801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen} __attribute__ ((__packed__));
681801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
682801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen/*
683801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen * the super block basically lists the main trees of the FS
684801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen * it currently lacks any block count etc etc
685801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen */
686801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeenstruct btrfs_super_block {
687801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u8 csum[BTRFS_CSUM_SIZE];
688801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	/* the first 3 fields must match struct btrfs_header */
689801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u8 fsid[BTRFS_FSID_SIZE];    /* FS specific uuid */
690801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 bytenr; /* this block number */
691801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 flags;
692801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
693801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	/* allowed to be different from the btrfs_header from here own down */
694801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 magic;
695801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 generation;
696801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 root;
697801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 chunk_root;
698801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 log_root;
699801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
700801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	/* this will help find the new super based on the log root */
701801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 log_root_transid;
702801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 total_bytes;
703801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 bytes_used;
704801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 root_dir_objectid;
705801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 num_devices;
706801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u32 sectorsize;
707801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u32 nodesize;
708801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u32 leafsize;
709801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u32 stripesize;
710801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u32 sys_chunk_array_size;
711801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 chunk_root_generation;
712801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 compat_flags;
713801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 compat_ro_flags;
714801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 incompat_flags;
715801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u16 csum_type;
716801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u8 root_level;
717801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u8 chunk_root_level;
718801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u8 log_root_level;
719801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	struct btrfs_dev_item dev_item;
720801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
721801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	char label[BTRFS_LABEL_SIZE];
722801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
723801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	/* future expansion */
724801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u64 reserved[32];
725801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen	__u8 sys_chunk_array[BTRFS_SYSTEM_CHUNK_ARRAY_SIZE];
726801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen} __attribute__ ((__packed__));
727801b0053336cc5fe5b3447ddad58505352a6578eEric Sandeen
72876b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o/*
72976b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o * Byte swap functions
73076b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o */
73176b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#ifdef __GNUC__
732ed78c021c3b111d8ab9a51aef5d5156e3004083fTheodore Ts'o#define _INLINE_ static __inline__
73376b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#else				/* For Watcom C */
734ed78c021c3b111d8ab9a51aef5d5156e3004083fTheodore Ts'o#define _INLINE_ static inline
73576b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#endif
73676b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o
737ed78c021c3b111d8ab9a51aef5d5156e3004083fTheodore Ts'ostatic __u16 blkid_swab16(__u16 val);
738ed78c021c3b111d8ab9a51aef5d5156e3004083fTheodore Ts'ostatic __u32 blkid_swab32(__u32 val);
739ed78c021c3b111d8ab9a51aef5d5156e3004083fTheodore Ts'ostatic __u64 blkid_swab64(__u64 val);
74050b380b4d4ab668bad45033e3a8aaf93c7f42844Theodore Ts'o
74176b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#if ((defined __GNUC__) && \
74276b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o     (defined(__i386__) || defined(__i486__) || defined(__i586__)))
74376b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o
74476b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define _BLKID_HAVE_ASM_BITOPS_
74576b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o
74676b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o_INLINE_ __u32 blkid_swab32(__u32 val)
74776b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o{
74876b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#ifdef EXT2FS_REQUIRE_486
74976b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o	__asm__("bswap %0" : "=r" (val) : "0" (val));
750e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o#else
75176b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o	__asm__("xchgb %b0,%h0\n\t"	/* swap lower bytes	*/
75276b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o		"rorl $16,%0\n\t"	/* swap words		*/
75376b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o		"xchgb %b0,%h0"		/* swap higher bytes	*/
75476b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o		:"=q" (val)
75576b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o		: "0" (val));
75676b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#endif
75776b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o	return val;
75876b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o}
75976b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o
76076b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o_INLINE_ __u16 blkid_swab16(__u16 val)
76176b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o{
76276b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o	__asm__("xchgb %b0,%h0"		/* swap bytes		*/ \
76376b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o		: "=q" (val) \
76476b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o		:  "0" (val)); \
76576b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o		return val;
76676b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o}
76776b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o
76876b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o_INLINE_ __u64 blkid_swab64(__u64 val)
76976b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o{
77076b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o	return (blkid_swab32(val >> 32) |
77176b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o		(((__u64) blkid_swab32(val & 0xFFFFFFFFUL)) << 32));
77276b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o}
773e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o#endif
77476b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o
77576b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#if !defined(_BLKID_HAVE_ASM_BITOPS_)
77676b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o
77776b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o_INLINE_  __u16 blkid_swab16(__u16 val)
77876b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o{
77976b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o	return (val >> 8) | (val << 8);
78076b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o}
78176b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o
78276b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o_INLINE_ __u32 blkid_swab32(__u32 val)
78376b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o{
78476b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o	return ((val>>24) | ((val>>8)&0xFF00) |
78576b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o		((val<<8)&0xFF0000) | (val<<24));
78676b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o}
78776b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o
788ed78c021c3b111d8ab9a51aef5d5156e3004083fTheodore Ts'o_INLINE_ __u64 blkid_swab64(__u64 val)
78976b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o{
79076b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o	return (blkid_swab32(val >> 32) |
79176b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o		(((__u64) blkid_swab32(val & 0xFFFFFFFFUL)) << 32));
79276b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o}
793efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o#endif
79476b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o
79576b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o
79676b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o
797bdc3514af41b5fbfea16c5192d5aade1da641cf4Matthias Andree#ifdef WORDS_BIGENDIAN
79876b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_le16(x) blkid_swab16(x)
79976b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_le32(x) blkid_swab32(x)
80076b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_le64(x) blkid_swab64(x)
80176b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_be16(x) (x)
80276b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_be32(x) (x)
80376b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_be64(x) (x)
80476b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#else
80576b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_le16(x) (x)
80676b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_le32(x) (x)
80776b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_le64(x) (x)
80876b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_be16(x) blkid_swab16(x)
80976b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_be32(x) blkid_swab32(x)
81076b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_be64(x) blkid_swab64(x)
811e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o#endif
812e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o
813ed78c021c3b111d8ab9a51aef5d5156e3004083fTheodore Ts'o#undef _INLINE_
814ed78c021c3b111d8ab9a51aef5d5156e3004083fTheodore Ts'o
815e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o#endif /* _BLKID_PROBE_H */
816