summaryrefslogtreecommitdiff
path: root/libbcachefs/btree_iter.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2018-06-01 17:17:16 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2018-06-01 17:33:19 -0400
commitbb6f4111fbfe2550eb7b583586e732a473ba62f0 (patch)
tree72f01b9dbeaba544efb75016309c0da6839913ae /libbcachefs/btree_iter.c
parentd7bfc55d236363c7f9d2edee7437202497e462b5 (diff)
Update bcachefs sources to 9abf628c70 bcachefs: Fix a spurious error in fsck
Diffstat (limited to 'libbcachefs/btree_iter.c')
-rw-r--r--libbcachefs/btree_iter.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/libbcachefs/btree_iter.c b/libbcachefs/btree_iter.c
index 70c3132e..95ee9f61 100644
--- a/libbcachefs/btree_iter.c
+++ b/libbcachefs/btree_iter.c
@@ -152,7 +152,7 @@ bool __bch2_btree_node_lock(struct btree *b, struct bpos pos,
* the prev sibling in btree node merging:
*/
if (iter->nodes_locked &&
- __ffs(iter->nodes_locked) == level &&
+ __ffs(iter->nodes_locked) <= level &&
__btree_iter_cmp(iter->btree_id, pos, iter))
return false;
@@ -592,6 +592,8 @@ static inline void __btree_iter_init(struct btree_iter *iter,
/* Skip to first non whiteout: */
if (b->level)
bch2_btree_node_iter_peek(&l->iter, b);
+
+ btree_iter_set_dirty(iter, BTREE_ITER_NEED_PEEK);
}
static inline void btree_iter_node_set(struct btree_iter *iter,
@@ -1084,6 +1086,8 @@ struct bkey_s_c bch2_btree_iter_peek(struct btree_iter *iter)
EBUG_ON(!!(iter->flags & BTREE_ITER_IS_EXTENTS) !=
(iter->btree_id == BTREE_ID_EXTENTS));
EBUG_ON(iter->flags & BTREE_ITER_SLOTS);
+ EBUG_ON(iter->uptodate == BTREE_ITER_UPTODATE &&
+ !btree_node_locked(iter, 0));
if (iter->uptodate == BTREE_ITER_UPTODATE) {
struct bkey_packed *k =
@@ -1093,8 +1097,6 @@ struct bkey_s_c bch2_btree_iter_peek(struct btree_iter *iter)
.v = bkeyp_val(&l->b->format, k)
};
- EBUG_ON(!btree_node_locked(iter, 0));
-
if (debug_check_bkeys(iter->c))
bch2_bkey_debugcheck(iter->c, l->b, ret);
return ret;
@@ -1257,16 +1259,16 @@ struct bkey_s_c bch2_btree_iter_peek_slot(struct btree_iter *iter)
EBUG_ON(!!(iter->flags & BTREE_ITER_IS_EXTENTS) !=
(iter->btree_id == BTREE_ID_EXTENTS));
EBUG_ON(!(iter->flags & BTREE_ITER_SLOTS));
+ EBUG_ON(iter->uptodate == BTREE_ITER_UPTODATE &&
+ !btree_node_locked(iter, 0));
if (iter->uptodate == BTREE_ITER_UPTODATE) {
- struct bkey_s_c ret = { .k = &iter->k };;
+ struct bkey_s_c ret = { .k = &iter->k };
if (!bkey_deleted(&iter->k))
ret.v = bkeyp_val(&l->b->format,
__bch2_btree_node_iter_peek_all(&l->iter, l->b));
- EBUG_ON(!btree_node_locked(iter, 0));
-
if (debug_check_bkeys(iter->c))
bch2_bkey_debugcheck(iter->c, l->b, ret);
return ret;