1 (* Benchmark parsing of an ext3 superblock.
7 let bits = Bitstring.bitstring_of_file "examples/ext3_sb"
11 | { s_inodes_count : 32 : littleendian; (* Inodes count *)
12 s_blocks_count : 32 : littleendian; (* Blocks count *)
13 s_r_blocks_count : 32 : littleendian; (* Reserved blocks count *)
14 s_free_blocks_count : 32 : littleendian; (* Free blocks count *)
15 s_free_inodes_count : 32 : littleendian; (* Free inodes count *)
16 s_first_data_block : 32 : littleendian; (* First Data Block *)
17 s_log_block_size : 32 : littleendian; (* Block size *)
18 s_log_frag_size : 32 : littleendian; (* Fragment size *)
19 s_blocks_per_group : 32 : littleendian; (* # Blocks per group *)
20 s_frags_per_group : 32 : littleendian; (* # Fragments per group *)
21 s_inodes_per_group : 32 : littleendian; (* # Inodes per group *)
22 s_mtime : 32 : littleendian; (* Mount time *)
23 s_wtime : 32 : littleendian; (* Write time *)
24 s_mnt_count : 16 : littleendian; (* Mount count *)
25 s_max_mnt_count : 16 : littleendian; (* Maximal mount count *)
26 0xef53 : 16 : littleendian; (* Magic signature *)
27 s_state : 16 : littleendian; (* File system state *)
28 s_errors : 16 : littleendian; (* Behaviour when detecting errors *)
29 s_minor_rev_level : 16 : littleendian; (* minor revision level *)
30 s_lastcheck : 32 : littleendian; (* time of last check *)
31 s_checkinterval : 32 : littleendian; (* max. time between checks *)
32 s_creator_os : 32 : littleendian; (* OS *)
33 s_rev_level : 32 : littleendian; (* Revision level *)
34 s_def_resuid : 16 : littleendian; (* Default uid for reserved blocks *)
35 s_def_resgid : 16 : littleendian; (* Default gid for reserved blocks *)
36 s_first_ino : 32 : littleendian; (* First non-reserved inode *)
37 s_inode_size : 16 : littleendian; (* size of inode structure *)
38 s_block_group_nr : 16 : littleendian; (* block group # of this superblock *)
39 s_feature_compat : 32 : littleendian; (* compatible feature set *)
40 s_feature_incompat : 32 : littleendian; (* incompatible feature set *)
41 s_feature_ro_compat : 32 : littleendian; (* readonly-compatible feature set *)
42 s_uuid : 128 : string; (* 128-bit uuid for volume *)
43 s_volume_name : 128 : string; (* volume name *)
44 s_last_mounted : 512 : string; (* directory where last mounted *)
45 s_algorithm_usage_bitmap : 32 : littleendian; (* For compression *)
46 s_prealloc_blocks : 8; (* Nr of blocks to try to preallocate*)
47 s_prealloc_dir_blocks : 8; (* Nr to preallocate for dirs *)
48 s_reserved_gdt_blocks : 16 : littleendian;(* Per group desc for online growth *)
49 s_journal_uuid : 128 : string; (* uuid of journal superblock *)
50 s_journal_inum : 32 : littleendian; (* inode number of journal file *)
51 s_journal_dev : 32 : littleendian; (* device number of journal file *)
52 s_last_orphan : 32 : littleendian; (* start of list of inodes to delete *)
53 s_hash_seed0 : 32 : littleendian; (* HTREE hash seed *)
54 s_hash_seed1 : 32 : littleendian;
55 s_hash_seed2 : 32 : littleendian;
56 s_hash_seed3 : 32 : littleendian;
57 s_def_hash_version : 8; (* Default hash version to use *)
58 s_reserved_char_pad : 8;
59 s_reserved_word_pad : 16 : littleendian;
60 s_default_mount_opts : 32 : littleendian;
61 s_first_meta_bg : 32 : littleendian; (* First metablock block group *)
62 _ : 6080 : bitstring } -> (* Padding to the end of the block *)
67 eprintf "not an ext3 superblock!\n%!";
71 for i = 0 to 2_000_000 do