aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/ocfs2/alloc.c93
-rw-r--r--fs/ocfs2/inode.c4
-rw-r--r--fs/ocfs2/inode.h6
3 files changed, 44 insertions, 59 deletions
diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
index c3edd02c74e8..072f7fe54073 100644
--- a/fs/ocfs2/alloc.c
+++ b/fs/ocfs2/alloc.c
@@ -79,18 +79,16 @@ struct ocfs2_extent_tree_operations {
79 * that value. new_clusters is the delta, and must be 79 * that value. new_clusters is the delta, and must be
80 * added to the total. Required. 80 * added to the total. Required.
81 */ 81 */
82 void (*eo_update_clusters)(struct inode *inode, 82 void (*eo_update_clusters)(struct ocfs2_extent_tree *et,
83 struct ocfs2_extent_tree *et,
84 u32 new_clusters); 83 u32 new_clusters);
85 84
86 /* 85 /*
87 * If ->eo_insert_check() exists, it is called before rec is 86 * If ->eo_insert_check() exists, it is called before rec is
88 * inserted into the extent tree. It is optional. 87 * inserted into the extent tree. It is optional.
89 */ 88 */
90 int (*eo_insert_check)(struct inode *inode, 89 int (*eo_insert_check)(struct ocfs2_extent_tree *et,
91 struct ocfs2_extent_tree *et,
92 struct ocfs2_extent_rec *rec); 90 struct ocfs2_extent_rec *rec);
93 int (*eo_sanity_check)(struct inode *inode, struct ocfs2_extent_tree *et); 91 int (*eo_sanity_check)(struct ocfs2_extent_tree *et);
94 92
95 /* 93 /*
96 * -------------------------------------------------------------- 94 * --------------------------------------------------------------
@@ -109,8 +107,7 @@ struct ocfs2_extent_tree_operations {
109 * it exists. If it does not, et->et_max_leaf_clusters is set 107 * it exists. If it does not, et->et_max_leaf_clusters is set
110 * to 0 (unlimited). Optional. 108 * to 0 (unlimited). Optional.
111 */ 109 */
112 void (*eo_fill_max_leaf_clusters)(struct inode *inode, 110 void (*eo_fill_max_leaf_clusters)(struct ocfs2_extent_tree *et);
113 struct ocfs2_extent_tree *et);
114}; 111};
115 112
116 113
@@ -121,14 +118,11 @@ struct ocfs2_extent_tree_operations {
121static u64 ocfs2_dinode_get_last_eb_blk(struct ocfs2_extent_tree *et); 118static u64 ocfs2_dinode_get_last_eb_blk(struct ocfs2_extent_tree *et);
122static void ocfs2_dinode_set_last_eb_blk(struct ocfs2_extent_tree *et, 119static void ocfs2_dinode_set_last_eb_blk(struct ocfs2_extent_tree *et,
123 u64 blkno); 120 u64 blkno);
124static void ocfs2_dinode_update_clusters(struct inode *inode, 121static void ocfs2_dinode_update_clusters(struct ocfs2_extent_tree *et,
125 struct ocfs2_extent_tree *et,
126 u32 clusters); 122 u32 clusters);
127static int ocfs2_dinode_insert_check(struct inode *inode, 123static int ocfs2_dinode_insert_check(struct ocfs2_extent_tree *et,
128 struct ocfs2_extent_tree *et,
129 struct ocfs2_extent_rec *rec); 124 struct ocfs2_extent_rec *rec);
130static int ocfs2_dinode_sanity_check(struct inode *inode, 125static int ocfs2_dinode_sanity_check(struct ocfs2_extent_tree *et);
131 struct ocfs2_extent_tree *et);
132static void ocfs2_dinode_fill_root_el(struct ocfs2_extent_tree *et); 126static void ocfs2_dinode_fill_root_el(struct ocfs2_extent_tree *et);
133static struct ocfs2_extent_tree_operations ocfs2_dinode_et_ops = { 127static struct ocfs2_extent_tree_operations ocfs2_dinode_et_ops = {
134 .eo_set_last_eb_blk = ocfs2_dinode_set_last_eb_blk, 128 .eo_set_last_eb_blk = ocfs2_dinode_set_last_eb_blk,
@@ -156,40 +150,37 @@ static u64 ocfs2_dinode_get_last_eb_blk(struct ocfs2_extent_tree *et)
156 return le64_to_cpu(di->i_last_eb_blk); 150 return le64_to_cpu(di->i_last_eb_blk);
157} 151}
158 152
159static void ocfs2_dinode_update_clusters(struct inode *inode, 153static void ocfs2_dinode_update_clusters(struct ocfs2_extent_tree *et,
160 struct ocfs2_extent_tree *et,
161 u32 clusters) 154 u32 clusters)
162{ 155{
156 struct ocfs2_inode_info *oi = cache_info_to_inode(et->et_ci);
163 struct ocfs2_dinode *di = et->et_object; 157 struct ocfs2_dinode *di = et->et_object;
164 158
165 le32_add_cpu(&di->i_clusters, clusters); 159 le32_add_cpu(&di->i_clusters, clusters);
166 spin_lock(&OCFS2_I(inode)->ip_lock); 160 spin_lock(&oi->ip_lock);
167 OCFS2_I(inode)->ip_clusters = le32_to_cpu(di->i_clusters); 161 oi->ip_clusters = le32_to_cpu(di->i_clusters);
168 spin_unlock(&OCFS2_I(inode)->ip_lock); 162 spin_unlock(&oi->ip_lock);
169} 163}
170 164
171static int ocfs2_dinode_insert_check(struct inode *inode, 165static int ocfs2_dinode_insert_check(struct ocfs2_extent_tree *et,
172 struct ocfs2_extent_tree *et,
173 struct ocfs2_extent_rec *rec) 166 struct ocfs2_extent_rec *rec)
174{ 167{
175 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); 168 struct ocfs2_inode_info *oi = cache_info_to_inode(et->et_ci);
169 struct ocfs2_super *osb = OCFS2_SB(oi->vfs_inode.i_sb);
176 170
177 BUG_ON(OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL); 171 BUG_ON(oi->ip_dyn_features & OCFS2_INLINE_DATA_FL);
178 mlog_bug_on_msg(!ocfs2_sparse_alloc(osb) && 172 mlog_bug_on_msg(!ocfs2_sparse_alloc(osb) &&
179 (OCFS2_I(inode)->ip_clusters != 173 (oi->ip_clusters != le32_to_cpu(rec->e_cpos)),
180 le32_to_cpu(rec->e_cpos)),
181 "Device %s, asking for sparse allocation: inode %llu, " 174 "Device %s, asking for sparse allocation: inode %llu, "
182 "cpos %u, clusters %u\n", 175 "cpos %u, clusters %u\n",
183 osb->dev_str, 176 osb->dev_str,
184 (unsigned long long)OCFS2_I(inode)->ip_blkno, 177 (unsigned long long)oi->ip_blkno,
185 rec->e_cpos, 178 rec->e_cpos, oi->ip_clusters);
186 OCFS2_I(inode)->ip_clusters);
187 179
188 return 0; 180 return 0;
189} 181}
190 182
191static int ocfs2_dinode_sanity_check(struct inode *inode, 183static int ocfs2_dinode_sanity_check(struct ocfs2_extent_tree *et)
192 struct ocfs2_extent_tree *et)
193{ 184{
194 struct ocfs2_dinode *di = et->et_object; 185 struct ocfs2_dinode *di = et->et_object;
195 186
@@ -229,8 +220,7 @@ static u64 ocfs2_xattr_value_get_last_eb_blk(struct ocfs2_extent_tree *et)
229 return le64_to_cpu(vb->vb_xv->xr_last_eb_blk); 220 return le64_to_cpu(vb->vb_xv->xr_last_eb_blk);
230} 221}
231 222
232static void ocfs2_xattr_value_update_clusters(struct inode *inode, 223static void ocfs2_xattr_value_update_clusters(struct ocfs2_extent_tree *et,
233 struct ocfs2_extent_tree *et,
234 u32 clusters) 224 u32 clusters)
235{ 225{
236 struct ocfs2_xattr_value_buf *vb = et->et_object; 226 struct ocfs2_xattr_value_buf *vb = et->et_object;
@@ -252,12 +242,11 @@ static void ocfs2_xattr_tree_fill_root_el(struct ocfs2_extent_tree *et)
252 et->et_root_el = &xb->xb_attrs.xb_root.xt_list; 242 et->et_root_el = &xb->xb_attrs.xb_root.xt_list;
253} 243}
254 244
255static void ocfs2_xattr_tree_fill_max_leaf_clusters(struct inode *inode, 245static void ocfs2_xattr_tree_fill_max_leaf_clusters(struct ocfs2_extent_tree *et)
256 struct ocfs2_extent_tree *et)
257{ 246{
247 struct super_block *sb = ocfs2_metadata_cache_get_super(et->et_ci);
258 et->et_max_leaf_clusters = 248 et->et_max_leaf_clusters =
259 ocfs2_clusters_for_bytes(inode->i_sb, 249 ocfs2_clusters_for_bytes(sb, OCFS2_MAX_XATTR_TREE_LEAF_SIZE);
260 OCFS2_MAX_XATTR_TREE_LEAF_SIZE);
261} 250}
262 251
263static void ocfs2_xattr_tree_set_last_eb_blk(struct ocfs2_extent_tree *et, 252static void ocfs2_xattr_tree_set_last_eb_blk(struct ocfs2_extent_tree *et,
@@ -277,8 +266,7 @@ static u64 ocfs2_xattr_tree_get_last_eb_blk(struct ocfs2_extent_tree *et)
277 return le64_to_cpu(xt->xt_last_eb_blk); 266 return le64_to_cpu(xt->xt_last_eb_blk);
278} 267}
279 268
280static void ocfs2_xattr_tree_update_clusters(struct inode *inode, 269static void ocfs2_xattr_tree_update_clusters(struct ocfs2_extent_tree *et,
281 struct ocfs2_extent_tree *et,
282 u32 clusters) 270 u32 clusters)
283{ 271{
284 struct ocfs2_xattr_block *xb = et->et_object; 272 struct ocfs2_xattr_block *xb = et->et_object;
@@ -309,8 +297,7 @@ static u64 ocfs2_dx_root_get_last_eb_blk(struct ocfs2_extent_tree *et)
309 return le64_to_cpu(dx_root->dr_last_eb_blk); 297 return le64_to_cpu(dx_root->dr_last_eb_blk);
310} 298}
311 299
312static void ocfs2_dx_root_update_clusters(struct inode *inode, 300static void ocfs2_dx_root_update_clusters(struct ocfs2_extent_tree *et,
313 struct ocfs2_extent_tree *et,
314 u32 clusters) 301 u32 clusters)
315{ 302{
316 struct ocfs2_dx_root_block *dx_root = et->et_object; 303 struct ocfs2_dx_root_block *dx_root = et->et_object;
@@ -318,8 +305,7 @@ static void ocfs2_dx_root_update_clusters(struct inode *inode,
318 le32_add_cpu(&dx_root->dr_clusters, clusters); 305 le32_add_cpu(&dx_root->dr_clusters, clusters);
319} 306}
320 307
321static int ocfs2_dx_root_sanity_check(struct inode *inode, 308static int ocfs2_dx_root_sanity_check(struct ocfs2_extent_tree *et)
322 struct ocfs2_extent_tree *et)
323{ 309{
324 struct ocfs2_dx_root_block *dx_root = et->et_object; 310 struct ocfs2_dx_root_block *dx_root = et->et_object;
325 311
@@ -362,7 +348,7 @@ static void __ocfs2_init_extent_tree(struct ocfs2_extent_tree *et,
362 if (!et->et_ops->eo_fill_max_leaf_clusters) 348 if (!et->et_ops->eo_fill_max_leaf_clusters)
363 et->et_max_leaf_clusters = 0; 349 et->et_max_leaf_clusters = 0;
364 else 350 else
365 et->et_ops->eo_fill_max_leaf_clusters(inode, et); 351 et->et_ops->eo_fill_max_leaf_clusters(et);
366} 352}
367 353
368void ocfs2_init_dinode_extent_tree(struct ocfs2_extent_tree *et, 354void ocfs2_init_dinode_extent_tree(struct ocfs2_extent_tree *et,
@@ -408,11 +394,10 @@ static inline u64 ocfs2_et_get_last_eb_blk(struct ocfs2_extent_tree *et)
408 return et->et_ops->eo_get_last_eb_blk(et); 394 return et->et_ops->eo_get_last_eb_blk(et);
409} 395}
410 396
411static inline void ocfs2_et_update_clusters(struct inode *inode, 397static inline void ocfs2_et_update_clusters(struct ocfs2_extent_tree *et,
412 struct ocfs2_extent_tree *et,
413 u32 clusters) 398 u32 clusters)
414{ 399{
415 et->et_ops->eo_update_clusters(inode, et, clusters); 400 et->et_ops->eo_update_clusters(et, clusters);
416} 401}
417 402
418static inline int ocfs2_et_root_journal_access(handle_t *handle, 403static inline int ocfs2_et_root_journal_access(handle_t *handle,
@@ -423,24 +408,22 @@ static inline int ocfs2_et_root_journal_access(handle_t *handle,
423 type); 408 type);
424} 409}
425 410
426static inline int ocfs2_et_insert_check(struct inode *inode, 411static inline int ocfs2_et_insert_check(struct ocfs2_extent_tree *et,
427 struct ocfs2_extent_tree *et,
428 struct ocfs2_extent_rec *rec) 412 struct ocfs2_extent_rec *rec)
429{ 413{
430 int ret = 0; 414 int ret = 0;
431 415
432 if (et->et_ops->eo_insert_check) 416 if (et->et_ops->eo_insert_check)
433 ret = et->et_ops->eo_insert_check(inode, et, rec); 417 ret = et->et_ops->eo_insert_check(et, rec);
434 return ret; 418 return ret;
435} 419}
436 420
437static inline int ocfs2_et_sanity_check(struct inode *inode, 421static inline int ocfs2_et_sanity_check(struct ocfs2_extent_tree *et)
438 struct ocfs2_extent_tree *et)
439{ 422{
440 int ret = 0; 423 int ret = 0;
441 424
442 if (et->et_ops->eo_sanity_check) 425 if (et->et_ops->eo_sanity_check)
443 ret = et->et_ops->eo_sanity_check(inode, et); 426 ret = et->et_ops->eo_sanity_check(et);
444 return ret; 427 return ret;
445} 428}
446 429
@@ -3016,7 +2999,7 @@ static int ocfs2_remove_rightmost_path(struct inode *inode, handle_t *handle,
3016 struct ocfs2_extent_list *el; 2999 struct ocfs2_extent_list *el;
3017 3000
3018 3001
3019 ret = ocfs2_et_sanity_check(inode, et); 3002 ret = ocfs2_et_sanity_check(et);
3020 if (ret) 3003 if (ret)
3021 goto out; 3004 goto out;
3022 /* 3005 /*
@@ -4308,7 +4291,7 @@ static int ocfs2_do_insert_extent(struct inode *inode,
4308 4291
4309out_update_clusters: 4292out_update_clusters:
4310 if (type->ins_split == SPLIT_NONE) 4293 if (type->ins_split == SPLIT_NONE)
4311 ocfs2_et_update_clusters(inode, et, 4294 ocfs2_et_update_clusters(et,
4312 le16_to_cpu(insert_rec->e_leaf_clusters)); 4295 le16_to_cpu(insert_rec->e_leaf_clusters));
4313 4296
4314 ret = ocfs2_journal_dirty(handle, et->et_root_bh); 4297 ret = ocfs2_journal_dirty(handle, et->et_root_bh);
@@ -4697,7 +4680,7 @@ int ocfs2_insert_extent(struct ocfs2_super *osb,
4697 rec.e_blkno = cpu_to_le64(start_blk); 4680 rec.e_blkno = cpu_to_le64(start_blk);
4698 rec.e_leaf_clusters = cpu_to_le16(new_clusters); 4681 rec.e_leaf_clusters = cpu_to_le16(new_clusters);
4699 rec.e_flags = flags; 4682 rec.e_flags = flags;
4700 status = ocfs2_et_insert_check(inode, et, &rec); 4683 status = ocfs2_et_insert_check(et, &rec);
4701 if (status) { 4684 if (status) {
4702 mlog_errno(status); 4685 mlog_errno(status);
4703 goto bail; 4686 goto bail;
@@ -5603,7 +5586,7 @@ int ocfs2_remove_btree_range(struct inode *inode,
5603 goto out_commit; 5586 goto out_commit;
5604 } 5587 }
5605 5588
5606 ocfs2_et_update_clusters(inode, et, -len); 5589 ocfs2_et_update_clusters(et, -len);
5607 5590
5608 ret = ocfs2_journal_dirty(handle, et->et_root_bh); 5591 ret = ocfs2_journal_dirty(handle, et->et_root_bh);
5609 if (ret) { 5592 if (ret) {
diff --git a/fs/ocfs2/inode.c b/fs/ocfs2/inode.c
index 179c819e52ec..e82ceb31cc83 100644
--- a/fs/ocfs2/inode.c
+++ b/fs/ocfs2/inode.c
@@ -1395,10 +1395,6 @@ int ocfs2_read_inode_block(struct inode *inode, struct buffer_head **bh)
1395 return ocfs2_read_inode_block_full(inode, bh, 0); 1395 return ocfs2_read_inode_block_full(inode, bh, 0);
1396} 1396}
1397 1397
1398static struct ocfs2_inode_info *cache_info_to_inode(struct ocfs2_caching_info *ci)
1399{
1400 return container_of(ci, struct ocfs2_inode_info, ip_metadata_cache);
1401}
1402 1398
1403static u64 ocfs2_inode_cache_owner(struct ocfs2_caching_info *ci) 1399static u64 ocfs2_inode_cache_owner(struct ocfs2_caching_info *ci)
1404{ 1400{
diff --git a/fs/ocfs2/inode.h b/fs/ocfs2/inode.h
index 67392f60629d..ba4fe07b293c 100644
--- a/fs/ocfs2/inode.h
+++ b/fs/ocfs2/inode.h
@@ -170,4 +170,10 @@ int ocfs2_read_inode_block(struct inode *inode, struct buffer_head **bh);
170/* The same, but can be passed OCFS2_BH_* flags */ 170/* The same, but can be passed OCFS2_BH_* flags */
171int ocfs2_read_inode_block_full(struct inode *inode, struct buffer_head **bh, 171int ocfs2_read_inode_block_full(struct inode *inode, struct buffer_head **bh,
172 int flags); 172 int flags);
173
174static inline struct ocfs2_inode_info *cache_info_to_inode(struct ocfs2_caching_info *ci)
175{
176 return container_of(ci, struct ocfs2_inode_info, ip_metadata_cache);
177}
178
173#endif /* OCFS2_INODE_H */ 179#endif /* OCFS2_INODE_H */