1 /* 2 core.h -- reiserfs general code 3 Copyright (C) 2001, 2002 Yury Umanets <torque@ukrpost.net>, see COPYING for 4 licensing and copyright details. 5 */ 6 7 #ifndef CORE_H 8 #define CORE_H 9 10 #include <dal/dal.h> 11 12 #include "endian.h" 13 #include "hashes.h" 14 #include "block.h" 15 #include "bitmap.h" 16 #include "journal.h" 17 #include "gauge.h" 18 #include "filesystem.h" 19 20 #define FS_CLEAN 1 21 #define FS_DIRTY 2 22 23 #define FS_CONSISTENT 0 24 #define FS_CORRUPTED 1 25 26 #define FS_SUPER_DIRTY (1) 27 #define FS_BITMAP_DIRTY (1 << 1) 28 #define FS_JOURNAL_DIRTY (1 << 2) 29 30 #define SUPER_V1_SIZE (sizeof(reiserfs_super_v1_t)) 31 #define SUPER_V2_SIZE (sizeof(reiserfs_super_t)) 32 33 #define get_sb_jp(sb) (&((sb)->s_v1.sb_journal)) 34 35 #define get_sb_block_count(sb) get_le32(sb, s_v1.sb_block_count) 36 #define set_sb_block_count(sb, val) set_le32(sb, s_v1.sb_block_count, val) 37 38 #define get_sb_free_blocks(sb) get_le32(sb, s_v1.sb_free_blocks) 39 #define set_sb_free_blocks(sb, val) set_le32(sb, s_v1.sb_free_blocks, val) 40 41 #define get_sb_root_block(sb) get_le32(sb, s_v1.sb_root_block) 42 #define set_sb_root_block(sb, val) set_le32(sb, s_v1.sb_root_block, val) 43 44 #define get_sb_mount_id(sb) get_le32(sb, s_v1.sb_mountid) 45 #define set_sb_mount_id(sb, val) set_le32(sb, s_v1.sb_mountid, val) 46 47 #define get_sb_block_size(sb) get_le16(sb, s_v1.sb_block_size) 48 #define set_sb_block_size(sb, val) set_le16(sb, s_v1.sb_block_size, val) 49 50 #define get_sb_oid_maxsize(sb) get_le16(sb, s_v1.sb_oid_maxsize) 51 #define set_sb_oid_maxsize(sb, val) set_le16(sb, s_v1.sb_oid_maxsize, val) 52 53 #define get_sb_oid_cursize(sb) get_le16(sb, s_v1.sb_oid_cursize) 54 #define set_sb_oid_cursize(sb, val) set_le16(sb, s_v1.sb_oid_cursize, val) 55 56 #define get_sb_umount_state(sb) get_le16(sb, s_v1.sb_umount_state) 57 #define set_sb_umount_state(sb, val) set_le16(sb, s_v1.sb_umount_state, val) 58 59 #define get_sb_fs_state(sb) get_le16(sb, s_v1.sb_fs_state) 60 #define set_sb_fs_state(sb, val) set_le16(sb, s_v1.sb_fs_state, val) 61 62 #define get_sb_hash_code(sb) get_le32(sb, s_v1.sb_hash_function_code) 63 #define set_sb_hash_code(sb, val) set_le32(sb, s_v1.sb_hash_function_code, val) 64 65 #define get_sb_tree_height(sb) get_le16(sb, s_v1.sb_tree_height) 66 #define set_sb_tree_height(sb, val) set_le16(sb, s_v1.sb_tree_height, val) 67 68 #define get_sb_bmap_nr(sb) get_le16(sb, s_v1.sb_bmap_nr) 69 #define set_sb_bmap_nr(sb, val) set_le16(sb, s_v1.sb_bmap_nr, val) 70 71 #define get_sb_format(sb) get_le16(sb, s_v1.sb_format) 72 #define set_sb_format(sb, val) set_le16(sb, s_v1.sb_format, val) 73 74 #define get_sb_reserved_for_journal(sb) get_le16(sb, s_v1.sb_reserved_for_journal) 75 #define set_sb_reserved_for_journal(sb,val) set_le16(sb, s_v1.sb_reserved_for_journal,val) 76 77 #define get_sb_objectid_map(sb) \ 78 ((uint32_t *)((char *)(sb) + \ 79 (sb->s_v1.sb_format == FS_FORMAT_3_6 ? \ 80 SUPER_V2_SIZE : SUPER_V1_SIZE))) 81 82 #define reiserfs_fs_super_dirty(fs) (FS_SUPER_DIRTY & fs->flags) 83 #define reiserfs_fs_bitmap_dirty(fs) (FS_BITMAP_DIRTY & fs->flags) 84 #define reiserfs_fs_journal_dirty(fs) (FS_JOURNAL_DIRTY & fs->flags) 85 86 #define reiserfs_fs_mark_super_dirty(fs) (fs->flags |= FS_SUPER_DIRTY) 87 #define reiserfs_fs_mark_bitmap_dirty(fs) (fs->flags |= FS_BITMAP_DIRTY) 88 #define reiserfs_fs_mark_journal_dirty(fs) (fs->flags |= FS_JOURNAL_DIRTY) 89 90 #define reiserfs_fs_mark_super_clean(fs) (fs->flags &= ~FS_SUPER_DIRTY) 91 #define reiserfs_fs_mark_bitmap_clean(fs) (fs->flags &= ~FS_BITMAP_DIRTY) 92 #define reiserfs_fs_mark_journal_clean(fs) (fs->flags &= ~FS_JOURNAL_DIRTY) 93 94 extern dal_t *reiserfs_fs_host_dal(reiserfs_fs_t *fs); 95 96 extern int reiserfs_fs_clobber(dal_t *dal); 97 extern int reiserfs_fs_clobber_skipped(dal_t *dal); 98 extern blk_t reiserfs_fs_probe(dal_t *dal); 99 100 extern reiserfs_fs_t *reiserfs_fs_open(dal_t *host_dal, dal_t *journal_dal); 101 extern reiserfs_fs_t *reiserfs_fs_open_fast(dal_t *host_dal, dal_t *journal_dal); 102 103 extern reiserfs_fs_t *reiserfs_fs_create(dal_t *host_dal, dal_t *journal_dal, 104 blk_t start, blk_t max_trans, blk_t len, size_t blocksize, int format, 105 reiserfs_hash_t hash, const char *label, const char *uuid, blk_t fs_len); 106 107 extern int reiserfs_fs_sync(reiserfs_fs_t *fs); 108 extern void reiserfs_fs_close(reiserfs_fs_t *fs); 109 110 extern int reiserfs_fs_resize_smart(reiserfs_fs_t *fs, long start, long end); 111 extern int reiserfs_fs_resize_dumb(reiserfs_fs_t *fs, blk_t fs_len); 112 113 extern reiserfs_fs_t *reiserfs_fs_copy(reiserfs_fs_t *src_fs, dal_t *dst_dal); 114 115 extern int reiserfs_fs_is_consistent(reiserfs_fs_t *fs); 116 extern int reiserfs_fs_is_resizeable(reiserfs_fs_t *fs); 117 118 extern int reiserfs_fs_format(reiserfs_fs_t *fs); 119 120 extern const char *reiserfs_fs_long_format(reiserfs_fs_t *fs); 121 extern const char *reiserfs_fs_long_format_str(int format); 122 123 extern const char *reiserfs_fs_short_format(reiserfs_fs_t *fs); 124 extern const char *reiserfs_fs_short_format_str(int format); 125 extern int reiserfs_fs_format_from_str(const char *format); 126 127 extern reiserfs_hash_t reiserfs_fs_hash(reiserfs_fs_t *fs); 128 extern const char *reiserfs_fs_hash_str(reiserfs_hash_t hash); 129 extern reiserfs_hash_t reiserfs_fs_hash_from_str(const char *hash); 130 131 extern int reiserfs_fs_state(reiserfs_fs_t *fs); 132 extern int reiserfs_fs_state_update(reiserfs_fs_t *fs, uint32_t state); 133 extern const char *reiserfs_fs_state_str(uint32_t state); 134 135 extern size_t reiserfs_fs_block_size(reiserfs_fs_t *fs); 136 137 extern blk_t reiserfs_fs_size(reiserfs_fs_t *fs); 138 extern blk_t reiserfs_fs_min_size(reiserfs_fs_t *fs); 139 extern blk_t reiserfs_fs_free_size(reiserfs_fs_t *fs); 140 extern blk_t reiserfs_fs_metadata_size(reiserfs_fs_t *fs); 141 142 extern reiserfs_hash_func_t reiserfs_fs_hash_func(reiserfs_hash_t hash_code); 143 extern uint32_t reiserfs_fs_hash_value(reiserfs_fs_t *fs, const char *name); 144 145 extern char *reiserfs_fs_label(reiserfs_fs_t *fs); 146 extern void reiserfs_fs_label_update(reiserfs_fs_t *fs, const char *label); 147 extern char *reiserfs_fs_uuid(reiserfs_fs_t *fs); 148 extern void reiserfs_fs_uuid_update(reiserfs_fs_t *fs, const char *uuid); 149 150 extern int reiserfs_fs_set_root(reiserfs_fs_t *fs, blk_t blk); 151 extern dal_t *reiserfs_fs_host_dal(reiserfs_fs_t *fs); 152 153 extern void *reiserfs_fs_get_data(reiserfs_fs_t *fs); 154 extern void reiserfs_fs_set_data(reiserfs_fs_t *fs, void *data); 155 156 /* Journal functions */ 157 extern blk_t reiserfs_fs_journal_size(reiserfs_fs_t *fs); 158 extern blk_t reiserfs_fs_journal_offset(reiserfs_fs_t *fs); 159 extern int reiserfs_fs_journal_opened(reiserfs_fs_t *fs); 160 161 #define reiserfs_fs_journal_relocated(fs) reiserfs_fs_journal_kind(fs) 162 #define reiserfs_fs_journal_standard(fs) (!reiserfs_fs_journal_kind(fs)) 163 164 extern int reiserfs_fs_journal_kind(reiserfs_fs_t *fs); 165 extern const char *reiserfs_fs_journal_kind_str(int relocated); 166 167 extern int reiserfs_fs_journal_open(reiserfs_fs_t *fs, dal_t *dal); 168 extern int reiserfs_fs_journal_reopen(reiserfs_fs_t *fs, dal_t *dal); 169 extern int reiserfs_fs_journal_create(reiserfs_fs_t *fs, dal_t *dal, blk_t start, 170 blk_t len, blk_t max_trans); 171 172 extern int reiserfs_fs_journal_recreate(reiserfs_fs_t *fs, dal_t *dal, 173 blk_t start, blk_t len, blk_t max_trans); 174 175 extern int reiserfs_fs_journal_sync(reiserfs_fs_t *fs); 176 extern void reiserfs_fs_journal_close(reiserfs_fs_t *fs); 177 extern reiserfs_journal_t *reiserfs_fs_journal(reiserfs_fs_t *fs); 178 179 extern int reiserfs_fs_journal_tune(reiserfs_fs_t *fs, dal_t *dal, 180 blk_t start, blk_t len, blk_t max_trans); 181 182 /* Bitmap functions */ 183 extern int reiserfs_fs_bitmap_opened(reiserfs_fs_t *fs); 184 extern void reiserfs_fs_bitmap_use_block(reiserfs_fs_t *fs, blk_t block); 185 extern void reiserfs_fs_bitmap_unuse_block(reiserfs_fs_t *fs, blk_t block); 186 extern int reiserfs_fs_bitmap_test_block(reiserfs_fs_t *fs, blk_t block); 187 188 extern blk_t reiserfs_fs_bitmap_find_free_block(reiserfs_fs_t *fs, 189 blk_t start); 190 191 extern blk_t reiserfs_fs_bitmap_calc_used(reiserfs_fs_t *fs); 192 extern blk_t reiserfs_fs_bitmap_calc_used(reiserfs_fs_t *fs); 193 extern blk_t reiserfs_fs_bitmap_used(reiserfs_fs_t *fs); 194 extern blk_t reiserfs_fs_bitmap_unused(reiserfs_fs_t *fs); 195 extern int reiserfs_fs_bitmap_check(reiserfs_fs_t *fs); 196 extern int reiserfs_fs_bitmap_open(reiserfs_fs_t *fs); 197 198 extern int reiserfs_fs_bitmap_create(reiserfs_fs_t *fs, size_t blocksize, 199 blk_t fs_len); 200 201 extern int reiserfs_fs_bitmap_resize(reiserfs_fs_t *fs, long start, long end); 202 extern int reiserfs_fs_bitmap_sync(reiserfs_fs_t *fs); 203 extern void reiserfs_fs_bitmap_close(reiserfs_fs_t *fs); 204 extern int reiserfs_fs_bitmap_reopen(reiserfs_fs_t *fs); 205 extern reiserfs_bitmap_t *reiserfs_fs_bitmap(reiserfs_fs_t *fs); 206 207 /* Superblock functions */ 208 extern int reiserfs_fs_super_sync(reiserfs_fs_t *fs); 209 extern int reiserfs_fs_super_open(reiserfs_fs_t *fs); 210 211 extern int reiserfs_fs_super_create(reiserfs_fs_t *fs, int format, 212 reiserfs_hash_t hash, const char *label, const char *uuid, size_t blocksize, 213 blk_t start, blk_t len, blk_t fs_len, int relocated); 214 215 extern void reiserfs_fs_super_close(reiserfs_fs_t *fs); 216 217 extern reiserfs_super_t *reiserfs_fs_super(reiserfs_fs_t *fs); 218 219 /* Tree functions */ 220 extern int reiserfs_fs_tree_open(reiserfs_fs_t *fs); 221 extern int reiserfs_fs_tree_create(reiserfs_fs_t *fs); 222 extern void reiserfs_fs_tree_close(reiserfs_fs_t *fs); 223 extern void *reiserfs_fs_tree(reiserfs_fs_t *fs); 224 225 #endif 226 227