@@ -33,22 +33,9 @@ struct ext2_inode_info {
33
33
*/
34
34
__u32 i_block_group ;
35
35
36
- /*
37
- * i_next_alloc_block is the logical (file-relative) number of the
38
- * most-recently-allocated block in this file. Yes, it is misnamed.
39
- * We use this for detecting linearly ascending allocation requests.
40
- */
41
- __u32 i_next_alloc_block ;
36
+ /* block reservation info */
37
+ struct ext2_block_alloc_info * i_block_alloc_info ;
42
38
43
- /*
44
- * i_next_alloc_goal is the *physical* companion to i_next_alloc_block.
45
- * it the the physical block number of the block which was most-recently
46
- * allocated to this file. This give us the goal (target) for the next
47
- * allocation when we detect linearly ascending requests.
48
- */
49
- __u32 i_next_alloc_goal ;
50
- __u32 i_prealloc_block ;
51
- __u32 i_prealloc_count ;
52
39
__u32 i_dir_start_lookup ;
53
40
#ifdef CONFIG_EXT2_FS_XATTR
54
41
/*
@@ -65,7 +52,16 @@ struct ext2_inode_info {
65
52
struct posix_acl * i_default_acl ;
66
53
#endif
67
54
rwlock_t i_meta_lock ;
55
+
56
+ /*
57
+ * truncate_mutex is for serialising ext2_truncate() against
58
+ * ext2_getblock(). It also protects the internals of the inode's
59
+ * reservation data structures: ext2_reserve_window and
60
+ * ext2_reserve_window_node.
61
+ */
62
+ struct mutex truncate_mutex ;
68
63
struct inode vfs_inode ;
64
+ struct list_head i_orphan ; /* unlinked but open inodes */
69
65
};
70
66
71
67
/*
@@ -91,8 +87,9 @@ static inline struct ext2_inode_info *EXT2_I(struct inode *inode)
91
87
/* balloc.c */
92
88
extern int ext2_bg_has_super (struct super_block * sb , int group );
93
89
extern unsigned long ext2_bg_num_gdb (struct super_block * sb , int group );
94
- extern int ext2_new_block (struct inode * , unsigned long ,
95
- __u32 * , __u32 * , int * );
90
+ extern ext2_fsblk_t ext2_new_block (struct inode * , unsigned long , int * );
91
+ extern ext2_fsblk_t ext2_new_blocks (struct inode * , unsigned long ,
92
+ unsigned long * , int * );
96
93
extern void ext2_free_blocks (struct inode * , unsigned long ,
97
94
unsigned long );
98
95
extern unsigned long ext2_count_free_blocks (struct super_block * );
@@ -101,6 +98,10 @@ extern void ext2_check_blocks_bitmap (struct super_block *);
101
98
extern struct ext2_group_desc * ext2_get_group_desc (struct super_block * sb ,
102
99
unsigned int block_group ,
103
100
struct buffer_head * * bh );
101
+ extern void ext2_discard_reservation (struct inode * );
102
+ extern int ext2_should_retry_alloc (struct super_block * sb , int * retries );
103
+ extern void ext2_init_block_alloc_info (struct inode * );
104
+ extern void ext2_rsv_window_add (struct super_block * sb , struct ext2_reserve_window_node * rsv );
104
105
105
106
/* dir.c */
106
107
extern int ext2_add_link (struct dentry * , struct inode * );
@@ -128,7 +129,6 @@ extern int ext2_write_inode (struct inode *, int);
128
129
extern void ext2_put_inode (struct inode * );
129
130
extern void ext2_delete_inode (struct inode * );
130
131
extern int ext2_sync_inode (struct inode * );
131
- extern void ext2_discard_prealloc (struct inode * );
132
132
extern int ext2_get_block (struct inode * , sector_t , struct buffer_head * , int );
133
133
extern void ext2_truncate (struct inode * );
134
134
extern int ext2_setattr (struct dentry * , struct iattr * );
0 commit comments