diff options
author | Jan Schmidt <list.btrfs@jan-o-sch.net> | 2012-06-11 02:29:29 -0400 |
---|---|---|
committer | Jan Schmidt <list.btrfs@jan-o-sch.net> | 2012-06-14 12:52:09 -0400 |
commit | 3d7806eca43e73a9721d2e09369200ed93036bd0 (patch) | |
tree | 339d940a7cb3522169f9e2a8b14edf8b8ae15880 /fs/btrfs/ctree.c | |
parent | a95236d99fa56766f11056903439f55fe5038bcf (diff) |
Btrfs: add btrfs_next_old_leaf
To make sense of the tree mod log, the backref walker not only needs
btrfs_search_old_slot, but it also called btrfs_next_leaf, which in turn was
calling btrfs_search_slot. This obviously didn't give the correct result.
This commit adds btrfs_next_old_leaf, a drop-in replacement for
btrfs_next_leaf with a time_seq parameter. If it is zero, it behaves exactly
like btrfs_next_leaf. If it is non-zero, it will use btrfs_search_old_slot
with this time_seq parameter.
Signed-off-by: Jan Schmidt <list.btrfs@jan-o-sch.net>
Diffstat (limited to 'fs/btrfs/ctree.c')
-rw-r--r-- | fs/btrfs/ctree.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index 50d7c99ddce7..cb76b2a1b908 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c | |||
@@ -5017,6 +5017,12 @@ next: | |||
5017 | */ | 5017 | */ |
5018 | int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path) | 5018 | int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path) |
5019 | { | 5019 | { |
5020 | return btrfs_next_old_leaf(root, path, 0); | ||
5021 | } | ||
5022 | |||
5023 | int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path, | ||
5024 | u64 time_seq) | ||
5025 | { | ||
5020 | int slot; | 5026 | int slot; |
5021 | int level; | 5027 | int level; |
5022 | struct extent_buffer *c; | 5028 | struct extent_buffer *c; |
@@ -5041,7 +5047,10 @@ again: | |||
5041 | path->keep_locks = 1; | 5047 | path->keep_locks = 1; |
5042 | path->leave_spinning = 1; | 5048 | path->leave_spinning = 1; |
5043 | 5049 | ||
5044 | ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); | 5050 | if (time_seq) |
5051 | ret = btrfs_search_old_slot(root, &key, path, time_seq); | ||
5052 | else | ||
5053 | ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); | ||
5045 | path->keep_locks = 0; | 5054 | path->keep_locks = 0; |
5046 | 5055 | ||
5047 | if (ret < 0) | 5056 | if (ret < 0) |