mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-02 07:04:24 +00:00
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
2 changed files with 17 additions and 4 deletions
|
@ -676,8 +676,6 @@ bch2_trans_commit_write_locked(struct btree_trans *trans, unsigned flags,
|
||||||
|
|
||||||
if (unlikely(trans->journal_transaction_names))
|
if (unlikely(trans->journal_transaction_names))
|
||||||
journal_transaction_name(trans);
|
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
|
* Drop journal reservation after dropping write locks, since dropping
|
||||||
* the journal reservation may kick off a journal write:
|
* 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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1139,7 +1138,8 @@ int __bch2_trans_commit(struct btree_trans *trans, unsigned flags)
|
||||||
}
|
}
|
||||||
retry:
|
retry:
|
||||||
bch2_trans_verify_not_in_restart(trans);
|
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_);
|
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)
|
if (ret)
|
||||||
goto out;
|
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;
|
goto retry;
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,6 +99,8 @@ static int bch2_journal_replay_key(struct btree_trans *trans,
|
||||||
unsigned update_flags = BTREE_TRIGGER_NORUN;
|
unsigned update_flags = BTREE_TRIGGER_NORUN;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
trans->journal_res.seq = k->journal_seq;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* BTREE_UPDATE_KEY_CACHE_RECLAIM disables key cache lookup/update to
|
* BTREE_UPDATE_KEY_CACHE_RECLAIM disables key cache lookup/update to
|
||||||
* keep the key cache coherent with the underlying btree. Nothing
|
* keep the key cache coherent with the underlying btree. Nothing
|
||||||
|
|
Loading…
Reference in a new issue