mirror of
https://github.com/ceph/ceph
synced 2025-02-23 02:57:21 +00:00
crimson/os/seastore/cache: retire PRESENT extents and add to retired-set
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
This commit is contained in:
parent
77839d6252
commit
43ddfe3f3a
@ -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();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user