1147476Sdumbbell/*
2147476Sdumbbell * Copyright 2000 Hans Reiser
3147476Sdumbbell * See README for licensing and copyright details
4147476Sdumbbell *
5230132Suqs * Ported to FreeBSD by Jean-S��bastien P��dron <jspedron@club-internet.fr>
6147476Sdumbbell *
7147476Sdumbbell * $FreeBSD: releng/10.2/sys/gnu/fs/reiserfs/reiserfs_fs_sb.h 230132 2012-01-15 13:23:18Z uqs $
8147476Sdumbbell */
9147476Sdumbbell
10147476Sdumbbell#ifndef _GNU_REISERFS_REISERFS_FS_SB_H
11147476Sdumbbell#define _GNU_REISERFS_REISERFS_FS_SB_H
12147476Sdumbbell
13147476Sdumbbelltypedef uint32_t (*hashf_t)(const signed char *, int);
14147476Sdumbbell
15147476Sdumbbell#define sb_block_count(sbp)		(le32toh((sbp)->s_v1.s_block_count))
16147476Sdumbbell#define set_sb_block_count(sbp,v)	((sbp)->s_v1.s_block_count = htole32(v))
17147476Sdumbbell#define sb_free_blocks(sbp)		(le32toh((sbp)->s_v1.s_free_blocks))
18147476Sdumbbell#define set_sb_free_blocks(sbp,v)	((sbp)->s_v1.s_free_blocks = htole32(v))
19147476Sdumbbell#define sb_root_block(sbp)		(le32toh((sbp)->s_v1.s_root_block))
20147476Sdumbbell
21147476Sdumbbell/* Bitmaps */
22147476Sdumbbellstruct reiserfs_bitmap_info {
23147476Sdumbbell	uint16_t	 first_zero_hint;
24147476Sdumbbell	uint16_t	 free_count;
25147476Sdumbbell	//struct buf	*bp;      /* The actual bitmap */
26147476Sdumbbell	caddr_t		 bp_data; /* The actual bitmap */
27147476Sdumbbell};
28147476Sdumbbell
29147476Sdumbbell/* ReiserFS union of in-core super block data */
30147476Sdumbbellstruct reiserfs_sb_info {
31147476Sdumbbell	struct reiserfs_super_block *s_rs;
32147476Sdumbbell	struct reiserfs_bitmap_info *s_ap_bitmap;
33147476Sdumbbell	struct vnode	*s_devvp;
34147476Sdumbbell
35147476Sdumbbell	unsigned short	 s_mount_state;
36147476Sdumbbell
37147476Sdumbbell	hashf_t		 s_hash_function;      /* Pointer to function which
38147476Sdumbbell						  is used to sort names in
39147476Sdumbbell						  directory. Set on mount */
40147476Sdumbbell	unsigned long	 s_mount_opt;          /* ReiserFS's mount options
41147476Sdumbbell						  are set here */
42147476Sdumbbell	int		 s_generation_counter; /* Increased by one every
43147476Sdumbbell						  time the tree gets
44147476Sdumbbell						  re-balanced */
45147476Sdumbbell	unsigned long	 s_properties;         /* File system properties.
46147476Sdumbbell						  Currently holds on-disk
47147476Sdumbbell						  FS format */
48147476Sdumbbell	uint16_t	 s_blocksize;
49147476Sdumbbell	uint16_t	 s_blocksize_bits;
50147476Sdumbbell	char		 s_rd_only;            /* Is it read-only ? */
51147476Sdumbbell	int		 s_is_unlinked_ok;
52147476Sdumbbell};
53147476Sdumbbell
54147476Sdumbbell#define sb_version(sbi)			(le16toh((sbi)->s_v1.s_version))
55147476Sdumbbell#define set_sb_version(sbi, v)		((sbi)->s_v1.s_version = htole16(v))
56147476Sdumbbell
57147476Sdumbbell#define sb_blocksize(sbi)		(le16toh((sbi)->s_v1.s_blocksize))
58147476Sdumbbell#define set_sb_blocksize(sbi, v)	((sbi)->s_v1.s_blocksize = htole16(v))
59147476Sdumbbell
60147476Sdumbbell#define sb_hash_function_code(sbi)					\
61147476Sdumbbell    (le32toh((sbi)->s_v1.s_hash_function_code))
62147476Sdumbbell#define set_sb_hash_function_code(sbi, v)				\
63147476Sdumbbell    ((sbi)->s_v1.s_hash_function_code = htole32(v))
64147476Sdumbbell
65147476Sdumbbell#define sb_bmap_nr(sbi)		(le16toh((sbi)->s_v1.s_bmap_nr))
66147476Sdumbbell#define set_sb_bmap_nr(sbi, v)	((sbi)->s_v1.s_bmap_nr = htole16(v))
67147476Sdumbbell
68147476Sdumbbell/* Definitions of reiserfs on-disk properties: */
69147476Sdumbbell#define REISERFS_3_5	0
70147476Sdumbbell#define REISERFS_3_6	1
71147476Sdumbbell
72147476Sdumbbellenum reiserfs_mount_options {
73147476Sdumbbell	/* Mount options */
74147476Sdumbbell	REISERFS_LARGETAIL,  /* Large tails will be created in a session */
75147476Sdumbbell	REISERFS_SMALLTAIL,  /* Small (for files less than block size) tails
76147476Sdumbbell				will be created in a session */
77147476Sdumbbell	REPLAYONLY,          /* Replay journal and return 0. Use by fsck */
78147476Sdumbbell	REISERFS_CONVERT,    /* -o conv: causes conversion of old format super
79147476Sdumbbell				block to the new format. If not specified -
80147476Sdumbbell				old partition will be dealt with in a manner
81147476Sdumbbell				of 3.5.x */
82147476Sdumbbell
83147476Sdumbbell	/*
84147476Sdumbbell	 * -o hash={tea, rupasov, r5, detect} is meant for properly mounting
85147476Sdumbbell	 * reiserfs disks from 3.5.19 or earlier. 99% of the time, this option
86147476Sdumbbell	 * is not required. If the normal autodection code can't determine
87147476Sdumbbell	 * which hash to use (because both hases had the same value for a
88147476Sdumbbell	 * file) use this option to force a specific hash. It won't allow you
89147476Sdumbbell	 * to override the existing hash on the FS, so if you have a tea hash
90147476Sdumbbell	 * disk, and mount with -o hash=rupasov, the mount will fail.
91147476Sdumbbell	 */
92147476Sdumbbell	FORCE_TEA_HASH,      /* try to force tea hash on mount */
93147476Sdumbbell	FORCE_RUPASOV_HASH,  /* try to force rupasov hash on mount */
94147476Sdumbbell	FORCE_R5_HASH,       /* try to force rupasov hash on mount */
95147476Sdumbbell	FORCE_HASH_DETECT,   /* try to detect hash function on mount */
96147476Sdumbbell
97147476Sdumbbell	REISERFS_DATA_LOG,
98147476Sdumbbell	REISERFS_DATA_ORDERED,
99147476Sdumbbell	REISERFS_DATA_WRITEBACK,
100147476Sdumbbell
101147476Sdumbbell	/*
102147476Sdumbbell	 * used for testing experimental features, makes benchmarking new
103147476Sdumbbell	 * features with and without more convenient, should never be used by
104147476Sdumbbell	 * users in any code shipped to users (ideally)
105147476Sdumbbell	 */
106147476Sdumbbell
107147476Sdumbbell	REISERFS_NO_BORDER,
108147476Sdumbbell	REISERFS_NO_UNHASHED_RELOCATION,
109147476Sdumbbell	REISERFS_HASHED_RELOCATION,
110147476Sdumbbell	REISERFS_ATTRS,
111147476Sdumbbell	REISERFS_XATTRS,
112147476Sdumbbell	REISERFS_XATTRS_USER,
113147476Sdumbbell	REISERFS_POSIXACL,
114147476Sdumbbell
115147476Sdumbbell	REISERFS_TEST1,
116147476Sdumbbell	REISERFS_TEST2,
117147476Sdumbbell	REISERFS_TEST3,
118147476Sdumbbell	REISERFS_TEST4,
119147476Sdumbbell};
120147476Sdumbbell
121147476Sdumbbell#define reiserfs_r5_hash(sbi)						\
122147476Sdumbbell    (REISERFS_SB(sbi)->s_mount_opt & (1 << FORCE_R5_HASH))
123147476Sdumbbell#define reiserfs_rupasov_hash(sbi)					\
124147476Sdumbbell    (REISERFS_SB(sbi)->s_mount_opt & (1 << FORCE_RUPASOV_HASH))
125147476Sdumbbell#define reiserfs_tea_hash(sbi)						\
126147476Sdumbbell    (REISERFS_SB(sbi)->s_mount_opt & (1 << FORCE_TEA_HASH))
127147476Sdumbbell#define reiserfs_hash_detect(sbi)					\
128147476Sdumbbell    (REISERFS_SB(sbi)->s_mount_opt & (1 << FORCE_HASH_DETECT))
129147476Sdumbbell
130147476Sdumbbell#define reiserfs_attrs(sbi)						\
131147476Sdumbbell    (REISERFS_SB(sbi)->s_mount_opt & (1 << REISERFS_ATTRS))
132147476Sdumbbell
133147476Sdumbbell#define reiserfs_data_log(sbi)						\
134147476Sdumbbell    (REISERFS_SB(sbi)->s_mount_opt & (1 << REISERFS_DATA_LOG))
135147476Sdumbbell#define reiserfs_data_ordered(sbi)					\
136147476Sdumbbell    (REISERFS_SB(sbi)->s_mount_opt & (1 << REISERFS_DATA_ORDERED))
137147476Sdumbbell#define reiserfs_data_writeback(sbi)					\
138147476Sdumbbell    (REISERFS_SB(sbi)->s_mount_opt & (1 << REISERFS_DATA_WRITEBACK))
139147476Sdumbbell
140147476Sdumbbell#define SB_BUFFER_WITH_SB(sbi)	(REISERFS_SB(sbi)->s_sbh)
141147476Sdumbbell#define SB_AP_BITMAP(sbi)	(REISERFS_SB(sbi)->s_ap_bitmap)
142147476Sdumbbell
143147476Sdumbbell#endif /* !defined _GNU_REISERFS_REISERFS_FS_SB_H */
144