]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore/cache: check cached extents for is_retired
authorSamuel Just <sjust@redhat.com>
Fri, 16 Apr 2021 21:58:07 +0000 (21:58 +0000)
committerSamuel Just <sjust@redhat.com>
Thu, 22 Apr 2021 06:16:43 +0000 (23:16 -0700)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/os/seastore/cache.h

index 1876e0960f22e0062b56a642e1f15e31a853d939..70158632f37c5ba9403465303a7cddcabce4e71b 100644 (file)
@@ -164,16 +164,24 @@ public:
    */
   using get_extent_ertr = base_ertr;
   template <typename T>
-  get_extent_ertr::future<TCachedExtentRef<T>> get_extent(
+  using get_extent_ret = get_extent_ertr::future<TCachedExtentRef<T>>;
+  template <typename T>
+  get_extent_ret<T> 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<T>(static_cast<T*>(&*iter));
-      return ret->wait_io().then([ret=std::move(ret)]() mutable {
-       return get_extent_ertr::make_ready_future<TCachedExtentRef<T>>(
-         std::move(ret));
+      return ret->wait_io(
+      ).then([ret=std::move(ret)]() mutable -> get_extent_ret<T> {
+       if (!ret->is_retired()) {
+         return get_extent_ret<T>(
+           get_extent_ertr::ready_future_marker{},
+           std::move(ret));
+       } else {
+         return crimson::ct_error::eagain::make();
+       }
       });
     } else {
       auto ref = CachedExtent::make_cached_extent_ref<T>(