diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2018-05-27 23:45:47 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2018-06-01 17:28:35 -0400 |
commit | 77ad7391375d044596e3d08c3dc5352623daed67 (patch) | |
tree | 223f7141c68a5f49becad6dd4a29c2bd781625ed | |
parent | b7b31a327f7106c94a5d9e56f961041da466abc8 (diff) |
bcachefs: fix missing btree_iter_set_dirty() call
-rw-r--r-- | fs/bcachefs/btree_iter.c | 12 | ||||
-rw-r--r-- | fs/bcachefs/btree_update_interior.c | 2 | ||||
-rw-r--r-- | include/trace/events/bcachefs.h | 5 |
3 files changed, 14 insertions, 5 deletions
diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index 4f8b0c963d4a..95ee9f615e7d 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -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; diff --git a/fs/bcachefs/btree_update_interior.c b/fs/bcachefs/btree_update_interior.c index 93909334166e..92e19c4eae7e 100644 --- a/fs/bcachefs/btree_update_interior.c +++ b/fs/bcachefs/btree_update_interior.c @@ -1717,6 +1717,8 @@ retry: goto out_unlock; } + trace_btree_merge(c, b); + bch2_btree_interior_update_will_free_node(as, b); bch2_btree_interior_update_will_free_node(as, m); diff --git a/include/trace/events/bcachefs.h b/include/trace/events/bcachefs.h index a34574ca8b0c..13264b82ed77 100644 --- a/include/trace/events/bcachefs.h +++ b/include/trace/events/bcachefs.h @@ -296,6 +296,11 @@ DEFINE_EVENT(btree_node, btree_compact, TP_ARGS(c, b) ); +DEFINE_EVENT(btree_node, btree_merge, + TP_PROTO(struct bch_fs *c, struct btree *b), + TP_ARGS(c, b) +); + DEFINE_EVENT(btree_node, btree_set_root, TP_PROTO(struct bch_fs *c, struct btree *b), TP_ARGS(c, b) |