aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/ctree.c
diff options
context:
space:
mode:
authorJan Schmidt <list.btrfs@jan-o-sch.net>2012-06-11 02:29:29 -0400
committerJan Schmidt <list.btrfs@jan-o-sch.net>2012-06-14 12:52:09 -0400
commit3d7806eca43e73a9721d2e09369200ed93036bd0 (patch)
tree339d940a7cb3522169f9e2a8b14edf8b8ae15880 /fs/btrfs/ctree.c
parenta95236d99fa56766f11056903439f55fe5038bcf (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.c11
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 */
5018int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path) 5018int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path)
5019{ 5019{
5020 return btrfs_next_old_leaf(root, path, 0);
5021}
5022
5023int 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)