diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2021-08-30 14:56:41 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2021-08-30 15:05:54 -0400 |
commit | cce8a60ab1f5e2d1fee084ad55eee2a01560caeb (patch) | |
tree | 622f2b220ef20e59385f3cfdb44b421480a7a958 | |
parent | ccbc816c200808d66f895e569e49f14f4c8efa65 (diff) |
bcachefs: Btree iterators are always sorted
No need to actually resort, can just replace it with an debug assert.
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
-rw-r--r-- | fs/bcachefs/btree_iter.c | 50 |
1 files changed, 3 insertions, 47 deletions
diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index 330445412ecb..9ba0dc402d89 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -18,8 +18,8 @@ #include <trace/events/bcachefs.h> static void btree_iter_set_search_pos(struct btree_iter *, struct bpos); -static void btree_trans_sort_iters(struct btree_trans *); static void btree_iter_check_sort(struct btree_trans *, struct btree_iter *); +static inline void btree_trans_verify_sorted(struct btree_trans *); static struct btree_iter *btree_iter_child_alloc(struct btree_trans *, struct btree_iter *, unsigned long); static struct btree_iter *btree_trans_iter_alloc(struct btree_trans *, @@ -1292,7 +1292,7 @@ retry_all: trans_for_each_iter(trans, iter) iter->should_be_locked = false; - btree_trans_sort_iters(trans); + btree_trans_verify_sorted(trans); for (i = trans->nr_sorted - 2; i >= 0; --i) { struct btree_iter *iter1 = trans->iters + trans->sorted[i]; @@ -2066,50 +2066,6 @@ static inline void btree_iter_swap(struct btree_trans *trans, btree_iter_verify_sorted_ref(trans, r); } -static void btree_trans_sort_iters(struct btree_trans *trans) -{ - bool swapped = false; - int i, l = 0, r = trans->nr_sorted; - - while (1) { - for (i = l; i + 1 < r; i++) { - if (btree_iter_cmp(trans->iters + trans->sorted[i], - trans->iters + trans->sorted[i + 1]) > 0) { - swap(trans->sorted[i], trans->sorted[i + 1]); - trans->iters[trans->sorted[i]].sorted_idx = i; - trans->iters[trans->sorted[i + 1]].sorted_idx = i + 1; - swapped = true; - } - } - - if (!swapped) - break; - - r--; - swapped = false; - - for (i = r - 2; i >= l; --i) { - if (btree_iter_cmp(trans->iters + trans->sorted[i], - trans->iters + trans->sorted[i + 1]) > 0) { - swap(trans->sorted[i], - trans->sorted[i + 1]); - trans->iters[trans->sorted[i]].sorted_idx = i; - trans->iters[trans->sorted[i + 1]].sorted_idx = i + 1; - swapped = true; - } - } - - if (!swapped) - break; - - l++; - swapped = false; - } - - btree_trans_verify_sorted_refs(trans); - btree_trans_verify_sorted(trans); -} - static void btree_iter_check_sort(struct btree_trans *trans, struct btree_iter *iter) { struct btree_iter *n; @@ -2269,7 +2225,7 @@ void bch2_dump_trans_iters_updates(struct btree_trans *trans) struct btree_insert_entry *i; char buf1[300], buf2[100]; - btree_trans_sort_iters(trans); + btree_trans_verify_sorted(trans); trans_for_each_iter_inorder(trans, iter) printk(KERN_ERR "iter: btree %s pos %s real_pos %s%s%s%s %pS\n", |