bcachefs: BTREE_INSERT_JOURNAL_REPLAY now "don't init trans->journal_res"

This slightly changes how trans->journal_res works, in preparation for
changing the btree write buffer flush path to use it.

Now, BTREE_INSERT_JOURNAL_REPLAY means "don't take a journal
reservation; trans->journal_res.seq already refers to the journal
sequence number to pin".

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
Kent Overstreet 2023-11-08 22:00:00 -05:00
parent 389c92b36e
commit 9a71de675f
2 changed files with 17 additions and 4 deletions

View File

@ -676,8 +676,6 @@ bch2_trans_commit_write_locked(struct btree_trans *trans, unsigned flags,
if (unlikely(trans->journal_transaction_names))
journal_transaction_name(trans);
} else {
trans->journal_res.seq = c->journal.replay_journal_seq;
}
/*
@ -896,7 +894,8 @@ static inline int do_bch2_trans_commit(struct btree_trans *trans, unsigned flags
* Drop journal reservation after dropping write locks, since dropping
* the journal reservation may kick off a journal write:
*/
bch2_journal_res_put(&c->journal, &trans->journal_res);
if (likely(!(flags & BTREE_INSERT_JOURNAL_REPLAY)))
bch2_journal_res_put(&c->journal, &trans->journal_res);
return ret;
}
@ -1139,7 +1138,8 @@ int __bch2_trans_commit(struct btree_trans *trans, unsigned flags)
}
retry:
bch2_trans_verify_not_in_restart(trans);
memset(&trans->journal_res, 0, sizeof(trans->journal_res));
if (likely(!(flags & BTREE_INSERT_JOURNAL_REPLAY)))
memset(&trans->journal_res, 0, sizeof(trans->journal_res));
ret = do_bch2_trans_commit(trans, flags, &i, _RET_IP_);
@ -1164,5 +1164,16 @@ err:
if (ret)
goto out;
/*
* We might have done another transaction commit in the error path -
* i.e. btree write buffer flush - which will have made use of
* trans->journal_res, but with BTREE_INSERT_JOURNAL_REPLAY that is how
* the journal sequence number to pin is passed in - so we must restart:
*/
if (flags & BTREE_INSERT_JOURNAL_REPLAY) {
ret = -BCH_ERR_transaction_restart_nested;
goto out;
}
goto retry;
}

View File

@ -99,6 +99,8 @@ static int bch2_journal_replay_key(struct btree_trans *trans,
unsigned update_flags = BTREE_TRIGGER_NORUN;
int ret;
trans->journal_res.seq = k->journal_seq;
/*
* BTREE_UPDATE_KEY_CACHE_RECLAIM disables key cache lookup/update to
* keep the key cache coherent with the underlying btree. Nothing