Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/fs/befs/befs.h
15112 views
1
/*
2
* befs.h
3
*
4
* Copyright (C) 2001-2002 Will Dyson <[email protected]>
5
* Copyright (C) 1999 Makoto Kato ([email protected])
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
17
typedef u64 befs_blocknr_t;
18
/*
19
* BeFS in memory structures
20
*/
21
22
typedef 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
31
typedef 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
60
typedef 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
77
enum 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 */
91
void befs_error(const struct super_block *sb, const char *fmt, ...);
92
void befs_warning(const struct super_block *sb, const char *fmt, ...);
93
void befs_debug(const struct super_block *sb, const char *fmt, ...);
94
95
void befs_dump_super_block(const struct super_block *sb, befs_super_block *);
96
void befs_dump_inode(const struct super_block *sb, befs_inode *);
97
void befs_dump_index_entry(const struct super_block *sb, befs_disk_btree_super *);
98
void 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
*/
105
static inline befs_sb_info *
106
BEFS_SB(const struct super_block *super)
107
{
108
return (befs_sb_info *) super->s_fs_info;
109
}
110
111
static inline befs_inode_info *
112
BEFS_I(const struct inode *inode)
113
{
114
return list_entry(inode, struct befs_inode_info, vfs_inode);
115
}
116
117
static inline befs_blocknr_t
118
iaddr2blockno(struct super_block *sb, befs_inode_addr * iaddr)
119
{
120
return ((iaddr->allocation_group << BEFS_SB(sb)->ag_shift) +
121
iaddr->start);
122
}
123
124
static inline befs_inode_addr
125
blockno2iaddr(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
136
static inline unsigned int
137
befs_iaddrs_per_block(struct super_block *sb)
138
{
139
return BEFS_SB(sb)->block_size / sizeof (befs_disk_inode_addr);
140
}
141
142
static inline int
143
befs_iaddr_is_empty(befs_inode_addr * iaddr)
144
{
145
return (!iaddr->allocation_group) && (!iaddr->start) && (!iaddr->len);
146
}
147
148
static inline size_t
149
befs_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
158