Skip to content

Commit 865ad1d

Browse files
author
Kent Overstreet
committed
bcachefs: Check for bad write buffer key when moving from journal
Signed-off-by: Kent Overstreet <[email protected]>
1 parent 5c4acbc commit 865ad1d

File tree

3 files changed

+10
-6
lines changed

3 files changed

+10
-6
lines changed

fs/bcachefs/btree_update.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,7 @@ bch2_trans_jset_entry_alloc(struct btree_trans *trans, unsigned u64s)
170170

171171
int bch2_btree_insert_clone_trans(struct btree_trans *, enum btree_id, struct bkey_i *);
172172

173-
int bch2_btree_write_buffer_insert_err(struct btree_trans *,
174-
enum btree_id, struct bkey_i *);
173+
int bch2_btree_write_buffer_insert_err(struct bch_fs *, enum btree_id, struct bkey_i *);
175174

176175
static inline int __must_check bch2_trans_update_buffered(struct btree_trans *trans,
177176
enum btree_id btree,
@@ -182,7 +181,7 @@ static inline int __must_check bch2_trans_update_buffered(struct btree_trans *tr
182181
EBUG_ON(k->k.u64s > BTREE_WRITE_BUFERED_U64s_MAX);
183182

184183
if (unlikely(!btree_type_uses_write_buffer(btree))) {
185-
int ret = bch2_btree_write_buffer_insert_err(trans, btree, k);
184+
int ret = bch2_btree_write_buffer_insert_err(trans->c, btree, k);
186185
dump_stack();
187186
return ret;
188187
}

fs/bcachefs/btree_write_buffer.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -267,10 +267,9 @@ static void move_keys_from_inc_to_flushing(struct btree_write_buffer *wb)
267267
BUG_ON(wb->sorted.size < wb->flushing.keys.nr);
268268
}
269269

270-
int bch2_btree_write_buffer_insert_err(struct btree_trans *trans,
270+
int bch2_btree_write_buffer_insert_err(struct bch_fs *c,
271271
enum btree_id btree, struct bkey_i *k)
272272
{
273-
struct bch_fs *c = trans->c;
274273
struct printbuf buf = PRINTBUF;
275274

276275
prt_printf(&buf, "attempting to do write buffer update on non wb btree=");
@@ -332,7 +331,7 @@ static int bch2_btree_write_buffer_flush_locked(struct btree_trans *trans)
332331
struct btree_write_buffered_key *k = &wb->flushing.keys.data[i->idx];
333332

334333
if (unlikely(!btree_type_uses_write_buffer(k->btree))) {
335-
ret = bch2_btree_write_buffer_insert_err(trans, k->btree, &k->k);
334+
ret = bch2_btree_write_buffer_insert_err(trans->c, k->btree, &k->k);
336335
goto err;
337336
}
338337

fs/bcachefs/btree_write_buffer.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,12 @@ static inline int bch2_journal_key_to_wb(struct bch_fs *c,
8989
struct journal_keys_to_wb *dst,
9090
enum btree_id btree, struct bkey_i *k)
9191
{
92+
if (unlikely(!btree_type_uses_write_buffer(btree))) {
93+
int ret = bch2_btree_write_buffer_insert_err(c, btree, k);
94+
dump_stack();
95+
return ret;
96+
}
97+
9298
EBUG_ON(!dst->seq);
9399

94100
return k->k.type == KEY_TYPE_accounting

0 commit comments

Comments
 (0)