From 0ae3a47990216112fb631ec422fa669b5e0c422d Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Fri, 16 Apr 2021 21:58:07 +0000 Subject: [PATCH] crimson/os/seastore/cache: check cached extents for is_retired Signed-off-by: Samuel Just --- src/crimson/os/seastore/cache.h | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index 1876e0960f2..70158632f37 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( -- 2.39.5