TXC's state was set before actual DB update which improperly permits
OpSequencer::flush to proceed.
This is a regression caused by:
https://github.com/ceph/ceph/pull/29674/commits/
a2fa546d02cfe2a910413acdec5ef11dbfacb359
Fixes: https://tracker.ceph.com/issues/42189
Signed-off-by: Igor Fedotov <ifedotov@suse.com>
void BlueStore::_txc_apply_kv(TransContext *txc, bool sync_submit_transaction)
{
ceph_assert(txc->state == TransContext::STATE_KV_QUEUED);
- txc->state = TransContext::STATE_KV_SUBMITTED;
{
#if defined(WITH_LTTNG)
auto start = mono_clock::now();
int r = cct->_conf->bluestore_debug_omit_kv_commit ? 0 : db->submit_transaction(txc->t);
ceph_assert(r == 0);
+ txc->state = TransContext::STATE_KV_SUBMITTED;
#if defined(WITH_LTTNG)
if (txc->tracing) {