mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
btrfs: move the tree mod log code into its own file
The tree modification log, which records modifications done to btrees, is quite large and currently spread all over ctree.c, which is a huge file already. To make things better organized, move all that code into its own separate source and header files. Functions and definitions that are used outside of the module (mostly by ctree.c) are renamed so that they start with a "btrfs_" prefix. Everything else remains unchanged. This makes it easier to go over the tree modification log code every time I need to go read it to fix a bug. Reviewed-by: Anand Jain <anand.jain@oracle.com> Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> [ minor comment updates ] Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
9a002d531b
commit
f3a84ccd28
8 changed files with 1005 additions and 961 deletions
|
@ -14,6 +14,7 @@
|
|||
#include "delayed-ref.h"
|
||||
#include "locking.h"
|
||||
#include "misc.h"
|
||||
#include "tree-mod-log.h"
|
||||
|
||||
/* Just an arbitrary number so we can be sure this happened */
|
||||
#define BACKREF_FOUND_SHARED 6
|
||||
|
@ -452,7 +453,7 @@ static int add_all_parents(struct btrfs_root *root, struct btrfs_path *path,
|
|||
if (path->slots[0] >= btrfs_header_nritems(eb) ||
|
||||
is_shared_data_backref(preftrees, eb->start) ||
|
||||
ref->root_id != btrfs_header_owner(eb)) {
|
||||
if (time_seq == SEQ_LAST)
|
||||
if (time_seq == BTRFS_SEQ_LAST)
|
||||
ret = btrfs_next_leaf(root, path);
|
||||
else
|
||||
ret = btrfs_next_old_leaf(root, path, time_seq);
|
||||
|
@ -476,7 +477,7 @@ static int add_all_parents(struct btrfs_root *root, struct btrfs_path *path,
|
|||
if (slot == 0 &&
|
||||
(is_shared_data_backref(preftrees, eb->start) ||
|
||||
ref->root_id != btrfs_header_owner(eb))) {
|
||||
if (time_seq == SEQ_LAST)
|
||||
if (time_seq == BTRFS_SEQ_LAST)
|
||||
ret = btrfs_next_leaf(root, path);
|
||||
else
|
||||
ret = btrfs_next_old_leaf(root, path, time_seq);
|
||||
|
@ -514,7 +515,7 @@ static int add_all_parents(struct btrfs_root *root, struct btrfs_path *path,
|
|||
eie = NULL;
|
||||
}
|
||||
next:
|
||||
if (time_seq == SEQ_LAST)
|
||||
if (time_seq == BTRFS_SEQ_LAST)
|
||||
ret = btrfs_next_item(root, path);
|
||||
else
|
||||
ret = btrfs_next_old_item(root, path, time_seq);
|
||||
|
@ -574,7 +575,7 @@ static int resolve_indirect_ref(struct btrfs_fs_info *fs_info,
|
|||
|
||||
if (path->search_commit_root)
|
||||
root_level = btrfs_header_level(root->commit_root);
|
||||
else if (time_seq == SEQ_LAST)
|
||||
else if (time_seq == BTRFS_SEQ_LAST)
|
||||
root_level = btrfs_header_level(root->node);
|
||||
else
|
||||
root_level = btrfs_old_root_level(root, time_seq);
|
||||
|
@ -605,7 +606,7 @@ static int resolve_indirect_ref(struct btrfs_fs_info *fs_info,
|
|||
search_key.offset >= LLONG_MAX)
|
||||
search_key.offset = 0;
|
||||
path->lowest_level = level;
|
||||
if (time_seq == SEQ_LAST)
|
||||
if (time_seq == BTRFS_SEQ_LAST)
|
||||
ret = btrfs_search_slot(NULL, root, &search_key, path, 0, 0);
|
||||
else
|
||||
ret = btrfs_search_old_slot(root, &search_key, path, time_seq);
|
||||
|
@ -1147,8 +1148,8 @@ static int add_keyed_refs(struct btrfs_fs_info *fs_info,
|
|||
* indirect refs to their parent bytenr.
|
||||
* When roots are found, they're added to the roots list
|
||||
*
|
||||
* If time_seq is set to SEQ_LAST, it will not search delayed_refs, and behave
|
||||
* much like trans == NULL case, the difference only lies in it will not
|
||||
* If time_seq is set to BTRFS_SEQ_LAST, it will not search delayed_refs, and
|
||||
* behave much like trans == NULL case, the difference only lies in it will not
|
||||
* commit root.
|
||||
* The special case is for qgroup to search roots in commit_transaction().
|
||||
*
|
||||
|
@ -1199,7 +1200,7 @@ static int find_parent_nodes(struct btrfs_trans_handle *trans,
|
|||
path->skip_locking = 1;
|
||||
}
|
||||
|
||||
if (time_seq == SEQ_LAST)
|
||||
if (time_seq == BTRFS_SEQ_LAST)
|
||||
path->skip_locking = 1;
|
||||
|
||||
/*
|
||||
|
@ -1217,9 +1218,9 @@ again:
|
|||
|
||||
#ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
|
||||
if (trans && likely(trans->type != __TRANS_DUMMY) &&
|
||||
time_seq != SEQ_LAST) {
|
||||
time_seq != BTRFS_SEQ_LAST) {
|
||||
#else
|
||||
if (trans && time_seq != SEQ_LAST) {
|
||||
if (trans && time_seq != BTRFS_SEQ_LAST) {
|
||||
#endif
|
||||
/*
|
||||
* look if there are updates for this ref queued and lock the
|
||||
|
@ -1527,7 +1528,7 @@ int btrfs_check_shared(struct btrfs_root *root, u64 inum, u64 bytenr,
|
|||
struct btrfs_trans_handle *trans;
|
||||
struct ulist_iterator uiter;
|
||||
struct ulist_node *node;
|
||||
struct seq_list elem = SEQ_LIST_INIT(elem);
|
||||
struct btrfs_seq_list elem = BTRFS_SEQ_LIST_INIT(elem);
|
||||
int ret = 0;
|
||||
struct share_check shared = {
|
||||
.root_objectid = root->root_key.objectid,
|
||||
|
@ -1953,7 +1954,7 @@ int iterate_extent_inodes(struct btrfs_fs_info *fs_info,
|
|||
struct ulist *roots = NULL;
|
||||
struct ulist_node *ref_node = NULL;
|
||||
struct ulist_node *root_node = NULL;
|
||||
struct seq_list tree_mod_seq_elem = SEQ_LIST_INIT(tree_mod_seq_elem);
|
||||
struct btrfs_seq_list seq_elem = BTRFS_SEQ_LIST_INIT(seq_elem);
|
||||
struct ulist_iterator ref_uiter;
|
||||
struct ulist_iterator root_uiter;
|
||||
|
||||
|
@ -1971,12 +1972,12 @@ int iterate_extent_inodes(struct btrfs_fs_info *fs_info,
|
|||
}
|
||||
|
||||
if (trans)
|
||||
btrfs_get_tree_mod_seq(fs_info, &tree_mod_seq_elem);
|
||||
btrfs_get_tree_mod_seq(fs_info, &seq_elem);
|
||||
else
|
||||
down_read(&fs_info->commit_root_sem);
|
||||
|
||||
ret = btrfs_find_all_leafs(trans, fs_info, extent_item_objectid,
|
||||
tree_mod_seq_elem.seq, &refs,
|
||||
seq_elem.seq, &refs,
|
||||
&extent_item_pos, ignore_offset);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
@ -1984,7 +1985,7 @@ int iterate_extent_inodes(struct btrfs_fs_info *fs_info,
|
|||
ULIST_ITER_INIT(&ref_uiter);
|
||||
while (!ret && (ref_node = ulist_next(refs, &ref_uiter))) {
|
||||
ret = btrfs_find_all_roots_safe(trans, fs_info, ref_node->val,
|
||||
tree_mod_seq_elem.seq, &roots,
|
||||
seq_elem.seq, &roots,
|
||||
ignore_offset);
|
||||
if (ret)
|
||||
break;
|
||||
|
@ -2007,7 +2008,7 @@ int iterate_extent_inodes(struct btrfs_fs_info *fs_info,
|
|||
free_leaf_list(refs);
|
||||
out:
|
||||
if (trans) {
|
||||
btrfs_put_tree_mod_seq(fs_info, &tree_mod_seq_elem);
|
||||
btrfs_put_tree_mod_seq(fs_info, &seq_elem);
|
||||
btrfs_end_transaction(trans);
|
||||
} else {
|
||||
up_read(&fs_info->commit_root_sem);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue