Line data Source code
1 : #include <linux/fs.h>
2 : #include <linux/ext2_fs.h>
3 :
4 : /*
5 : * ext2 mount options
6 : */
7 : struct ext2_mount_options {
8 : unsigned long s_mount_opt;
9 : uid_t s_resuid;
10 : gid_t s_resgid;
11 : };
12 1 :
13 : /*
14 : * second extended file system inode data in memory
15 : */
16 : struct ext2_inode_info {
17 : __le32 i_data[15];
18 : __u32 i_flags;
19 : __u32 i_faddr;
20 : __u8 i_frag_no;
21 : __u8 i_frag_size;
22 : __u16 i_state;
23 : __u32 i_file_acl;
24 : __u32 i_dir_acl;
25 : __u32 i_dtime;
26 :
27 : /*
28 : * i_block_group is the number of the block group which contains
29 : * this file's inode. Constant across the lifetime of the inode,
30 : * it is used for making block allocation decisions - we try to
31 : * place a file's data blocks near its inode block, and new inodes
32 : * near to their parent directory's inode.
33 : */
34 : __u32 i_block_group;
35 :
36 : /* block reservation info */
37 : struct ext2_block_alloc_info *i_block_alloc_info;
38 :
39 : __u32 i_dir_start_lookup;
40 : #ifdef CONFIG_EXT2_FS_XATTR
41 : /*
42 : * Extended attributes can be read independently of the main file
43 : * data. Taking i_mutex even when reading would cause contention
44 : * between readers of EAs and writers of regular file data, so
45 : * instead we synchronize on xattr_sem when reading or changing
46 : * EAs.
47 : */
48 : struct rw_semaphore xattr_sem;
49 : #endif
50 : rwlock_t i_meta_lock;
51 :
52 : /*
53 : * truncate_mutex is for serialising ext2_truncate() against
54 : * ext2_getblock(). It also protects the internals of the inode's
55 : * reservation data structures: ext2_reserve_window and
56 : * ext2_reserve_window_node.
57 : */
58 : struct mutex truncate_mutex;
59 : struct inode vfs_inode;
60 : struct list_head i_orphan; /* unlinked but open inodes */
61 : };
62 :
63 : /*
64 : * Inode dynamic state flags
65 : */
66 : #define EXT2_STATE_NEW 0x00000001 /* inode is newly created */
67 :
68 :
69 : /*
70 : * Function prototypes
71 : */
72 :
73 : /*
74 : * Ok, these declarations are also in <linux/kernel.h> but none of the
75 : * ext2 source programs needs to include it so they are duplicated here.
76 : */
77 :
78 : static inline struct ext2_inode_info *EXT2_I(struct inode *inode)
79 : {
80 4329 : return container_of(inode, struct ext2_inode_info, vfs_inode);
81 : }
82 :
83 : /* balloc.c */
84 : extern int ext2_bg_has_super(struct super_block *sb, int group);
85 : extern unsigned long ext2_bg_num_gdb(struct super_block *sb, int group);
86 : extern ext2_fsblk_t ext2_new_block(struct inode *, unsigned long, int *);
87 : extern ext2_fsblk_t ext2_new_blocks(struct inode *, unsigned long,
88 : unsigned long *, int *);
89 : extern void ext2_free_blocks (struct inode *, unsigned long,
90 : unsigned long);
91 : extern unsigned long ext2_count_free_blocks (struct super_block *);
92 : extern unsigned long ext2_count_dirs (struct super_block *);
93 : extern void ext2_check_blocks_bitmap (struct super_block *);
94 : extern struct ext2_group_desc * ext2_get_group_desc(struct super_block * sb,
95 : unsigned int block_group,
96 : struct buffer_head ** bh);
97 : extern void ext2_discard_reservation (struct inode *);
98 : extern int ext2_should_retry_alloc(struct super_block *sb, int *retries);
99 : extern void ext2_init_block_alloc_info(struct inode *);
100 : extern void ext2_rsv_window_add(struct super_block *sb, struct ext2_reserve_window_node *rsv);
101 :
102 : /* dir.c */
103 : extern int ext2_add_link (struct dentry *, struct inode *);
104 : extern ino_t ext2_inode_by_name(struct inode *, struct qstr *);
105 : extern int ext2_make_empty(struct inode *, struct inode *);
106 : extern struct ext2_dir_entry_2 * ext2_find_entry (struct inode *,struct qstr *, struct page **);
107 : extern int ext2_delete_entry (struct ext2_dir_entry_2 *, struct page *);
108 : extern int ext2_empty_dir (struct inode *);
109 : extern struct ext2_dir_entry_2 * ext2_dotdot (struct inode *, struct page **);
110 : extern void ext2_set_link(struct inode *, struct ext2_dir_entry_2 *, struct page *, struct inode *, int);
111 :
112 : /* ialloc.c */
113 : extern struct inode * ext2_new_inode (struct inode *, int);
114 : extern void ext2_free_inode (struct inode *);
115 : extern unsigned long ext2_count_free_inodes (struct super_block *);
116 : extern void ext2_check_inodes_bitmap (struct super_block *);
117 : extern unsigned long ext2_count_free (struct buffer_head *, unsigned);
118 :
119 : /* inode.c */
120 : extern struct inode *ext2_iget (struct super_block *, unsigned long);
121 : extern int ext2_write_inode (struct inode *, int);
122 : extern void ext2_delete_inode (struct inode *);
123 : extern int ext2_sync_inode (struct inode *);
124 : extern int ext2_get_block(struct inode *, sector_t, struct buffer_head *, int);
125 : extern void ext2_truncate (struct inode *);
126 : extern int ext2_setattr (struct dentry *, struct iattr *);
127 : extern void ext2_set_inode_flags(struct inode *inode);
128 : extern void ext2_get_inode_flags(struct ext2_inode_info *);
129 : extern int ext2_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
130 : u64 start, u64 len);
131 : int __ext2_write_begin(struct file *file, struct address_space *mapping,
132 : loff_t pos, unsigned len, unsigned flags,
133 : struct page **pagep, void **fsdata);
134 :
135 : /* ioctl.c */
136 : extern long ext2_ioctl(struct file *, unsigned int, unsigned long);
137 : extern long ext2_compat_ioctl(struct file *, unsigned int, unsigned long);
138 :
139 : /* namei.c */
140 : struct dentry *ext2_get_parent(struct dentry *child);
141 :
142 : /* super.c */
143 : extern void ext2_error (struct super_block *, const char *, const char *, ...)
144 : __attribute__ ((format (printf, 3, 4)));
145 : extern void ext2_msg(struct super_block *, const char *, const char *, ...)
146 : __attribute__ ((format (printf, 3, 4)));
147 : extern void ext2_update_dynamic_rev (struct super_block *sb);
148 : extern void ext2_write_super (struct super_block *);
149 :
150 : /*
151 : * Inodes and files operations
152 : */
153 :
154 : /* dir.c */
155 1 : extern const struct file_operations ext2_dir_operations;
156 :
157 : /* file.c */
158 : extern int ext2_fsync(struct file *file, struct dentry *dentry, int datasync);
159 1 : extern const struct inode_operations ext2_file_inode_operations;
160 1 : extern const struct file_operations ext2_file_operations;
161 : extern const struct file_operations ext2_xip_file_operations;
162 :
163 : /* inode.c */
164 1 : extern const struct address_space_operations ext2_aops;
165 1 : extern const struct address_space_operations ext2_aops_xip;
166 1 : extern const struct address_space_operations ext2_nobh_aops;
167 :
168 : /* namei.c */
169 1 : extern const struct inode_operations ext2_dir_inode_operations;
170 1 : extern const struct inode_operations ext2_special_inode_operations;
171 :
172 : /* symlink.c */
173 1 : extern const struct inode_operations ext2_fast_symlink_inode_operations;
174 1 : extern const struct inode_operations ext2_symlink_inode_operations;
175 :
176 : static inline ext2_fsblk_t
177 : ext2_group_first_block_no(struct super_block *sb, unsigned long group_no)
178 : {
179 19614 : return group_no * (ext2_fsblk_t)EXT2_BLOCKS_PER_GROUP(sb) +
180 2802 : le32_to_cpu(EXT2_SB(sb)->s_es->s_first_data_block);
181 : }
|