6b13f685e
김민수
BSP 최초 추가
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
#ifndef _EFS_EFS_H_
#define _EFS_EFS_H_
#include <linux/fs.h>
#include <asm/uaccess.h>
#define EFS_VERSION "1.0a"
static const char cprt[] = "EFS: "EFS_VERSION" - (c) 1999 Al Smith <Al.Smith@aeschi.ch.eu.org>";
#define EFS_BLOCKSIZE_BITS 9
#define EFS_BLOCKSIZE (1 << EFS_BLOCKSIZE_BITS)
typedef int32_t efs_block_t;
typedef uint32_t efs_ino_t;
#define EFS_DIRECTEXTENTS 12
typedef union extent_u {
unsigned char raw[8];
struct extent_s {
unsigned int ex_magic:8;
unsigned int ex_bn:24;
unsigned int ex_length:8;
unsigned int ex_offset:24;
} cooked;
} efs_extent;
typedef struct edevs {
__be16 odev;
__be32 ndev;
} efs_devs;
struct efs_dinode {
__be16 di_mode;
__be16 di_nlink;
__be16 di_uid;
__be16 di_gid;
__be32 di_size;
__be32 di_atime;
__be32 di_mtime;
__be32 di_ctime;
__be32 di_gen;
__be16 di_numextents;
u_char di_version;
u_char di_spare;
union di_addr {
efs_extent di_extents[EFS_DIRECTEXTENTS];
efs_devs di_dev;
} di_u;
};
struct efs_inode_info {
int numextents;
int lastextent;
efs_extent extents[EFS_DIRECTEXTENTS];
struct inode vfs_inode;
};
#include <linux/efs_fs_sb.h>
#define EFS_DIRBSIZE_BITS EFS_BLOCKSIZE_BITS
#define EFS_DIRBSIZE (1 << EFS_DIRBSIZE_BITS)
struct efs_dentry {
__be32 inode;
unsigned char namelen;
char name[3];
};
#define EFS_DENTSIZE (sizeof(struct efs_dentry) - 3 + 1)
#define EFS_MAXNAMELEN ((1 << (sizeof(char) * 8)) - 1)
#define EFS_DIRBLK_HEADERSIZE 4
#define EFS_DIRBLK_MAGIC 0xbeef /* moo */
struct efs_dir {
__be16 magic;
unsigned char firstused;
unsigned char slots;
unsigned char space[EFS_DIRBSIZE - EFS_DIRBLK_HEADERSIZE];
};
#define EFS_MAXENTS \
((EFS_DIRBSIZE - EFS_DIRBLK_HEADERSIZE) / \
(EFS_DENTSIZE + sizeof(char)))
#define EFS_SLOTAT(dir, slot) EFS_REALOFF((dir)->space[slot])
#define EFS_REALOFF(offset) ((offset << 1))
static inline struct efs_inode_info *INODE_INFO(struct inode *inode)
{
return container_of(inode, struct efs_inode_info, vfs_inode);
}
static inline struct efs_sb_info *SUPER_INFO(struct super_block *sb)
{
return sb->s_fs_info;
}
struct statfs;
struct fid;
extern const struct inode_operations efs_dir_inode_operations;
extern const struct file_operations efs_dir_operations;
extern const struct address_space_operations efs_symlink_aops;
extern struct inode *efs_iget(struct super_block *, unsigned long);
extern efs_block_t efs_map_block(struct inode *, efs_block_t);
extern int efs_get_block(struct inode *, sector_t, struct buffer_head *, int);
extern struct dentry *efs_lookup(struct inode *, struct dentry *, unsigned int);
extern struct dentry *efs_fh_to_dentry(struct super_block *sb, struct fid *fid,
int fh_len, int fh_type);
extern struct dentry *efs_fh_to_parent(struct super_block *sb, struct fid *fid,
int fh_len, int fh_type);
extern struct dentry *efs_get_parent(struct dentry *);
extern int efs_bmap(struct inode *, int);
#endif /* _EFS_EFS_H_ */
|