]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/cache: get_absent_extent to accept pin_crc
authorMatan Breizman <mbreizma@redhat.com>
Sun, 7 Dec 2025 10:31:41 +0000 (10:31 +0000)
committerMatan Breizman <mbreizma@redhat.com>
Mon, 8 Dec 2025 16:50:07 +0000 (16:50 +0000)
Allow pin_to_extent_by_type and pin_to_extent to pass the pin CRC.
As get_absent_extent and read_extent has other users which are not
pin_to_extent - use CRC_NULL as the default value.
This change would allow us to move the integrity checks to _read_extent.
See next commit.

Signed-off-by: Matan Breizman <mbreizma@redhat.com>
src/crimson/os/seastore/cache.cc
src/crimson/os/seastore/cache.h
src/crimson/os/seastore/transaction_manager.h

index 051a3762b90a9583e90f3f6a1a6d861511838450..6306def1397a1d6c3edff40d0638ab2a9980e2a9 100644 (file)
@@ -2284,7 +2284,8 @@ Cache::_get_absent_extent_by_type(
   paddr_t offset,
   laddr_t laddr,
   extent_len_t length,
-  extent_init_func_t &&extent_init_func)
+  extent_init_func_t &&extent_init_func,
+  uint32_t pin_crc)
 {
   LOG_PREFIX(Cache::_get_absent_extent_by_type);
 
@@ -2379,7 +2380,7 @@ Cache::_get_absent_extent_by_type(
   t.add_to_read_set(CachedExtentRef(ret));
   touch_extent_fully(*ret, &t_src, t.get_cache_hint());
   return trans_intr::make_interruptible(
-    read_extent(std::move(ret), 0, length, &t_src
+    read_extent(std::move(ret), 0, length, &t_src, pin_crc
     ).safe_then([laddr](auto extent) {
       if (extent->is_logical()) {
        extent->template cast<LogicalCachedExtent>()->set_laddr(laddr);
index 0a0c65819f48bc6d4266d0e5e0f05348d6145ac7..1977a0fe7647c7e98b897856504cd41defaf4393 100644 (file)
@@ -391,7 +391,8 @@ public:
     extent_len_t length,
     extent_len_t partial_off,
     extent_len_t partial_len,
-    Func &&extent_init_func) {
+    Func &&extent_init_func,
+    uint32_t pin_crc = CRC_NULL) {
     LOG_PREFIX(Cache::get_absent_extent);
 
 #ifndef NDEBUG
@@ -432,7 +433,7 @@ public:
       *ret, &t_src, t.get_cache_hint(),
       partial_off, partial_len);
     return trans_intr::make_interruptible(
-      read_extent<T>(std::move(ret), partial_off, partial_len, &t_src));
+      read_extent<T>(std::move(ret), partial_off, partial_len, &t_src, pin_crc));
   }
 
   /*
@@ -1009,7 +1010,8 @@ private:
     paddr_t offset,
     laddr_t laddr,
     extent_len_t length,
-    extent_init_func_t &&extent_init_func);
+    extent_init_func_t &&extent_init_func,
+    uint32_t pin_crc);
 
   backref_entryrefs_by_seq_t backref_entryrefs_by_seq;
   backref_entry_mset_t backref_entry_mset;
@@ -1065,12 +1067,13 @@ public:
    */
   template <typename Func>
   get_extent_by_type_ret get_absent_extent_by_type(
-    Transaction &t,         ///< [in] transaction
-    extent_types_t type,    ///< [in] type tag
-    paddr_t offset,         ///< [in] starting addr
-    laddr_t laddr,          ///< [in] logical address if logical
-    extent_len_t length,    ///< [in] length
-    Func &&extent_init_func ///< [in] extent init func
+    Transaction &t,             ///< [in] transaction
+    extent_types_t type,        ///< [in] type tag
+    paddr_t offset,             ///< [in] starting addr
+    laddr_t laddr,              ///< [in] logical address if logical
+    extent_len_t length,        ///< [in] length
+    Func &&extent_init_func,    ///< [in] extent init func
+    uint32_t pin_crc = CRC_NULL ///< [in] pin checksum (See: pin_to_extent)
   ) {
     return _get_absent_extent_by_type(
       t,
@@ -1078,7 +1081,8 @@ public:
       offset,
       laddr,
       length,
-      extent_init_func_t(std::forward<Func>(extent_init_func)));
+      extent_init_func_t(std::forward<Func>(extent_init_func)),
+      pin_crc);
   }
 
   get_extent_by_type_ret get_absent_extent_by_type(
@@ -1895,7 +1899,8 @@ private:
     CachedExtentRef &&extent,
     extent_len_t offset,
     extent_len_t length,
-    const Transaction::src_t *p_src)
+    const Transaction::src_t *p_src,
+    uint32_t pin_crc)
   {
     LOG_PREFIX(Cache::read_extent);
     assert(extent->state == CachedExtent::extent_state_t::EXIST_CLEAN ||
@@ -1923,7 +1928,7 @@ private:
           read_range.ptr);
       });
     }).safe_then(
-      [this, FNAME, extent=std::move(extent), offset, length]() mutable {
+      [this, FNAME, extent=std::move(extent), offset, length, pin_crc]() mutable {
         ceph_assert(extent->state == CachedExtent::extent_state_t::EXIST_CLEAN
           || extent->state == CachedExtent::extent_state_t::CLEAN
           || !extent->is_valid());
@@ -1965,9 +1970,10 @@ private:
     TCachedExtentRef<T>&& extent,
     extent_len_t offset,
     extent_len_t length,
-    const Transaction::src_t* p_src
+    const Transaction::src_t* p_src,
+    uint32_t pin_crc = CRC_NULL
   ) {
-    return _read_extent(std::move(extent), offset, length, p_src
+    return _read_extent(std::move(extent), offset, length, p_src, pin_crc
     ).safe_then([](auto extent) {
       return extent->template cast<T>();
     });
index 45649505d544ee78aa5a1f744edb0f275622d2ec..d1c1c1e6e8791797c21903a4d35c059a4f98baca 100644 (file)
@@ -1466,7 +1466,8 @@ private:
           extent.set_laddr(laddr);
           maybe_init(extent);
           extent.set_seen_by_users();
-      })
+      }),
+      pin.get_checksum()
     );
     if (ref->is_fully_loaded()) {
       check_full_extent_integrity(t, ref->calc_crc32c(), pin.get_checksum());
@@ -1524,7 +1525,8 @@ private:
         // No change to extent::seen_by_user because this path is only
         // for background cleaning.
       }
-    ));
+    ),
+    pin.get_checksum());
     SUBDEBUGT(seastore_tm, "got extent -- {} fully_loaded: {}",
               t, *ref, ref->is_fully_loaded());
     assert(ref->is_fully_loaded());