diff options
Diffstat (limited to 'fs/ocfs2/alloc.h')
-rw-r--r-- | fs/ocfs2/alloc.h | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/fs/ocfs2/alloc.h b/fs/ocfs2/alloc.h index 70257c84cfbe..cceff5c37f47 100644 --- a/fs/ocfs2/alloc.h +++ b/fs/ocfs2/alloc.h | |||
@@ -45,7 +45,9 @@ | |||
45 | * | 45 | * |
46 | * ocfs2_extent_tree contains info for the root of the b-tree, it must have a | 46 | * ocfs2_extent_tree contains info for the root of the b-tree, it must have a |
47 | * root ocfs2_extent_list and a root_bh so that they can be used in the b-tree | 47 | * root ocfs2_extent_list and a root_bh so that they can be used in the b-tree |
48 | * functions. | 48 | * functions. With metadata ecc, we now call different journal_access |
49 | * functions for each type of metadata, so it must have the | ||
50 | * root_journal_access function. | ||
49 | * ocfs2_extent_tree_operations abstract the normal operations we do for | 51 | * ocfs2_extent_tree_operations abstract the normal operations we do for |
50 | * the root of extent b-tree. | 52 | * the root of extent b-tree. |
51 | */ | 53 | */ |
@@ -54,6 +56,7 @@ struct ocfs2_extent_tree { | |||
54 | struct ocfs2_extent_tree_operations *et_ops; | 56 | struct ocfs2_extent_tree_operations *et_ops; |
55 | struct buffer_head *et_root_bh; | 57 | struct buffer_head *et_root_bh; |
56 | struct ocfs2_extent_list *et_root_el; | 58 | struct ocfs2_extent_list *et_root_el; |
59 | ocfs2_journal_access_func et_root_journal_access; | ||
57 | void *et_object; | 60 | void *et_object; |
58 | unsigned int et_max_leaf_clusters; | 61 | unsigned int et_max_leaf_clusters; |
59 | }; | 62 | }; |
@@ -68,10 +71,18 @@ void ocfs2_init_dinode_extent_tree(struct ocfs2_extent_tree *et, | |||
68 | void ocfs2_init_xattr_tree_extent_tree(struct ocfs2_extent_tree *et, | 71 | void ocfs2_init_xattr_tree_extent_tree(struct ocfs2_extent_tree *et, |
69 | struct inode *inode, | 72 | struct inode *inode, |
70 | struct buffer_head *bh); | 73 | struct buffer_head *bh); |
74 | struct ocfs2_xattr_value_buf; | ||
71 | void ocfs2_init_xattr_value_extent_tree(struct ocfs2_extent_tree *et, | 75 | void ocfs2_init_xattr_value_extent_tree(struct ocfs2_extent_tree *et, |
72 | struct inode *inode, | 76 | struct inode *inode, |
73 | struct buffer_head *bh, | 77 | struct ocfs2_xattr_value_buf *vb); |
74 | struct ocfs2_xattr_value_root *xv); | 78 | |
79 | /* | ||
80 | * Read an extent block into *bh. If *bh is NULL, a bh will be | ||
81 | * allocated. This is a cached read. The extent block will be validated | ||
82 | * with ocfs2_validate_extent_block(). | ||
83 | */ | ||
84 | int ocfs2_read_extent_block(struct inode *inode, u64 eb_blkno, | ||
85 | struct buffer_head **bh); | ||
75 | 86 | ||
76 | struct ocfs2_alloc_context; | 87 | struct ocfs2_alloc_context; |
77 | int ocfs2_insert_extent(struct ocfs2_super *osb, | 88 | int ocfs2_insert_extent(struct ocfs2_super *osb, |
@@ -110,6 +121,11 @@ int ocfs2_remove_extent(struct inode *inode, | |||
110 | u32 cpos, u32 len, handle_t *handle, | 121 | u32 cpos, u32 len, handle_t *handle, |
111 | struct ocfs2_alloc_context *meta_ac, | 122 | struct ocfs2_alloc_context *meta_ac, |
112 | struct ocfs2_cached_dealloc_ctxt *dealloc); | 123 | struct ocfs2_cached_dealloc_ctxt *dealloc); |
124 | int ocfs2_remove_btree_range(struct inode *inode, | ||
125 | struct ocfs2_extent_tree *et, | ||
126 | u32 cpos, u32 phys_cpos, u32 len, | ||
127 | struct ocfs2_cached_dealloc_ctxt *dealloc); | ||
128 | |||
113 | int ocfs2_num_free_extents(struct ocfs2_super *osb, | 129 | int ocfs2_num_free_extents(struct ocfs2_super *osb, |
114 | struct inode *inode, | 130 | struct inode *inode, |
115 | struct ocfs2_extent_tree *et); | 131 | struct ocfs2_extent_tree *et); |
@@ -167,10 +183,18 @@ int __ocfs2_flush_truncate_log(struct ocfs2_super *osb); | |||
167 | */ | 183 | */ |
168 | struct ocfs2_cached_dealloc_ctxt { | 184 | struct ocfs2_cached_dealloc_ctxt { |
169 | struct ocfs2_per_slot_free_list *c_first_suballocator; | 185 | struct ocfs2_per_slot_free_list *c_first_suballocator; |
186 | struct ocfs2_cached_block_free *c_global_allocator; | ||
170 | }; | 187 | }; |
171 | static inline void ocfs2_init_dealloc_ctxt(struct ocfs2_cached_dealloc_ctxt *c) | 188 | static inline void ocfs2_init_dealloc_ctxt(struct ocfs2_cached_dealloc_ctxt *c) |
172 | { | 189 | { |
173 | c->c_first_suballocator = NULL; | 190 | c->c_first_suballocator = NULL; |
191 | c->c_global_allocator = NULL; | ||
192 | } | ||
193 | int ocfs2_cache_cluster_dealloc(struct ocfs2_cached_dealloc_ctxt *ctxt, | ||
194 | u64 blkno, unsigned int bit); | ||
195 | static inline int ocfs2_dealloc_has_cluster(struct ocfs2_cached_dealloc_ctxt *c) | ||
196 | { | ||
197 | return c->c_global_allocator != NULL; | ||
174 | } | 198 | } |
175 | int ocfs2_run_deallocs(struct ocfs2_super *osb, | 199 | int ocfs2_run_deallocs(struct ocfs2_super *osb, |
176 | struct ocfs2_cached_dealloc_ctxt *ctxt); | 200 | struct ocfs2_cached_dealloc_ctxt *ctxt); |