11da177e4SLinus Torvalds /* 21da177e4SLinus Torvalds * befs.h 31da177e4SLinus Torvalds * 41da177e4SLinus Torvalds * Copyright (C) 2001-2002 Will Dyson <will_dyson@pobox.com> 51da177e4SLinus Torvalds * Copyright (C) 1999 Makoto Kato (m_kato@ga2.so-net.ne.jp) 61da177e4SLinus Torvalds */ 71da177e4SLinus Torvalds 81da177e4SLinus Torvalds #ifndef _LINUX_BEFS_H 91da177e4SLinus Torvalds #define _LINUX_BEFS_H 101da177e4SLinus Torvalds 111da177e4SLinus Torvalds #include "befs_fs_types.h" 121da177e4SLinus Torvalds 131da177e4SLinus Torvalds /* used in debug.c */ 141da177e4SLinus Torvalds #define BEFS_VERSION "0.9.3" 151da177e4SLinus Torvalds 161da177e4SLinus Torvalds 171da177e4SLinus Torvalds typedef u64 befs_blocknr_t; 181da177e4SLinus Torvalds /* 191da177e4SLinus Torvalds * BeFS in memory structures 201da177e4SLinus Torvalds */ 211da177e4SLinus Torvalds 2209ad0eaeSFabian Frederick struct befs_mount_options { 2331aba059SEric W. Biederman kgid_t gid; 2431aba059SEric W. Biederman kuid_t uid; 251da177e4SLinus Torvalds int use_gid; 261da177e4SLinus Torvalds int use_uid; 271da177e4SLinus Torvalds int debug; 281da177e4SLinus Torvalds char *iocharset; 2909ad0eaeSFabian Frederick }; 301da177e4SLinus Torvalds 31038428fcSFabian Frederick struct befs_sb_info { 321da177e4SLinus Torvalds u32 magic1; 331da177e4SLinus Torvalds u32 block_size; 341da177e4SLinus Torvalds u32 block_shift; 351da177e4SLinus Torvalds int byte_order; 361da177e4SLinus Torvalds befs_off_t num_blocks; 371da177e4SLinus Torvalds befs_off_t used_blocks; 381da177e4SLinus Torvalds u32 inode_size; 391da177e4SLinus Torvalds u32 magic2; 401da177e4SLinus Torvalds 411da177e4SLinus Torvalds /* Allocation group information */ 421da177e4SLinus Torvalds u32 blocks_per_ag; 431da177e4SLinus Torvalds u32 ag_shift; 441da177e4SLinus Torvalds u32 num_ags; 451da177e4SLinus Torvalds 466ea4558fSSalah Triki /* State of the superblock */ 476ea4558fSSalah Triki u32 flags; 486ea4558fSSalah Triki 492ac636b4SSalah Triki /* Journal log entry */ 501da177e4SLinus Torvalds befs_block_run log_blocks; 511da177e4SLinus Torvalds befs_off_t log_start; 521da177e4SLinus Torvalds befs_off_t log_end; 531da177e4SLinus Torvalds 541da177e4SLinus Torvalds befs_inode_addr root_dir; 551da177e4SLinus Torvalds befs_inode_addr indices; 561da177e4SLinus Torvalds u32 magic3; 571da177e4SLinus Torvalds 5809ad0eaeSFabian Frederick struct befs_mount_options mount_opts; 591da177e4SLinus Torvalds struct nls_table *nls; 60038428fcSFabian Frederick }; 611da177e4SLinus Torvalds 62f8ccad21SFabian Frederick struct befs_inode_info { 631da177e4SLinus Torvalds u32 i_flags; 641da177e4SLinus Torvalds u32 i_type; 651da177e4SLinus Torvalds 661da177e4SLinus Torvalds befs_inode_addr i_inode_num; 671da177e4SLinus Torvalds befs_inode_addr i_parent; 681da177e4SLinus Torvalds befs_inode_addr i_attribute; 691da177e4SLinus Torvalds 701da177e4SLinus Torvalds union { 711da177e4SLinus Torvalds befs_data_stream ds; 721da177e4SLinus Torvalds char symlink[BEFS_SYMLINK_LEN]; 731da177e4SLinus Torvalds } i_data; 741da177e4SLinus Torvalds 751da177e4SLinus Torvalds struct inode vfs_inode; 76f8ccad21SFabian Frederick }; 771da177e4SLinus Torvalds 781da177e4SLinus Torvalds enum befs_err { 791da177e4SLinus Torvalds BEFS_OK, 801da177e4SLinus Torvalds BEFS_ERR, 811da177e4SLinus Torvalds BEFS_BAD_INODE, 821da177e4SLinus Torvalds BEFS_BT_END, 831da177e4SLinus Torvalds BEFS_BT_EMPTY, 841da177e4SLinus Torvalds BEFS_BT_MATCH, 85672a8515SLuis de Bethencourt BEFS_BT_OVERFLOW, 861da177e4SLinus Torvalds BEFS_BT_NOT_FOUND 871da177e4SLinus Torvalds }; 881da177e4SLinus Torvalds 891da177e4SLinus Torvalds 901da177e4SLinus Torvalds /****************************/ 911da177e4SLinus Torvalds /* debug.c */ 92dac52fc1SFabian Frederick __printf(2, 3) 931da177e4SLinus Torvalds void befs_error(const struct super_block *sb, const char *fmt, ...); 94dac52fc1SFabian Frederick __printf(2, 3) 951da177e4SLinus Torvalds void befs_warning(const struct super_block *sb, const char *fmt, ...); 96dac52fc1SFabian Frederick __printf(2, 3) 971da177e4SLinus Torvalds void befs_debug(const struct super_block *sb, const char *fmt, ...); 981da177e4SLinus Torvalds 991da177e4SLinus Torvalds void befs_dump_super_block(const struct super_block *sb, befs_super_block *); 1001da177e4SLinus Torvalds void befs_dump_inode(const struct super_block *sb, befs_inode *); 101a9721f31SAl Viro void befs_dump_index_entry(const struct super_block *sb, befs_disk_btree_super *); 1021da177e4SLinus Torvalds void befs_dump_index_node(const struct super_block *sb, befs_btree_nodehead *); 1031da177e4SLinus Torvalds /****************************/ 1041da177e4SLinus Torvalds 1051da177e4SLinus Torvalds 1061da177e4SLinus Torvalds /* Gets a pointer to the private portion of the super_block 1071da177e4SLinus Torvalds * structure from the public part 1081da177e4SLinus Torvalds */ 109038428fcSFabian Frederick static inline struct befs_sb_info * 1101da177e4SLinus Torvalds BEFS_SB(const struct super_block *super) 1111da177e4SLinus Torvalds { 112038428fcSFabian Frederick return (struct befs_sb_info *) super->s_fs_info; 1131da177e4SLinus Torvalds } 1141da177e4SLinus Torvalds 115f8ccad21SFabian Frederick static inline struct befs_inode_info * 1161da177e4SLinus Torvalds BEFS_I(const struct inode *inode) 1171da177e4SLinus Torvalds { 118db6172c4SRasmus Villemoes return container_of(inode, struct befs_inode_info, vfs_inode); 1191da177e4SLinus Torvalds } 1201da177e4SLinus Torvalds 1211da177e4SLinus Torvalds static inline befs_blocknr_t 12222341d8fSAl Viro iaddr2blockno(struct super_block *sb, const befs_inode_addr *iaddr) 1231da177e4SLinus Torvalds { 1241da177e4SLinus Torvalds return ((iaddr->allocation_group << BEFS_SB(sb)->ag_shift) + 1251da177e4SLinus Torvalds iaddr->start); 1261da177e4SLinus Torvalds } 1271da177e4SLinus Torvalds 1281da177e4SLinus Torvalds static inline befs_inode_addr 1291da177e4SLinus Torvalds blockno2iaddr(struct super_block *sb, befs_blocknr_t blockno) 1301da177e4SLinus Torvalds { 1311da177e4SLinus Torvalds befs_inode_addr iaddr; 1321da177e4SLinus Torvalds iaddr.allocation_group = blockno >> BEFS_SB(sb)->ag_shift; 1331da177e4SLinus Torvalds iaddr.start = 1341da177e4SLinus Torvalds blockno - (iaddr.allocation_group << BEFS_SB(sb)->ag_shift); 1351da177e4SLinus Torvalds iaddr.len = 1; 1361da177e4SLinus Torvalds 1371da177e4SLinus Torvalds return iaddr; 1381da177e4SLinus Torvalds } 1391da177e4SLinus Torvalds 1401da177e4SLinus Torvalds static inline unsigned int 1411da177e4SLinus Torvalds befs_iaddrs_per_block(struct super_block *sb) 1421da177e4SLinus Torvalds { 143a9721f31SAl Viro return BEFS_SB(sb)->block_size / sizeof (befs_disk_inode_addr); 1441da177e4SLinus Torvalds } 1451da177e4SLinus Torvalds 146af10b008SAl Viro #include "endian.h" 147af10b008SAl Viro 1481da177e4SLinus Torvalds #endif /* _LINUX_BEFS_H */ 149