blob: 35980313124b26f0356e7bdcba37dce47f3c78c5 [file] [log] [blame]
/*
* 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