From e760ca204b5a0f95b262467d1b56c96489f4d4bc Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Fri, 17 Jun 2022 15:58:33 +0800 Subject: [PATCH] crimson/os/seastore/cache: trim backref cache before preparing record Otherwise, the transaction record would contain backrefs that has been merged into the backref tree Signed-off-by: Xuehan Xu --- src/crimson/os/seastore/transaction_manager.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index 2f9bfe23e33..bd1ce25d1d4 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -355,6 +355,9 @@ TransactionManager::submit_transaction_direct( return tref.get_handle().enter(write_pipeline.prepare); }).si_then([this, FNAME, &tref, seq_to_trim=std::move(seq_to_trim)]() mutable -> submit_transaction_iertr::future<> { + if (seq_to_trim && *seq_to_trim != JOURNAL_SEQ_NULL) { + cache->trim_backref_bufs(*seq_to_trim); + } auto record = cache->prepare_record(tref, segment_cleaner.get()); tref.get_handle().maybe_release_collection_lock(); @@ -365,9 +368,6 @@ TransactionManager::submit_transaction_direct( (auto submit_result) mutable { SUBDEBUGT(seastore_t, "committed with {}", tref, submit_result); auto start_seq = submit_result.write_result.start_seq; - if (seq_to_trim && *seq_to_trim != JOURNAL_SEQ_NULL) { - cache->trim_backref_bufs(*seq_to_trim); - } cache->complete_commit( tref, submit_result.record_block_base,