X-Git-Url: https://git.proxmox.com/?p=ceph.git;a=blobdiff_plain;f=ceph%2Fsrc%2Fcrimson%2Fos%2Fseastore%2Ftransaction_manager.cc;fp=ceph%2Fsrc%2Fcrimson%2Fos%2Fseastore%2Ftransaction_manager.cc;h=ad8e5f1a65f450b6e567f95ffefe3df07a436a6a;hp=eda9ca1c56fb0ca18903fe171624767d3b161a1f;hb=aee94f6923ba628a85d855d0c5316d0da78bfa2a;hpb=27f45121cc74e31203777ad565f78d8aad9b92a2 diff --git a/ceph/src/crimson/os/seastore/transaction_manager.cc b/ceph/src/crimson/os/seastore/transaction_manager.cc index eda9ca1c5..ad8e5f1a6 100644 --- a/ceph/src/crimson/os/seastore/transaction_manager.cc +++ b/ceph/src/crimson/os/seastore/transaction_manager.cc @@ -216,7 +216,7 @@ TransactionManager::ref_ret TransactionManager::dec_ref( { LOG_PREFIX(TransactionManager::dec_ref); TRACET("{}", t, *ref); - return lba_manager->decref_extent(t, ref->get_laddr() + return lba_manager->decref_extent(t, ref->get_laddr(), true ).si_then([this, FNAME, &t, ref](auto result) { DEBUGT("extent refcount is decremented to {} -- {}", t, result.refcount, *ref); @@ -227,29 +227,29 @@ TransactionManager::ref_ret TransactionManager::dec_ref( }); } -TransactionManager::ref_ret TransactionManager::dec_ref( +TransactionManager::ref_ret TransactionManager::_dec_ref( Transaction &t, - laddr_t offset) + laddr_t offset, + bool cascade_remove) { - LOG_PREFIX(TransactionManager::dec_ref); + LOG_PREFIX(TransactionManager::_dec_ref); TRACET("{}", t, offset); - return lba_manager->decref_extent(t, offset + return lba_manager->decref_extent(t, offset, cascade_remove ).si_then([this, FNAME, offset, &t](auto result) -> ref_ret { DEBUGT("extent refcount is decremented to {} -- {}~{}, {}", t, result.refcount, offset, result.length, result.addr); - if (result.refcount == 0 && !result.addr.is_zero()) { - return cache->retire_extent_addr( - t, result.addr, result.length - ).si_then([] { - return ref_ret( - interruptible::ready_future_marker{}, - 0); - }); - } else { - return ref_ret( - interruptible::ready_future_marker{}, - result.refcount); + auto fut = ref_iertr::now(); + if (result.refcount == 0) { + if (result.addr.is_paddr() && + !result.addr.get_paddr().is_zero()) { + fut = cache->retire_extent_addr( + t, result.addr.get_paddr(), result.length); + } } + + return fut.si_then([result=std::move(result)] { + return result.refcount; + }); }); } @@ -666,7 +666,7 @@ TransactionManagerRef make_transaction_manager( ->get_journal_size() - primary_device->get_block_size(); // see CircularBoundedJournal::get_records_start() roll_start = static_cast(primary_device) - ->get_journal_start() + primary_device->get_block_size(); + ->get_shard_journal_start() + primary_device->get_block_size(); ceph_assert_always(roll_size <= DEVICE_OFF_MAX); ceph_assert_always((std::size_t)roll_size + roll_start <= primary_device->get_available_size());