summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-12-07 13:11:44 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2024-01-01 11:47:40 -0500
commitf8fd5871becf3beb7dff84c4608140a8c571c9a9 (patch)
tree83e1b5fb2918be8a633282c501408233f3906f53
parent5028b9078ccb02ead012056dcbcc4f27f963b212 (diff)
downloadlinux-stable-f8fd5871becf3beb7dff84c4608140a8c571c9a9.tar.gz
linux-stable-f8fd5871becf3beb7dff84c4608140a8c571c9a9.tar.bz2
linux-stable-f8fd5871becf3beb7dff84c4608140a8c571c9a9.zip
bcachefs: reserve path idx 0 for sentinal
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--fs/bcachefs/btree_iter.c4
-rw-r--r--fs/bcachefs/btree_iter.h6
2 files changed, 6 insertions, 4 deletions
diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c
index 59815c0d0db6..e2f010564ceb 100644
--- a/fs/bcachefs/btree_iter.c
+++ b/fs/bcachefs/btree_iter.c
@@ -2515,7 +2515,7 @@ static void btree_trans_verify_sorted_refs(struct btree_trans *trans)
struct btree_path *path;
unsigned i;
- BUG_ON(trans->nr_sorted != bitmap_weight(trans->paths_allocated, BTREE_ITER_MAX));
+ BUG_ON(trans->nr_sorted != bitmap_weight(trans->paths_allocated, BTREE_ITER_MAX) - 1);
trans_for_each_path(trans, path) {
BUG_ON(path->sorted_idx >= trans->nr_sorted);
@@ -2896,6 +2896,8 @@ struct btree_trans *__bch2_trans_get(struct bch_fs *c, unsigned fn_idx)
atomic_inc_not_zero(&c->journal_keys.ref);
closure_init_stack(&trans->ref);
+ trans->paths_allocated[0] = 1;
+
s = btree_trans_stats(trans);
if (s && s->max_mem) {
unsigned expected_mem_bytes = roundup_pow_of_two(s->max_mem);
diff --git a/fs/bcachefs/btree_iter.h b/fs/bcachefs/btree_iter.h
index 5f401056c3ed..5be3c1a2c820 100644
--- a/fs/bcachefs/btree_iter.h
+++ b/fs/bcachefs/btree_iter.h
@@ -80,7 +80,7 @@ __trans_next_path(struct btree_trans *trans, unsigned idx)
_path = __trans_next_path((_trans), (_path)->idx + 1))
#define trans_for_each_path(_trans, _path) \
- trans_for_each_path_from(_trans, _path, 0)
+ trans_for_each_path_from(_trans, _path, 1)
static inline struct btree_path *
__trans_next_path_safe(struct btree_trans *trans, unsigned *idx)
@@ -103,7 +103,7 @@ __trans_next_path_safe(struct btree_trans *trans, unsigned *idx)
_idx++)
#define trans_for_each_path_safe(_trans, _path, _idx) \
- trans_for_each_path_safe_from(_trans, _path, _idx, 0)
+ trans_for_each_path_safe_from(_trans, _path, _idx, 1)
static inline struct btree_path *next_btree_path(struct btree_trans *trans, struct btree_path *path)
{
@@ -155,7 +155,7 @@ __trans_next_path_with_node(struct btree_trans *trans, struct btree *b,
}
#define trans_for_each_path_with_node(_trans, _b, _path) \
- for (_path = __trans_next_path_with_node((_trans), (_b), 0); \
+ for (_path = __trans_next_path_with_node((_trans), (_b), 1); \
(_path); \
_path = __trans_next_path_with_node((_trans), (_b), \
(_path)->idx + 1))