1147476Sdumbbell/* 2147476Sdumbbell * Copyright 2000 Hans Reiser 3147476Sdumbbell * See README for licensing and copyright details 4147476Sdumbbell * 5230132Suqs * Ported to FreeBSD by Jean-S��bastien P��dron <jspedron@club-internet.fr> 6147476Sdumbbell * 7147476Sdumbbell * $FreeBSD: releng/10.2/sys/gnu/fs/reiserfs/reiserfs_fs_sb.h 230132 2012-01-15 13:23:18Z uqs $ 8147476Sdumbbell */ 9147476Sdumbbell 10147476Sdumbbell#ifndef _GNU_REISERFS_REISERFS_FS_SB_H 11147476Sdumbbell#define _GNU_REISERFS_REISERFS_FS_SB_H 12147476Sdumbbell 13147476Sdumbbelltypedef uint32_t (*hashf_t)(const signed char *, int); 14147476Sdumbbell 15147476Sdumbbell#define sb_block_count(sbp) (le32toh((sbp)->s_v1.s_block_count)) 16147476Sdumbbell#define set_sb_block_count(sbp,v) ((sbp)->s_v1.s_block_count = htole32(v)) 17147476Sdumbbell#define sb_free_blocks(sbp) (le32toh((sbp)->s_v1.s_free_blocks)) 18147476Sdumbbell#define set_sb_free_blocks(sbp,v) ((sbp)->s_v1.s_free_blocks = htole32(v)) 19147476Sdumbbell#define sb_root_block(sbp) (le32toh((sbp)->s_v1.s_root_block)) 20147476Sdumbbell 21147476Sdumbbell/* Bitmaps */ 22147476Sdumbbellstruct reiserfs_bitmap_info { 23147476Sdumbbell uint16_t first_zero_hint; 24147476Sdumbbell uint16_t free_count; 25147476Sdumbbell //struct buf *bp; /* The actual bitmap */ 26147476Sdumbbell caddr_t bp_data; /* The actual bitmap */ 27147476Sdumbbell}; 28147476Sdumbbell 29147476Sdumbbell/* ReiserFS union of in-core super block data */ 30147476Sdumbbellstruct reiserfs_sb_info { 31147476Sdumbbell struct reiserfs_super_block *s_rs; 32147476Sdumbbell struct reiserfs_bitmap_info *s_ap_bitmap; 33147476Sdumbbell struct vnode *s_devvp; 34147476Sdumbbell 35147476Sdumbbell unsigned short s_mount_state; 36147476Sdumbbell 37147476Sdumbbell hashf_t s_hash_function; /* Pointer to function which 38147476Sdumbbell is used to sort names in 39147476Sdumbbell directory. Set on mount */ 40147476Sdumbbell unsigned long s_mount_opt; /* ReiserFS's mount options 41147476Sdumbbell are set here */ 42147476Sdumbbell int s_generation_counter; /* Increased by one every 43147476Sdumbbell time the tree gets 44147476Sdumbbell re-balanced */ 45147476Sdumbbell unsigned long s_properties; /* File system properties. 46147476Sdumbbell Currently holds on-disk 47147476Sdumbbell FS format */ 48147476Sdumbbell uint16_t s_blocksize; 49147476Sdumbbell uint16_t s_blocksize_bits; 50147476Sdumbbell char s_rd_only; /* Is it read-only ? */ 51147476Sdumbbell int s_is_unlinked_ok; 52147476Sdumbbell}; 53147476Sdumbbell 54147476Sdumbbell#define sb_version(sbi) (le16toh((sbi)->s_v1.s_version)) 55147476Sdumbbell#define set_sb_version(sbi, v) ((sbi)->s_v1.s_version = htole16(v)) 56147476Sdumbbell 57147476Sdumbbell#define sb_blocksize(sbi) (le16toh((sbi)->s_v1.s_blocksize)) 58147476Sdumbbell#define set_sb_blocksize(sbi, v) ((sbi)->s_v1.s_blocksize = htole16(v)) 59147476Sdumbbell 60147476Sdumbbell#define sb_hash_function_code(sbi) \ 61147476Sdumbbell (le32toh((sbi)->s_v1.s_hash_function_code)) 62147476Sdumbbell#define set_sb_hash_function_code(sbi, v) \ 63147476Sdumbbell ((sbi)->s_v1.s_hash_function_code = htole32(v)) 64147476Sdumbbell 65147476Sdumbbell#define sb_bmap_nr(sbi) (le16toh((sbi)->s_v1.s_bmap_nr)) 66147476Sdumbbell#define set_sb_bmap_nr(sbi, v) ((sbi)->s_v1.s_bmap_nr = htole16(v)) 67147476Sdumbbell 68147476Sdumbbell/* Definitions of reiserfs on-disk properties: */ 69147476Sdumbbell#define REISERFS_3_5 0 70147476Sdumbbell#define REISERFS_3_6 1 71147476Sdumbbell 72147476Sdumbbellenum reiserfs_mount_options { 73147476Sdumbbell /* Mount options */ 74147476Sdumbbell REISERFS_LARGETAIL, /* Large tails will be created in a session */ 75147476Sdumbbell REISERFS_SMALLTAIL, /* Small (for files less than block size) tails 76147476Sdumbbell will be created in a session */ 77147476Sdumbbell REPLAYONLY, /* Replay journal and return 0. Use by fsck */ 78147476Sdumbbell REISERFS_CONVERT, /* -o conv: causes conversion of old format super 79147476Sdumbbell block to the new format. If not specified - 80147476Sdumbbell old partition will be dealt with in a manner 81147476Sdumbbell of 3.5.x */ 82147476Sdumbbell 83147476Sdumbbell /* 84147476Sdumbbell * -o hash={tea, rupasov, r5, detect} is meant for properly mounting 85147476Sdumbbell * reiserfs disks from 3.5.19 or earlier. 99% of the time, this option 86147476Sdumbbell * is not required. If the normal autodection code can't determine 87147476Sdumbbell * which hash to use (because both hases had the same value for a 88147476Sdumbbell * file) use this option to force a specific hash. It won't allow you 89147476Sdumbbell * to override the existing hash on the FS, so if you have a tea hash 90147476Sdumbbell * disk, and mount with -o hash=rupasov, the mount will fail. 91147476Sdumbbell */ 92147476Sdumbbell FORCE_TEA_HASH, /* try to force tea hash on mount */ 93147476Sdumbbell FORCE_RUPASOV_HASH, /* try to force rupasov hash on mount */ 94147476Sdumbbell FORCE_R5_HASH, /* try to force rupasov hash on mount */ 95147476Sdumbbell FORCE_HASH_DETECT, /* try to detect hash function on mount */ 96147476Sdumbbell 97147476Sdumbbell REISERFS_DATA_LOG, 98147476Sdumbbell REISERFS_DATA_ORDERED, 99147476Sdumbbell REISERFS_DATA_WRITEBACK, 100147476Sdumbbell 101147476Sdumbbell /* 102147476Sdumbbell * used for testing experimental features, makes benchmarking new 103147476Sdumbbell * features with and without more convenient, should never be used by 104147476Sdumbbell * users in any code shipped to users (ideally) 105147476Sdumbbell */ 106147476Sdumbbell 107147476Sdumbbell REISERFS_NO_BORDER, 108147476Sdumbbell REISERFS_NO_UNHASHED_RELOCATION, 109147476Sdumbbell REISERFS_HASHED_RELOCATION, 110147476Sdumbbell REISERFS_ATTRS, 111147476Sdumbbell REISERFS_XATTRS, 112147476Sdumbbell REISERFS_XATTRS_USER, 113147476Sdumbbell REISERFS_POSIXACL, 114147476Sdumbbell 115147476Sdumbbell REISERFS_TEST1, 116147476Sdumbbell REISERFS_TEST2, 117147476Sdumbbell REISERFS_TEST3, 118147476Sdumbbell REISERFS_TEST4, 119147476Sdumbbell}; 120147476Sdumbbell 121147476Sdumbbell#define reiserfs_r5_hash(sbi) \ 122147476Sdumbbell (REISERFS_SB(sbi)->s_mount_opt & (1 << FORCE_R5_HASH)) 123147476Sdumbbell#define reiserfs_rupasov_hash(sbi) \ 124147476Sdumbbell (REISERFS_SB(sbi)->s_mount_opt & (1 << FORCE_RUPASOV_HASH)) 125147476Sdumbbell#define reiserfs_tea_hash(sbi) \ 126147476Sdumbbell (REISERFS_SB(sbi)->s_mount_opt & (1 << FORCE_TEA_HASH)) 127147476Sdumbbell#define reiserfs_hash_detect(sbi) \ 128147476Sdumbbell (REISERFS_SB(sbi)->s_mount_opt & (1 << FORCE_HASH_DETECT)) 129147476Sdumbbell 130147476Sdumbbell#define reiserfs_attrs(sbi) \ 131147476Sdumbbell (REISERFS_SB(sbi)->s_mount_opt & (1 << REISERFS_ATTRS)) 132147476Sdumbbell 133147476Sdumbbell#define reiserfs_data_log(sbi) \ 134147476Sdumbbell (REISERFS_SB(sbi)->s_mount_opt & (1 << REISERFS_DATA_LOG)) 135147476Sdumbbell#define reiserfs_data_ordered(sbi) \ 136147476Sdumbbell (REISERFS_SB(sbi)->s_mount_opt & (1 << REISERFS_DATA_ORDERED)) 137147476Sdumbbell#define reiserfs_data_writeback(sbi) \ 138147476Sdumbbell (REISERFS_SB(sbi)->s_mount_opt & (1 << REISERFS_DATA_WRITEBACK)) 139147476Sdumbbell 140147476Sdumbbell#define SB_BUFFER_WITH_SB(sbi) (REISERFS_SB(sbi)->s_sbh) 141147476Sdumbbell#define SB_AP_BITMAP(sbi) (REISERFS_SB(sbi)->s_ap_bitmap) 142147476Sdumbbell 143147476Sdumbbell#endif /* !defined _GNU_REISERFS_REISERFS_FS_SB_H */ 144