Commit 9a71de67 authored by Kent Overstreet's avatar Kent Overstreet

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: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 389c92b3
......@@ -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 @@ int __bch2_trans_commit(struct btree_trans *trans, unsigned flags)
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;
}
......@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment