2 * Copyright 2000 Hans Reiser
3 * See README for licensing and copyright details
5 * Ported to FreeBSD by Jean-Sébastien Pédron <jspedron@club-internet.fr>
10 #ifndef _GNU_REISERFS_REISERFS_FS_SB_H
11 #define _GNU_REISERFS_REISERFS_FS_SB_H
13 typedef uint32_t (*hashf_t)(const signed char *, int);
15 #define sb_block_count(sbp) (le32toh((sbp)->s_v1.s_block_count))
16 #define set_sb_block_count(sbp,v) ((sbp)->s_v1.s_block_count = htole32(v))
17 #define sb_free_blocks(sbp) (le32toh((sbp)->s_v1.s_free_blocks))
18 #define set_sb_free_blocks(sbp,v) ((sbp)->s_v1.s_free_blocks = htole32(v))
19 #define sb_root_block(sbp) (le32toh((sbp)->s_v1.s_root_block))
22 struct reiserfs_bitmap_info {
23 uint16_t first_zero_hint;
25 //struct buf *bp; /* The actual bitmap */
26 caddr_t bp_data; /* The actual bitmap */
29 /* ReiserFS union of in-core super block data */
30 struct reiserfs_sb_info {
31 struct reiserfs_super_block *s_rs;
32 struct reiserfs_bitmap_info *s_ap_bitmap;
33 struct vnode *s_devvp;
35 unsigned short s_mount_state;
37 hashf_t s_hash_function; /* Pointer to function which
38 is used to sort names in
39 directory. Set on mount */
40 unsigned long s_mount_opt; /* ReiserFS's mount options
42 int s_generation_counter; /* Increased by one every
45 unsigned long s_properties; /* File system properties.
46 Currently holds on-disk
49 uint16_t s_blocksize_bits;
50 char s_rd_only; /* Is it read-only ? */
54 #define sb_version(sbi) (le16toh((sbi)->s_v1.s_version))
55 #define set_sb_version(sbi, v) ((sbi)->s_v1.s_version = htole16(v))
57 #define sb_blocksize(sbi) (le16toh((sbi)->s_v1.s_blocksize))
58 #define set_sb_blocksize(sbi, v) ((sbi)->s_v1.s_blocksize = htole16(v))
60 #define sb_hash_function_code(sbi) \
61 (le32toh((sbi)->s_v1.s_hash_function_code))
62 #define set_sb_hash_function_code(sbi, v) \
63 ((sbi)->s_v1.s_hash_function_code = htole32(v))
65 #define sb_bmap_nr(sbi) (le16toh((sbi)->s_v1.s_bmap_nr))
66 #define set_sb_bmap_nr(sbi, v) ((sbi)->s_v1.s_bmap_nr = htole16(v))
68 /* Definitions of reiserfs on-disk properties: */
69 #define REISERFS_3_5 0
70 #define REISERFS_3_6 1
72 enum reiserfs_mount_options {
74 REISERFS_LARGETAIL, /* Large tails will be created in a session */
75 REISERFS_SMALLTAIL, /* Small (for files less than block size) tails
76 will be created in a session */
77 REPLAYONLY, /* Replay journal and return 0. Use by fsck */
78 REISERFS_CONVERT, /* -o conv: causes conversion of old format super
79 block to the new format. If not specified -
80 old partition will be dealt with in a manner
84 * -o hash={tea, rupasov, r5, detect} is meant for properly mounting
85 * reiserfs disks from 3.5.19 or earlier. 99% of the time, this option
86 * is not required. If the normal autodection code can't determine
87 * which hash to use (because both hases had the same value for a
88 * file) use this option to force a specific hash. It won't allow you
89 * to override the existing hash on the FS, so if you have a tea hash
90 * disk, and mount with -o hash=rupasov, the mount will fail.
92 FORCE_TEA_HASH, /* try to force tea hash on mount */
93 FORCE_RUPASOV_HASH, /* try to force rupasov hash on mount */
94 FORCE_R5_HASH, /* try to force rupasov hash on mount */
95 FORCE_HASH_DETECT, /* try to detect hash function on mount */
98 REISERFS_DATA_ORDERED,
99 REISERFS_DATA_WRITEBACK,
102 * used for testing experimental features, makes benchmarking new
103 * features with and without more convenient, should never be used by
104 * users in any code shipped to users (ideally)
108 REISERFS_NO_UNHASHED_RELOCATION,
109 REISERFS_HASHED_RELOCATION,
112 REISERFS_XATTRS_USER,
121 #define reiserfs_r5_hash(sbi) \
122 (REISERFS_SB(sbi)->s_mount_opt & (1 << FORCE_R5_HASH))
123 #define reiserfs_rupasov_hash(sbi) \
124 (REISERFS_SB(sbi)->s_mount_opt & (1 << FORCE_RUPASOV_HASH))
125 #define reiserfs_tea_hash(sbi) \
126 (REISERFS_SB(sbi)->s_mount_opt & (1 << FORCE_TEA_HASH))
127 #define reiserfs_hash_detect(sbi) \
128 (REISERFS_SB(sbi)->s_mount_opt & (1 << FORCE_HASH_DETECT))
130 #define reiserfs_attrs(sbi) \
131 (REISERFS_SB(sbi)->s_mount_opt & (1 << REISERFS_ATTRS))
133 #define reiserfs_data_log(sbi) \
134 (REISERFS_SB(sbi)->s_mount_opt & (1 << REISERFS_DATA_LOG))
135 #define reiserfs_data_ordered(sbi) \
136 (REISERFS_SB(sbi)->s_mount_opt & (1 << REISERFS_DATA_ORDERED))
137 #define reiserfs_data_writeback(sbi) \
138 (REISERFS_SB(sbi)->s_mount_opt & (1 << REISERFS_DATA_WRITEBACK))
140 #define SB_BUFFER_WITH_SB(sbi) (REISERFS_SB(sbi)->s_sbh)
141 #define SB_AP_BITMAP(sbi) (REISERFS_SB(sbi)->s_ap_bitmap)
143 #endif /* !defined _GNU_REISERFS_REISERFS_FS_SB_H */