From: Samuel Just Date: Fri, 16 Apr 2021 21:58:07 +0000 (+0000) Subject: crimson/os/seastore/cache: check cached extents for is_retired X-Git-Tag: v17.1.0~2174^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0ae3a47990216112fb631ec422fa669b5e0c422d;p=ceph.git crimson/os/seastore/cache: check cached extents for is_retired Signed-off-by: Samuel Just --- diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index 1876e0960f22..70158632f37c 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -164,16 +164,24 @@ public: */ using get_extent_ertr = base_ertr; template - get_extent_ertr::future> get_extent( + using get_extent_ret = get_extent_ertr::future>; + template + get_extent_ret get_extent( paddr_t offset, ///< [in] starting addr segment_off_t length ///< [in] length ) { if (auto iter = extents.find_offset(offset); iter != extents.end()) { auto ret = TCachedExtentRef(static_cast(&*iter)); - return ret->wait_io().then([ret=std::move(ret)]() mutable { - return get_extent_ertr::make_ready_future>( - std::move(ret)); + return ret->wait_io( + ).then([ret=std::move(ret)]() mutable -> get_extent_ret { + if (!ret->is_retired()) { + return get_extent_ret( + get_extent_ertr::ready_future_marker{}, + std::move(ret)); + } else { + return crimson::ct_error::eagain::make(); + } }); } else { auto ref = CachedExtent::make_cached_extent_ref(