]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/cache: cleanup get_extent_if_cached()
authorYingxin Cheng <yingxin.cheng@intel.com>
Wed, 30 Jun 2021 03:44:56 +0000 (11:44 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Thu, 1 Jul 2021 02:15:21 +0000 (10:15 +0800)
And remove the query_cache_for_extent(t).

Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/cache.h

index bbac701e0347875cb8322566eeda1a8b73816eb5..6c55c9b91330ab1c8af461a7d64a97b736132769 100644 (file)
@@ -231,18 +231,26 @@ public:
   get_extent_if_cached_ret get_extent_if_cached(
     Transaction &t,
     paddr_t offset) {
-    return seastar::do_with(
-      CachedExtentRef(),
-      [this, &t, offset](auto &ret) {
-       auto status = query_cache_for_extent(t, offset, &ret);
-       auto wait = seastar::now();
-       if (status == Transaction::get_extent_ret::PRESENT) {
-         wait = ret->wait_io();
-       }
-       return trans_intr::make_interruptible(
-         wait.then([ret] { return std::move(ret); })
-       );
-      });
+    CachedExtentRef ret;
+    auto result = t.get_extent(offset, &ret);
+    if (result != Transaction::get_extent_ret::ABSENT) {
+      // including get_extent_ret::RETIRED
+      return get_extent_if_cached_iertr::make_ready_future<
+        CachedExtentRef>(ret);
+    }
+
+    // get_extent_ret::PRESENT from transaction
+    result = query_cache_for_extent(offset, &ret);
+    if (result == Transaction::get_extent_ret::ABSENT) {
+      return get_extent_if_cached_iertr::make_ready_future<
+        CachedExtentRef>();
+    }
+
+    // get_extent_ret::PRESENT from cache
+    return ret->wait_io().then([ret] {
+      return get_extent_if_cached_iertr::make_ready_future<
+        CachedExtentRef>(ret);
+    });
   }
 
   /**
@@ -588,18 +596,6 @@ private:
     }
   }
 
-  Transaction::get_extent_ret query_cache_for_extent(
-    Transaction &t,
-    paddr_t offset,
-    CachedExtentRef *out) {
-    auto result = t.get_extent(offset, out);
-    if (result != Transaction::get_extent_ret::ABSENT) {
-      return result;
-    } else {
-      return query_cache_for_extent(offset, out);
-    }
-  }
-
 };
 using CacheRef = std::unique_ptr<Cache>;