| /* |
| * Copyright 2000-2004 by Hans Reiser, licensing governed by |
| * reiserfsprogs/README |
| */ |
| |
| #ifndef REISERFS_SUPER_H |
| #define REISERFS_SUPER_H |
| |
| #define REISERFS_SB_SIZE_V1 (sizeof(reiserfs_sb_v1_t)) /* 76 bytes */ |
| |
| #define reiserfs_sb_jp(sb) (&((sb)->s_v1.sb_journal)) |
| |
| /* values for sb_version field of struct reiserfs_super_block. sb_version is |
| only reliable on filesystem with non-standard journal */ |
| #define REISERFS_FORMAT_3_5 0 |
| #define REISERFS_FORMAT_3_6 2 |
| #define REISERFS_FORMAT_UNKNOWN -1 |
| |
| |
| /* values for sb_mount_state field */ |
| #define FS_CLEANLY_UMOUNTED 1 /* this was REISERFS_VALID_FS */ |
| #define FS_NOT_CLEANLY_UMOUNTED 2 /* this was REISERFS_ERROR. It |
| means that filesystem was not |
| cleanly unmounted */ |
| |
| typedef enum { |
| reiserfs_attrs_cleared = 0x00000001, |
| } reiserfs_super_block_flags; |
| |
| #define REISERFS_SB_SIZE (sizeof(reiserfs_sb_t)) /* 204 bytes */ |
| |
| /* set/get fields of super block with these defines */ |
| #define reiserfs_sb_get_blocks(sb) get_le32 (sb, s_v1.sb_block_count) |
| #define reiserfs_sb_set_blocks(sb,val) set_le32 (sb, s_v1.sb_block_count, val) |
| |
| #define reiserfs_sb_get_free(sb) get_le32 (sb, s_v1.sb_free_blocks) |
| #define reiserfs_sb_set_free(sb,val) set_le32 (sb, s_v1.sb_free_blocks, val) |
| |
| #define reiserfs_sb_get_root(sb) get_le32 (sb,s_v1.sb_root_block) |
| #define reiserfs_sb_set_root(sb,val) set_le32 (sb, s_v1.sb_root_block, val) |
| |
| #if 0 |
| #define get_sb_mount_id(sb) get_le32 (sb,s_v1.sb_mountid) |
| #define set_sb_mount_id(sb,val) set_le32 (sb, s_v1.sb_mountid, val) |
| |
| #define get_sb_journal_magic(sb) get_le32 (sb, s_v1.sb_journal_magic) |
| #define set_sb_journal_magic(sb,val) set_le32 (sb, s_v1.sb_journal_magic, val) |
| #endif |
| |
| #define reiserfs_sb_get_blksize(sb) get_le16 (sb, s_v1.sb_blocksize) |
| #define reiserfs_sb_set_blksize(sb,val) set_le16 (sb, s_v1.sb_blocksize, val) |
| |
| #define reiserfs_sb_get_mapmax(sb) get_le16 (sb, s_v1.sb_oid_maxsize) |
| #define reiserfs_sb_set_mapmax(sb,val) set_le16 (sb, s_v1.sb_oid_maxsize, val) |
| |
| #define reiserfs_sb_get_mapcur(sb) get_le16 (sb, s_v1.sb_oid_cursize) |
| #define reiserfs_sb_set_mapcur(sb,val) set_le16 (sb, s_v1.sb_oid_cursize, val) |
| |
| #define reiserfs_sb_get_umount(sb) get_le16 (sb, s_v1.sb_umount_state) |
| #define reiserfs_sb_set_umount(sb,val) set_le16 (sb, s_v1.sb_umount_state, val) |
| |
| #define reiserfs_sb_get_state(sb) get_le16 (sb, s_v1.sb_fs_state) |
| #define reiserfs_sb_set_state(sb,flag) set_le16 (sb, s_v1.sb_fs_state, flag) |
| |
| #define reiserfs_sb_get_hash(sb) get_le32 (sb, s_v1.sb_hash_function_code) |
| #define reiserfs_sb_set_hash(sb,val) set_le32 (sb, s_v1.sb_hash_function_code, val) |
| |
| #define reiserfs_sb_get_height(sb) get_le16 (sb, s_v1.sb_tree_height) |
| #define reiserfs_sb_set_height(sb,val) set_le16 (sb, s_v1.sb_tree_height, val) |
| |
| #define reiserfs_sb_get_bmaps(sb) get_le16 (sb, s_v1.sb_bmap_nr) |
| #define reiserfs_sb_set_bmaps(sb,val) set_le16 (sb, s_v1.sb_bmap_nr, val) |
| |
| #define reiserfs_sb_get_version(sb) get_le16 (sb, s_v1.sb_version) |
| #define reiserfs_sb_set_version(sb,val) set_le16 (sb, s_v1.sb_version, val) |
| |
| #define reiserfs_sb_get_reserved(sb) \ |
| get_le16 (sb, s_v1.sb_reserved_for_journal) |
| #define reiserfs_sb_set_reserved(sb,val) \ |
| set_le16 (sb, s_v1.sb_reserved_for_journal, val) |
| |
| #define reiserfs_sb_get_gen(sb) get_le32 (sb, sb_inode_generation) |
| #define reiserfs_sb_set_gen(sb,val) set_le32 (sb, sb_inode_generation, val) |
| |
| #define reiserfs_sb_get_flags(sb) get_le32 (sb, s_flags) |
| #define reiserfs_sb_set_flags(sb, val) set_le32 (sb, s_flags, val) |
| |
| #define reiserfs_sb_isflag(sb, flag) \ |
| (get_le32 (sb, s_flags) & flag) |
| #define reiserfs_sb_mkflag(sb, flag) \ |
| set_le32 (sb, s_flags, get_le32 (sb, s_flags) | flag) |
| #define reiserfs_sb_clflag(sb, flag) \ |
| set_le32 (sb, s_flags, get_le32 (sb, s_flags) & ~(flag)) |
| |
| /* 0 does not guarantee that fs is consistent */ |
| #define reiserfs_sb_state_ok(fs) \ |
| ((reiserfs_sb_get_umount (fs->fs_ondisk_sb) == FS_CLEANLY_UMOUNTED) && \ |
| (reiserfs_sb_get_state (fs->fs_ondisk_sb) == FS_CONSISTENT)) |
| |
| |
| /* prejournalled reiserfs had signature in the other place in super block */ |
| #define REISERFS_SUPER_MAGIC_STRING_OFFSET_NJ 20 |
| |
| /* f_type of struct statfs will be set at this value by statfs(2) */ |
| #define REISERFS_SUPER_MAGIC 0x52654973 |
| |
| /* various reiserfs signatures. We have 3 so far. ReIsErFs for 3.5 format with |
| standard journal, ReIsEr2Fs for 3.6 (or converted 3.5) and ReIsEr3Fs for |
| filesystem with non-standard journal (formats are distinguished by |
| sb_version in that case). Those signatures should be looked for at the |
| 64-th and at the 8-th 1k block of the device */ |
| #define REISERFS_3_5_SUPER_MAGIC_STRING "ReIsErFs" |
| #define REISERFS_3_6_SUPER_MAGIC_STRING "ReIsEr2Fs" |
| #define REISERFS_JR_SUPER_MAGIC_STRING "ReIsEr3Fs" /* JR stands for Journal |
| Relocation */ |
| |
| /* these are possible values for sb_fs_state */ |
| enum reiserfs_state_flags { |
| /* this is set by mkreiserfs and by reiserfsck */ |
| FS_CONSISTENT = 0x0, |
| /* this is set by the kernel when fsck is wanted. */ |
| FS_ERROR = 0x1, |
| /* this is set by fsck when fatal corruption is found */ |
| FS_FATAL = 0x2, |
| /* this is set by kernel when io error occures */ |
| /* IO_ERROR = 0x4, */ |
| |
| FS_STATE_LAST = 0x5 |
| }; |
| |
| extern int reiserfs_super_35_magic (reiserfs_sb_t * rs); |
| |
| extern int reiserfs_super_36_magic (reiserfs_sb_t * rs); |
| |
| extern int reiserfs_super_jr_magic (reiserfs_sb_t * rs); |
| |
| extern int reiserfs_super_magic (reiserfs_sb_t * rs); |
| |
| extern int reiserfs_super_format (reiserfs_sb_t * sb); |
| |
| extern int reiserfs_super_size (reiserfs_sb_t * rs); |
| |
| extern int reiserfs_super_prejournaled (reiserfs_sb_t * rs); |
| |
| extern void reiserfs_super_print_state (FILE * fp, |
| reiserfs_filsys_t * fs); |
| |
| extern int reiserfs_super_print (FILE * fp, |
| reiserfs_filsys_t *, |
| char * file_name, |
| reiserfs_bh_t * bh, |
| int short_print); |
| |
| extern int reiserfs_super_valid(reiserfs_bh_t *bh); |
| |
| #endif |