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:
parent
389c92b36e
commit
9a71de675f
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user