]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - sys/gnu/fs/reiserfs/reiserfs_fs_sb.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / sys / gnu / fs / reiserfs / reiserfs_fs_sb.h
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 */