2005-04-17 02:20:36 +04:00
/*
* befs . h
*
* Copyright ( C ) 2001 - 2002 Will Dyson < will_dyson @ pobox . com >
* Copyright ( C ) 1999 Makoto Kato ( m_kato @ ga2 . so - net . ne . jp )
*/
# ifndef _LINUX_BEFS_H
# define _LINUX_BEFS_H
# include "befs_fs_types.h"
/* used in debug.c */
# define BEFS_VERSION "0.9.3"
typedef u64 befs_blocknr_t ;
/*
* BeFS in memory structures
*/
2015-04-16 22:46:17 +03:00
struct befs_mount_options {
2012-02-10 22:51:24 +04:00
kgid_t gid ;
kuid_t uid ;
2005-04-17 02:20:36 +04:00
int use_gid ;
int use_uid ;
int debug ;
char * iocharset ;
2015-04-16 22:46:17 +03:00
} ;
2005-04-17 02:20:36 +04:00
2015-04-16 22:46:20 +03:00
struct befs_sb_info {
2005-04-17 02:20:36 +04:00
u32 magic1 ;
u32 block_size ;
u32 block_shift ;
int byte_order ;
befs_off_t num_blocks ;
befs_off_t used_blocks ;
u32 inode_size ;
u32 magic2 ;
/* Allocation group information */
u32 blocks_per_ag ;
u32 ag_shift ;
u32 num_ags ;
2016-08-09 16:46:04 +03:00
/* State of the superblock */
u32 flags ;
2016-08-09 16:46:05 +03:00
/* Journal log entry */
2005-04-17 02:20:36 +04:00
befs_block_run log_blocks ;
befs_off_t log_start ;
befs_off_t log_end ;
befs_inode_addr root_dir ;
befs_inode_addr indices ;
u32 magic3 ;
2015-04-16 22:46:17 +03:00
struct befs_mount_options mount_opts ;
2005-04-17 02:20:36 +04:00
struct nls_table * nls ;
2015-04-16 22:46:20 +03:00
} ;
2005-04-17 02:20:36 +04:00
2015-04-16 22:46:23 +03:00
struct befs_inode_info {
2005-04-17 02:20:36 +04:00
u32 i_flags ;
u32 i_type ;
befs_inode_addr i_inode_num ;
befs_inode_addr i_parent ;
befs_inode_addr i_attribute ;
union {
befs_data_stream ds ;
char symlink [ BEFS_SYMLINK_LEN ] ;
} i_data ;
struct inode vfs_inode ;
2015-04-16 22:46:23 +03:00
} ;
2005-04-17 02:20:36 +04:00
enum befs_err {
BEFS_OK ,
BEFS_ERR ,
BEFS_BAD_INODE ,
BEFS_BT_END ,
BEFS_BT_EMPTY ,
BEFS_BT_MATCH ,
2016-08-08 17:21:20 +03:00
BEFS_BT_OVERFLOW ,
2005-04-17 02:20:36 +04:00
BEFS_BT_NOT_FOUND
} ;
/****************************/
/* debug.c */
2014-04-04 01:50:23 +04:00
__printf ( 2 , 3 )
2005-04-17 02:20:36 +04:00
void befs_error ( const struct super_block * sb , const char * fmt , . . . ) ;
2014-04-04 01:50:23 +04:00
__printf ( 2 , 3 )
2005-04-17 02:20:36 +04:00
void befs_warning ( const struct super_block * sb , const char * fmt , . . . ) ;
2014-04-04 01:50:23 +04:00
__printf ( 2 , 3 )
2005-04-17 02:20:36 +04:00
void befs_debug ( const struct super_block * sb , const char * fmt , . . . ) ;
void befs_dump_super_block ( const struct super_block * sb , befs_super_block * ) ;
void befs_dump_inode ( const struct super_block * sb , befs_inode * ) ;
2005-12-24 22:28:55 +03:00
void befs_dump_index_entry ( const struct super_block * sb , befs_disk_btree_super * ) ;
2005-04-17 02:20:36 +04:00
void befs_dump_index_node ( const struct super_block * sb , befs_btree_nodehead * ) ;
/****************************/
/* Gets a pointer to the private portion of the super_block
* structure from the public part
*/
2015-04-16 22:46:20 +03:00
static inline struct befs_sb_info *
2005-04-17 02:20:36 +04:00
BEFS_SB ( const struct super_block * super )
{
2015-04-16 22:46:20 +03:00
return ( struct befs_sb_info * ) super - > s_fs_info ;
2005-04-17 02:20:36 +04:00
}
2015-04-16 22:46:23 +03:00
static inline struct befs_inode_info *
2005-04-17 02:20:36 +04:00
BEFS_I ( const struct inode * inode )
{
2015-03-19 14:28:04 +03:00
return container_of ( inode , struct befs_inode_info , vfs_inode ) ;
2005-04-17 02:20:36 +04:00
}
static inline befs_blocknr_t
2016-05-10 21:24:06 +03:00
iaddr2blockno ( struct super_block * sb , const befs_inode_addr * iaddr )
2005-04-17 02:20:36 +04:00
{
return ( ( iaddr - > allocation_group < < BEFS_SB ( sb ) - > ag_shift ) +
iaddr - > start ) ;
}
static inline befs_inode_addr
blockno2iaddr ( struct super_block * sb , befs_blocknr_t blockno )
{
befs_inode_addr iaddr ;
iaddr . allocation_group = blockno > > BEFS_SB ( sb ) - > ag_shift ;
iaddr . start =
blockno - ( iaddr . allocation_group < < BEFS_SB ( sb ) - > ag_shift ) ;
iaddr . len = 1 ;
return iaddr ;
}
static inline unsigned int
befs_iaddrs_per_block ( struct super_block * sb )
{
2005-12-24 22:28:55 +03:00
return BEFS_SB ( sb ) - > block_size / sizeof ( befs_disk_inode_addr ) ;
2005-04-17 02:20:36 +04:00
}
2005-12-24 09:13:13 +03:00
# include "endian.h"
2005-04-17 02:20:36 +04:00
# endif /* _LINUX_BEFS_H */