struct journal_params {
    __u32 jp_journal_1st_block;       /* where does journal start from on its
                                       * device */
    __u32 jp_journal_dev;             /* journal device st_rdev */
    __u32 jp_journal_size;            /* size of the journal */
    __u32 jp_journal_trans_max;       /* max number of blocks in a transaction. */
    __u32 jp_journal_magic;           /* random value made on fs creation (this
                                       * was sb_journal_block_count) */
    __u32 jp_journal_max_batch;       /* max number of blocks to batch into a
                                       * trans */
    __u32 jp_journal_max_commit_age;  /* in seconds, how old can an async
                                       * commit be */
    __u32 jp_journal_max_trans_age;   /* in seconds, how old can a transaction
                                       * be */
};

/* this is the super from 3.5.X, where X >= 10 */
struct reiserfs_super_block_v1
{
    __u32 s_block_count;           /* blocks count         */
    __u32 s_free_blocks;           /* free blocks count    */
    __u32 s_root_block;            /* root block number    */
    struct journal_params s_journal;
    __u16 s_blocksize;             /* block size */
    __u16 s_oid_maxsize;           /* max size of object id array, see
                                    * get_objectid() commentary  */
    __u16 s_oid_cursize;           /* current size of object id array */
    __u16 s_umount_state;          /* this is set to 1 when filesystem was
                                    * umounted, to 2 - when not */
    char s_magic[10];              /* reiserfs magic string indicates that
                                    * file system is reiserfs:
                                    * "ReIsErFs" or "ReIsEr2Fs" or "ReIsEr3Fs" */
    __u16 s_fs_state;              /* it is set to used by fsck to mark which
                                    * phase of rebuilding is done */
    __u32 s_hash_function_code;    /* indicate, what hash function is being use
                                    * to sort names in a directory*/
    __u16 s_tree_height;           /* height of disk tree */
    __u16 s_bmap_nr;               /* amount of bitmap blocks needed to address
                                    * each block of file system */
    __u16 s_version;               /* this field is only reliable on filesystem
                                    * with non-standard journal */
    __u16 s_reserved_for_journal;  /* size in blocks of journal area on main
                                    * device, we need to keep after
                                    * making fs with non-standard journal */
} __attribute__ ((__packed__));

/* this is the on disk super block */
struct reiserfs_super_block
{
    struct reiserfs_super_block_v1 s_v1;
    __u32 s_inode_generation;
    __u32 s_flags;                  /* Right now used only by inode-attributes, if enabled */
    unsigned char s_uuid[16];       /* filesystem unique identifier */
    unsigned char s_label[16];      /* filesystem volume label */
    char s_unused[88] ;             /* zero filled by mkreiserfs and
                                     * reiserfs_convert_objectid_map_v1()
                                     * so any additions must be updated
                                     * there as well. */
}  __attribute__ ((__packed__));

#define REISERFS_SUPER_MAGIC_STRING "ReIsErFs"
#define REISER2FS_SUPER_MAGIC_STRING "ReIsEr2Fs"
#define REISER2FS_JR_SUPER_MAGIC_STRING "ReIsEr3Fs"
 
#define SB_V1_DISK_SUPER_BLOCK(s) (&((s)->s_v1))
#define REISERFS_BLOCKSIZE(s) \
        __le32_to_cpu((SB_V1_DISK_SUPER_BLOCK(s)->s_blocksize))
#define REISERFS_BLOCK_COUNT(s) \
        __le32_to_cpu((SB_V1_DISK_SUPER_BLOCK(s)->s_block_count))
#define REISERFS_MAGIC(s) \
        (SB_V1_DISK_SUPER_BLOCK(s)->s_magic)
