xref: /trueos/sys/gnu/fs/reiserfs/reiserfs_fs_sb.h (revision 94d2b7f64912987093f1a98573737a32e4e5d8d1)
1 /*
2  * Copyright 2000 Hans Reiser
3  * See README for licensing and copyright details
4  *
5  * Ported to FreeBSD by Jean-Sébastien Pédron <jspedron@club-internet.fr>
6  *
7  * $FreeBSD$
8  */
9 
10 #ifndef _GNU_REISERFS_REISERFS_FS_SB_H
11 #define _GNU_REISERFS_REISERFS_FS_SB_H
12 
13 typedef uint32_t (*hashf_t)(const signed char *, int);
14 
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))
20 
21 /* Bitmaps */
22 struct reiserfs_bitmap_info {
23 	uint16_t	 first_zero_hint;
24 	uint16_t	 free_count;
25 	//struct buf	*bp;      /* The actual bitmap */
26 	caddr_t		 bp_data; /* The actual bitmap */
27 };
28 
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;
34 
35 	unsigned short	 s_mount_state;
36 
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
41 						  are set here */
42 	int		 s_generation_counter; /* Increased by one every
43 						  time the tree gets
44 						  re-balanced */
45 	unsigned long	 s_properties;         /* File system properties.
46 						  Currently holds on-disk
47 						  FS format */
48 	uint16_t	 s_blocksize;
49 	uint16_t	 s_blocksize_bits;
50 	char		 s_rd_only;            /* Is it read-only ? */
51 	int		 s_is_unlinked_ok;
52 };
53 
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))
56 
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))
59 
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))
64 
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))
67 
68 /* Definitions of reiserfs on-disk properties: */
69 #define REISERFS_3_5	0
70 #define REISERFS_3_6	1
71 
72 enum reiserfs_mount_options {
73 	/* 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
81 				of 3.5.x */
82 
83 	/*
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.
91 	 */
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 */
96 
97 	REISERFS_DATA_LOG,
98 	REISERFS_DATA_ORDERED,
99 	REISERFS_DATA_WRITEBACK,
100 
101 	/*
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)
105 	 */
106 
107 	REISERFS_NO_BORDER,
108 	REISERFS_NO_UNHASHED_RELOCATION,
109 	REISERFS_HASHED_RELOCATION,
110 	REISERFS_ATTRS,
111 	REISERFS_XATTRS,
112 	REISERFS_XATTRS_USER,
113 	REISERFS_POSIXACL,
114 
115 	REISERFS_TEST1,
116 	REISERFS_TEST2,
117 	REISERFS_TEST3,
118 	REISERFS_TEST4,
119 };
120 
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))
129 
130 #define reiserfs_attrs(sbi)						\
131     (REISERFS_SB(sbi)->s_mount_opt & (1 << REISERFS_ATTRS))
132 
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))
139 
140 #define SB_BUFFER_WITH_SB(sbi)	(REISERFS_SB(sbi)->s_sbh)
141 #define SB_AP_BITMAP(sbi)	(REISERFS_SB(sbi)->s_ap_bitmap)
142 
143 #endif /* !defined _GNU_REISERFS_REISERFS_FS_SB_H */
144