mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-05 06:18:45 -04:00
bcachefs: Fix error path in bch2_trans_commit_write_locked()
Previously, we were journalling extra_journal_entries (which is used for new btree roots, and irreversably mutates system state) before calling bch2_trans_fs_usage_apply(), which can fail - whoops. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
@@ -660,21 +660,13 @@ bch2_trans_commit_write_locked(struct btree_trans *trans,
|
||||
trans->journal_res.seq = c->journal.replay_journal_seq;
|
||||
}
|
||||
|
||||
if (unlikely(trans->extra_journal_entries.nr)) {
|
||||
memcpy_u64s_small(journal_res_entry(&c->journal, &trans->journal_res),
|
||||
trans->extra_journal_entries.data,
|
||||
trans->extra_journal_entries.nr);
|
||||
|
||||
trans->journal_res.offset += trans->extra_journal_entries.nr;
|
||||
trans->journal_res.u64s -= trans->extra_journal_entries.nr;
|
||||
}
|
||||
|
||||
/*
|
||||
* Not allowed to fail after we've gotten our journal reservation - we
|
||||
* have to use it:
|
||||
*/
|
||||
|
||||
if (!(trans->flags & BTREE_INSERT_JOURNAL_REPLAY)) {
|
||||
if (IS_ENABLED(CONFIG_BCACHEFS_DEBUG) &&
|
||||
!(trans->flags & BTREE_INSERT_JOURNAL_REPLAY)) {
|
||||
if (bch2_journal_seq_verify)
|
||||
trans_for_each_update(trans, i)
|
||||
i->k->k.version.lo = trans->journal_res.seq;
|
||||
@@ -700,6 +692,15 @@ bch2_trans_commit_write_locked(struct btree_trans *trans,
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (unlikely(trans->extra_journal_entries.nr)) {
|
||||
memcpy_u64s_small(journal_res_entry(&c->journal, &trans->journal_res),
|
||||
trans->extra_journal_entries.data,
|
||||
trans->extra_journal_entries.nr);
|
||||
|
||||
trans->journal_res.offset += trans->extra_journal_entries.nr;
|
||||
trans->journal_res.u64s -= trans->extra_journal_entries.nr;
|
||||
}
|
||||
|
||||
if (likely(!(trans->flags & BTREE_INSERT_JOURNAL_REPLAY))) {
|
||||
trans_for_each_update(trans, i) {
|
||||
struct journal *j = &c->journal;
|
||||
|
||||
Reference in New Issue
Block a user