diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-03 15:13:56 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-03 15:13:56 -0400 |
commit | 78609a812e9afa87202631d128018361f68c44a9 (patch) | |
tree | 8c2d4b924ade170c69776d6cc39bec4dff3c8574 /fs/ocfs2/alloc.c | |
parent | 133e2a3164771454aa326859c2b293687189b553 (diff) | |
parent | 9140db04ef185f934acf2b1b15b3dd5e6a6bfc22 (diff) |
Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2
* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2: (32 commits)
ocfs2: recover orphans in offline slots during recovery and mount
ocfs2: Pagecache usage optimization on ocfs2
ocfs2: fix rare stale inode errors when exporting via nfs
ocfs2/dlm: Tweak mle_state output
ocfs2/dlm: Do not purge lockres that is being migrated dlm_purge_lockres()
ocfs2/dlm: Remove struct dlm_lock_name in struct dlm_master_list_entry
ocfs2/dlm: Show the number of lockres/mles in dlm_state
ocfs2/dlm: dlm_set_lockres_owner() and dlm_change_lockres_owner() inlined
ocfs2/dlm: Improve lockres counts
ocfs2/dlm: Track number of mles
ocfs2/dlm: Indent dlm_cleanup_master_list()
ocfs2/dlm: Activate dlm->master_hash for master list entries
ocfs2/dlm: Create and destroy the dlm->master_hash
ocfs2/dlm: Refactor dlm_clean_master_list()
ocfs2/dlm: Clean up struct dlm_lock_name
ocfs2/dlm: Encapsulate adding and removing of mle from dlm->master_list
ocfs2: Optimize inode group allocation by recording last used group.
ocfs2: Allocate inode groups from global_bitmap.
ocfs2: Optimize inode allocation by remembering last group
ocfs2: fix leaf start calculation in ocfs2_dx_dir_rebalance()
...
Diffstat (limited to 'fs/ocfs2/alloc.c')
-rw-r--r-- | fs/ocfs2/alloc.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c index 19e3a96aa02c..678a067d9251 100644 --- a/fs/ocfs2/alloc.c +++ b/fs/ocfs2/alloc.c | |||
@@ -294,6 +294,55 @@ static struct ocfs2_extent_tree_operations ocfs2_xattr_tree_et_ops = { | |||
294 | .eo_fill_max_leaf_clusters = ocfs2_xattr_tree_fill_max_leaf_clusters, | 294 | .eo_fill_max_leaf_clusters = ocfs2_xattr_tree_fill_max_leaf_clusters, |
295 | }; | 295 | }; |
296 | 296 | ||
297 | static void ocfs2_dx_root_set_last_eb_blk(struct ocfs2_extent_tree *et, | ||
298 | u64 blkno) | ||
299 | { | ||
300 | struct ocfs2_dx_root_block *dx_root = et->et_object; | ||
301 | |||
302 | dx_root->dr_last_eb_blk = cpu_to_le64(blkno); | ||
303 | } | ||
304 | |||
305 | static u64 ocfs2_dx_root_get_last_eb_blk(struct ocfs2_extent_tree *et) | ||
306 | { | ||
307 | struct ocfs2_dx_root_block *dx_root = et->et_object; | ||
308 | |||
309 | return le64_to_cpu(dx_root->dr_last_eb_blk); | ||
310 | } | ||
311 | |||
312 | static void ocfs2_dx_root_update_clusters(struct inode *inode, | ||
313 | struct ocfs2_extent_tree *et, | ||
314 | u32 clusters) | ||
315 | { | ||
316 | struct ocfs2_dx_root_block *dx_root = et->et_object; | ||
317 | |||
318 | le32_add_cpu(&dx_root->dr_clusters, clusters); | ||
319 | } | ||
320 | |||
321 | static int ocfs2_dx_root_sanity_check(struct inode *inode, | ||
322 | struct ocfs2_extent_tree *et) | ||
323 | { | ||
324 | struct ocfs2_dx_root_block *dx_root = et->et_object; | ||
325 | |||
326 | BUG_ON(!OCFS2_IS_VALID_DX_ROOT(dx_root)); | ||
327 | |||
328 | return 0; | ||
329 | } | ||
330 | |||
331 | static void ocfs2_dx_root_fill_root_el(struct ocfs2_extent_tree *et) | ||
332 | { | ||
333 | struct ocfs2_dx_root_block *dx_root = et->et_object; | ||
334 | |||
335 | et->et_root_el = &dx_root->dr_list; | ||
336 | } | ||
337 | |||
338 | static struct ocfs2_extent_tree_operations ocfs2_dx_root_et_ops = { | ||
339 | .eo_set_last_eb_blk = ocfs2_dx_root_set_last_eb_blk, | ||
340 | .eo_get_last_eb_blk = ocfs2_dx_root_get_last_eb_blk, | ||
341 | .eo_update_clusters = ocfs2_dx_root_update_clusters, | ||
342 | .eo_sanity_check = ocfs2_dx_root_sanity_check, | ||
343 | .eo_fill_root_el = ocfs2_dx_root_fill_root_el, | ||
344 | }; | ||
345 | |||
297 | static void __ocfs2_init_extent_tree(struct ocfs2_extent_tree *et, | 346 | static void __ocfs2_init_extent_tree(struct ocfs2_extent_tree *et, |
298 | struct inode *inode, | 347 | struct inode *inode, |
299 | struct buffer_head *bh, | 348 | struct buffer_head *bh, |
@@ -339,6 +388,14 @@ void ocfs2_init_xattr_value_extent_tree(struct ocfs2_extent_tree *et, | |||
339 | &ocfs2_xattr_value_et_ops); | 388 | &ocfs2_xattr_value_et_ops); |
340 | } | 389 | } |
341 | 390 | ||
391 | void ocfs2_init_dx_root_extent_tree(struct ocfs2_extent_tree *et, | ||
392 | struct inode *inode, | ||
393 | struct buffer_head *bh) | ||
394 | { | ||
395 | __ocfs2_init_extent_tree(et, inode, bh, ocfs2_journal_access_dr, | ||
396 | NULL, &ocfs2_dx_root_et_ops); | ||
397 | } | ||
398 | |||
342 | static inline void ocfs2_et_set_last_eb_blk(struct ocfs2_extent_tree *et, | 399 | static inline void ocfs2_et_set_last_eb_blk(struct ocfs2_extent_tree *et, |
343 | u64 new_last_eb_blk) | 400 | u64 new_last_eb_blk) |
344 | { | 401 | { |