summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* ocfs2: Decrement refcount when truncating refcounted extents.Tao Ma2009-09-224-7/+290
| | | | | | | | Add 'Decrement refcount for delete' in to the normal truncate process. So for a refcounted extent record, call refcount rec decrementation instead of cluster free. Signed-off-by: Tao Ma <tao.ma@oracle.com>
* ocfs2: Add functions for extents refcounted.Tao Ma2009-09-224-6/+58
| | | | | | | Add function ocfs2_mark_extent_refcounted which can mark an extent refcounted. Signed-off-by: Tao Ma <tao.ma@oracle.com>
* ocfs2: Add support of decrementing refcount for delete.Tao Ma2009-09-224-5/+265
| | | | | | | | Given a physical cpos and length, decrement the refcount in the tree. If the refcount for any portion of the extent goes to zero, that portion is queued for freeing. Signed-off-by: Tao Ma <tao.ma@oracle.com>
* ocfs2: Add support for incrementing refcount in the tree.Tao Ma2009-09-224-7/+1073
| | | | | | | | | Given a physical cpos and length, increment the refcount in the tree. If the extent has not been seen before, a refcount record is created for it. Refcount records may be merged or split by this operation. Signed-off-by: Tao Ma <tao.ma@oracle.com>
* ocfs2: move tree path functions to alloc.h.Tao Ma2009-09-222-53/+72
| | | | | | | | | | | Now fs/ocfs2/alloc.c has more than 7000 lines. It contains our basic b-tree operation. Although we have already make our b-tree operation generic, the basic structrue ocfs2_path which is used to iterate one b-tree branch is still static and limited to only used in alloc.c. As refcount tree need them and I don't want to add any more b-tree unrelated code to alloc.c, export them out. Signed-off-by: Tao Ma <tao.ma@oracle.com>
* ocfs2: Add refcount b-tree as a new extent tree.Tao Ma2009-09-222-0/+57
| | | | | | | Add refcount b-tree as a new extent tree so that it can use the b-tree to store and maniuplate ocfs2_refcount_rec. Signed-off-by: Tao Ma <tao.ma@oracle.com>
* ocfs2: Abstract extent split process.Tao Ma2009-09-221-50/+100
| | | | | | | | | | | | | | | | | | | | | | | | | | ocfs2_mark_extent_written actually does the following things: 1. check the parameters. 2. initialize the left_path and split_rec. 3. call __ocfs2_mark_extent_written. it will do: 1) check the flags of unwritten 2) do the real split work. The whole process is packed tightly somehow. So this patch will abstract 2 different functions so that future b-tree operation can work with it. 1. __ocfs2_split_extent will accept path and split_rec and do the real split work. 2. ocfs2_change_extent_flag will accept a new flag and initialize path and split_rec. So now ocfs2_mark_extent_written will do: 1. check the parameters. 2. call ocfs2_change_extent_flag. 1) initalize the left_path and split_rec. 2) check whether the new flags conflict with the old one. 3) call __ocfs2_split_extent to do the split. Signed-off-by: Tao Ma <tao.ma@oracle.com>
* ocfs2: Wrap ocfs2_extent_contig in ocfs2_extent_tree.Tao Ma2009-09-221-16/+41
| | | | | | | | | | Add a new operation eo_ocfs2_extent_contig int the extent tree's operations vector. So that with the new refcount tree, We want this so that refcount trees can always return CONTIG_NONE and prevent extent merging. Signed-off-by: Tao Ma <tao.ma@oracle.com>
* ocfs2: Basic tree root operation.Tao Ma2009-09-222-6/+353
| | | | | | Add basic refcount tree root operation. Signed-off-by: Tao Ma <tao.ma@oracle.com>
* ocfs2: Add refcount tree lock mechanism.Tao Ma2009-09-224-0/+375
| | | | | | | | | | | | | | | | | Implement locking around struct ocfs2_refcount_tree. This protects all read/write operations on refcount trees. ocfs2_refcount_tree has its own lock and its own caching_info, protecting buffers among multiple nodes. User must call ocfs2_lock_refcount_tree before his operation on the tree and unlock it after that. ocfs2_refcount_trees are referenced by the block number of the refcount tree root block, So we create an rb-tree on the ocfs2_super to look them up. Signed-off-by: Tao Ma <tao.ma@oracle.com>
* ocfs2: Add caching info for refcount tree.Tao Ma2009-09-221-0/+59
| | | | | | | | refcount tree should use its own caching info so that when we downconvert the refcount tree lock, we can drop all the cached buffer head. Signed-off-by: Tao Ma <tao.ma@oracle.com>
* ocfs2: Add new refcount tree lock resource in dlmglue.Tao Ma2009-09-224-0/+127
| | | | | | | refcount tree lock resource is used to protect refcount tree read/write among multiple nodes. Signed-off-by: Tao Ma <tao.ma@oracle.com>
* ocfs2: Abstract caching info checkpoint.Tao Ma2009-09-221-5/+13
| | | | | | | In meta downconvert, we need to checkpoint the metadata in an inode. For refcount tree, we also need it. So abstract the process out. Signed-off-by: Tao Ma <tao.ma@oracle.com>
* ocfs2: Add ocfs2_read_refcount_block.Tao Ma2009-09-225-0/+105
| | | | Signed-off-by: Tao Ma <tao.ma@oracle.com>
* ocfs2: Add metaecc for ocfs2_refcount_block.Tao Ma2009-09-222-0/+18
| | | | | | Add metaecc and journal trigger for ocfs2_refcount_block. Signed-off-by: Tao Ma <tao.ma@oracle.com>
* ocfs2: Define refcount tree structure.Tao Ma2009-09-221-3/+85
| | | | Signed-off-by: Tao Ma <tao.ma@oracle.com>
* ocfs2: Pass ocfs2_caching_info into ocfs_init_*_extent_tree().Joel Becker2009-09-046-30/+35
| | | | | | | With this commit, extent tree operations are divorced from inodes and rely on ocfs2_caching_info. Phew! Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: __ocfs2_mark_extent_written() doesn't need struct inode.Joel Becker2009-09-041-4/+3
| | | | | | | | We only allow unwritten extents on data, so the toplevel ocfs2_mark_extent_written() can use an inode all it wants. But the subfunction isn't even using the inode argument. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: Teach ocfs2_replace_extent_rec() to use an extent_tree.Joel Becker2009-09-041-5/+4
| | | | | | Don't use a struct inode anymore. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: ocfs2_split_and_insert() no longer needs struct inode.Joel Becker2009-09-041-6/+5
| | | | | | It already has an extent_tree. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: ocfs2_remove_extent() no longer needs struct inode.Joel Becker2009-09-043-24/+25
| | | | | | One more generic btree function that is isolated from struct inode. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: ocfs2_add_clusters_in_btree() no longer needs struct inode.Joel Becker2009-09-044-19/+14
| | | | | | | One more function that doesn't need a struct inode to pass to its children. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: ocfs2_insert_extent() no longer needs struct inode.Joel Becker2009-09-044-22/+15
| | | | | | One more function down, no inode in the entire insert-extent chain. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: Make extent map insertion an extent_tree_operation.Joel Becker2009-09-041-2/+27
| | | | | | | | | ocfs2_insert_extent() wants to insert a record into the extent map if it's an inode data extent. But since many btrees can call that function, let's make it an op on ocfs2_extent_tree. Other tree types can leave it empty. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: ocfs2_figure_insert_type() no longer needs struct inode.Joel Becker2009-09-041-3/+2
| | | | | | It's not using it, so remove it from the parameter list. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: Remove inode from ocfs2_figure_extent_contig().Joel Becker2009-09-041-7/+6
| | | | | | It already has an ocfs2_extent_tree and doesn't need the inode. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: Swap inode for extent_tree in ocfs2_figure_merge_contig_type().Joel Becker2009-09-041-13/+13
| | | | | | We don't want struct inode in generic btree operations. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: ocfs2_extent_contig() only requires the superblock.Joel Becker2009-09-041-6/+6
| | | | | | | Don't pass the inode in. We don't want it around for generic btree operations. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: ocfs2_do_insert_extent() and ocfs2_insert_path() no longer need an inode.Joel Becker2009-09-041-8/+6
| | | | | | They aren't using it, so remove it from their parameter lists. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: Give ocfs2_split_record() an extent_tree instead of an inode.Joel Becker2009-09-041-3/+4
| | | | | | Another on the way to generic btree functions. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: ocfs2_insert_at_leaf() doesn't need struct inode.Joel Becker2009-09-041-9/+10
| | | | | | Give it an ocfs2_extent_tree and it is happy. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: Make truncating the extent map an extent_tree_operation.Joel Becker2009-09-041-6/+31
| | | | | | | | | ocfs2_remove_extent() wants to truncate the extent map if it's truncating an inode data extent. But since many btrees can call that function, let's make it an op on ocfs2_extent_tree. Other tree types can leave it empty. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: ocfs2_truncate_rec() doesn't need struct inode.Joel Becker2009-09-041-13/+13
| | | | | | It's not using it anymore. Remove it from the parameter list. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: ocfs2_grow_branch() and ocfs2_append_rec_to_path() lose struct inode.Joel Becker2009-09-041-44/+36
| | | | | | | | | | | | | | | ocfs2_grow_branch() not really using it other than to pass it to the subfunctions ocfs2_shift_tree_depth(), ocfs2_find_branch_target(), and ocfs2_add_branch(). The first two weren't it either, so they drop the argument. ocfs2_add_branch() only passed it to ocfs2_adjust_rightmost_branch(), which drops the inode argument and uses the ocfs2_extent_tree as well. ocfs2_append_rec_to_path() can be take an ocfs2_extent_tree instead of the inode. The function ocfs2_adjust_rightmost_records() goes along for the ride. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: ocfs2_try_to_merge_extent() doesn't need struct inode.Joel Becker2009-09-041-7/+5
| | | | | | It's not using it, so remove it from the parameter list. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: ocfs2_merge_rec_left/right() no longer need struct inode.Joel Becker2009-09-041-30/+24
| | | | | | Drop it from the parameters - they already have ocfs2_extent_list. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: ocfs2_rotate_tree_left() no longer needs struct inode.Joel Becker2009-09-041-30/+26
| | | | | | | | It already gets ocfs2_extent_tree, so we can just use that. This chains to the same modification for ocfs2_remove_rightmost_path() and ocfs2_rotate_rightmost_leaf_left(). Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: __ocfs2_rotate_tree_left() doesn't need struct inode.Joel Becker2009-09-041-12/+12
| | | | | | | It already has struct ocfs2_extent_tree, which has the caching info. So we don't need to pass it struct inode. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: ocfs2_rotate_subtree_left() doesn't need struct inode.Joel Becker2009-09-041-9/+9
| | | | | | | It already has struct ocfs2_extent_tree, which has the caching info. So we don't need to pass it struct inode. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: ocfs2_update_edge_lengths() doesn't need struct inode.Joel Becker2009-09-041-4/+5
| | | | | | Pass in the extent tree, which is all we need. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: ocfs2_rotate_tree_right() doesn't need struct inode.Joel Becker2009-09-041-2/+2
| | | | | | We don't need struct inode in ocfs2_rotate_tree_right() anymore. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: Drop struct inode from ocfs2_extent_tree_operations.Joel Becker2009-09-043-59/+44
| | | | | | | We can get to the inode from the caching information. Other parent types don't need it. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: Pass ocfs2_extent_tree to ocfs2_get_subtree_root()Joel Becker2009-09-041-25/+27
| | | | | | | Get rid of the inode argument. Use extent_tree instead. This means a few more functions have to pass an extent_tree around. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: Get inode out of ocfs2_rotate_subtree_root_right().Joel Becker2009-09-041-18/+19
| | | | | | | Pass the ocfs2_extent_list down through ocfs2_rotate_tree_right() and get rid of struct inode in ocfs2_rotate_subtree_root_right(). Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: ocfs2_complete_edge_insert() doesn't need struct inode at all.Joel Becker2009-09-041-10/+10
| | | | | | Completely unused argument. Get rid of it. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: Pass ocfs2_extent_tree to ocfs2_unlink_path()Joel Becker2009-09-041-9/+11
| | | | | | | ocfs2_unlink_path() doesn't need struct inode, so let's pass it struct ocfs2_extent_tree. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: ocfs2_create_new_meta_bhs() doesn't need struct inode.Joel Becker2009-09-041-8/+9
| | | | | | | Pass struct ocfs2_extent_tree into ocfs2_create_new_meta_bhs(). It no longer needs struct inode or ocfs2_super. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: ocfs2_find_path() only needs the caching infoJoel Becker2009-09-045-44/+52
| | | | | | | | ocfs2_find_path and ocfs2_find_leaf() walk our btrees, reading extent blocks. They need struct ocfs2_caching_info for that, but not struct inode. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: Pass ocfs2_caching_info to ocfs2_read_extent_block().Joel Becker2009-09-045-24/+25
| | | | | | | | | extent blocks belong to btrees on more than just inodes, so we want to pass the ocfs2_caching_info structure directly to ocfs2_read_extent_block(). A number of places in alloc.c can now drop struct inode from their argument list. Signed-off-by: Joel Becker <joel.becker@oracle.com>
* ocfs2: Store the ocfs2_caching_info on ocfs2_extent_tree.Joel Becker2009-09-042-14/+16
| | | | | | | | | | | | | What do we cache? Metadata blocks. What are most of our non-inode metadata blocks? Extent blocks for our btrees. struct ocfs2_extent_tree is the main structure for managing those. So let's store the associated ocfs2_caching_info there. This means that ocfs2_et_root_journal_access() doesn't need struct inode anymore, and any place that has an et can refer to et->et_ci instead of INODE_CACHE(inode). Signed-off-by: Joel Becker <joel.becker@oracle.com>
OpenPOWER on IntegriCloud