From: Yingxin Cheng Date: Mon, 28 Jun 2021 13:36:18 +0000 (+0800) Subject: crimson/os/seastore/cache: retire PRESENT extents and add to retired-set X-Git-Tag: v17.1.0~1508^2~11 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=43ddfe3f3a27dacef57fd42ec6e3dad0b1754998;p=ceph-ci.git crimson/os/seastore/cache: retire PRESENT extents and add to retired-set Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index cb227e0cfe1..7c9d883c574 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -31,20 +31,27 @@ Cache::retire_extent_ret Cache::retire_extent_addr( Transaction &t, paddr_t addr, extent_len_t length) { LOG_PREFIX(Cache::retire_extent); - if (auto ext = t.write_set.find_offset(addr); ext != t.write_set.end()) { - DEBUGT("found {} in t.write_set", t, addr); + CachedExtentRef ext; + auto result = t.get_extent(addr, &ext); + if (result == Transaction::get_extent_ret::PRESENT) { + DEBUGT("found {} in t", t, addr); t.add_to_retired_set(CachedExtentRef(&*ext)); return retire_extent_iertr::now(); - } else if (auto iter = extents.find_offset(addr); - iter != extents.end()) { - auto ret = CachedExtentRef(&*iter); + } else if (result == Transaction::get_extent_ret::RETIRED) { + ERRORT("{} is already retired", t, addr); + ceph_abort(); + } + + // absent from transaction + result = query_cache_for_extent(addr, &ext); + if (result == Transaction::get_extent_ret::PRESENT) { return trans_intr::make_interruptible( - ret->wait_io() - ).then_interruptible([&t, ret=std::move(ret)]() mutable { - t.add_to_retired_set(ret); + ext->wait_io() + ).then_interruptible([&t, ext=std::move(ext)]() mutable { + t.add_to_retired_set(ext); return retire_extent_iertr::now(); }); - } else { + } else { // result == get_extent_ret::ABSENT t.add_to_retired_uncached(addr, length); return retire_extent_iertr::now(); }