linux/fs/befs/befs.h
<<
>>
Prefs
   1/*
   2 * befs.h
   3 *
   4 * Copyright (C) 2001-2002 Will Dyson <will_dyson@pobox.com>
   5 * Copyright (C) 1999 Makoto Kato (m_kato@ga2.so-net.ne.jp)
   6 */
   7
   8#ifndef _LINUX_BEFS_H
   9#define _LINUX_BEFS_H
  10
  11#include "befs_fs_types.h"
  12
  13/* used in debug.c */
  14#define BEFS_VERSION "0.9.3"
  15
  16
  17typedef u64 befs_blocknr_t;
  18/*
  19 * BeFS in memory structures
  20 */
  21
  22typedef struct befs_mount_options {
  23        gid_t gid;
  24        uid_t uid;
  25        int use_gid;
  26        int use_uid;
  27        int debug;
  28        char *iocharset;
  29} befs_mount_options;
  30
  31typedef struct befs_sb_info {
  32        u32 magic1;
  33        u32 block_size;
  34        u32 block_shift;
  35        int byte_order;
  36        befs_off_t num_blocks;
  37        befs_off_t used_blocks;
  38        u32 inode_size;
  39        u32 magic2;
  40
  41        /* Allocation group information */
  42        u32 blocks_per_ag;
  43        u32 ag_shift;
  44        u32 num_ags;
  45
  46        /* jornal log entry */
  47        befs_block_run log_blocks;
  48        befs_off_t log_start;
  49        befs_off_t log_end;
  50
  51        befs_inode_addr root_dir;
  52        befs_inode_addr indices;
  53        u32 magic3;
  54
  55        befs_mount_options mount_opts;
  56        struct nls_table *nls;
  57
  58} befs_sb_info;
  59
  60typedef struct befs_inode_info {
  61        u32 i_flags;
  62        u32 i_type;
  63
  64        befs_inode_addr i_inode_num;
  65        befs_inode_addr i_parent;
  66        befs_inode_addr i_attribute;
  67
  68        union {
  69                befs_data_stream ds;
  70                char symlink[BEFS_SYMLINK_LEN];
  71        } i_data;
  72
  73        struct inode vfs_inode;
  74
  75} befs_inode_info;
  76
  77enum befs_err {
  78        BEFS_OK,
  79        BEFS_ERR,
  80        BEFS_BAD_INODE,
  81        BEFS_BT_END,
  82        BEFS_BT_EMPTY,
  83        BEFS_BT_MATCH,
  84        BEFS_BT_PARMATCH,
  85        BEFS_BT_NOT_FOUND
  86};
  87
  88
  89/****************************/
  90/* debug.c */
  91void befs_error(const struct super_block *sb, const char *fmt, ...);
  92void befs_warning(const struct super_block *sb, const char *fmt, ...);
  93void befs_debug(const struct super_block *sb, const char *fmt, ...);
  94
  95void befs_dump_super_block(const struct super_block *sb, befs_super_block *);
  96void befs_dump_inode(const struct super_block *sb, befs_inode *);
  97void befs_dump_index_entry(const struct super_block *sb, befs_disk_btree_super *);
  98void befs_dump_index_node(const struct super_block *sb, befs_btree_nodehead *);
  99/****************************/
 100
 101
 102/* Gets a pointer to the private portion of the super_block
 103 * structure from the public part
 104 */
 105static inline befs_sb_info *
 106BEFS_SB(const struct super_block *super)
 107{
 108        return (befs_sb_info *) super->s_fs_info;
 109}
 110
 111static inline befs_inode_info *
 112BEFS_I(const struct inode *inode)
 113{
 114        return list_entry(inode, struct befs_inode_info, vfs_inode);
 115}
 116
 117static inline befs_blocknr_t
 118iaddr2blockno(struct super_block *sb, befs_inode_addr * iaddr)
 119{
 120        return ((iaddr->allocation_group << BEFS_SB(sb)->ag_shift) +
 121                iaddr->start);
 122}
 123
 124static inline befs_inode_addr
 125blockno2iaddr(struct super_block *sb, befs_blocknr_t blockno)
 126{
 127        befs_inode_addr iaddr;
 128        iaddr.allocation_group = blockno >> BEFS_SB(sb)->ag_shift;
 129        iaddr.start =
 130            blockno - (iaddr.allocation_group << BEFS_SB(sb)->ag_shift);
 131        iaddr.len = 1;
 132
 133        return iaddr;
 134}
 135
 136static inline unsigned int
 137befs_iaddrs_per_block(struct super_block *sb)
 138{
 139        return BEFS_SB(sb)->block_size / sizeof (befs_disk_inode_addr);
 140}
 141
 142static inline int
 143befs_iaddr_is_empty(befs_inode_addr * iaddr)
 144{
 145        return (!iaddr->allocation_group) && (!iaddr->start) && (!iaddr->len);
 146}
 147
 148static inline size_t
 149befs_brun_size(struct super_block *sb, befs_block_run run)
 150{
 151        return BEFS_SB(sb)->block_size * run.len;
 152}
 153
 154#include "endian.h"
 155
 156#endif                          /* _LINUX_BEFS_H */
 157