]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson: generalize journal_seq_t to tolerate different paddr_t types 46333/head
authorSamuel Just <sjust@redhat.com>
Thu, 19 May 2022 04:39:02 +0000 (04:39 +0000)
committerSamuel Just <sjust@redhat.com>
Thu, 19 May 2022 07:26:42 +0000 (07:26 +0000)
Introduced: bdc1c1490ff11269c7808e762893fcbdea3a0503
Fixes: https://tracker.ceph.com/issues/55706
Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/os/seastore/seastore_types.h

index e7858e2b822b4a0c3b0e52380e9ed515bd779e79..d841273f1ee08d3fe4faa57650167732928994cd 100644 (file)
@@ -811,34 +811,28 @@ private:
     } else if (segment_seq < other.segment_seq) {
       return -1;
     }
-    if (offset.get_addr_type() == addr_types_t::SEGMENT &&
-       other.offset.get_addr_type() == addr_types_t::SEGMENT) {
-      auto &seg_paddr = offset.as_seg_paddr();
-      auto &o_seg_paddr = other.offset.as_seg_paddr();
-      if (seg_paddr.get_segment_off() > o_seg_paddr.get_segment_off()) {
-       return 1;
-      } else if (seg_paddr.get_segment_off() < o_seg_paddr.get_segment_off()) {
-       return -1;
-      }
-      if (seg_paddr.get_segment_id() > o_seg_paddr.get_segment_id()) {
-       return 1;
-      } else if (seg_paddr.get_segment_id() < o_seg_paddr.get_segment_id()) {
-       return -1;
-      }
-    } else if (offset.get_addr_type() == addr_types_t::RANDOM_BLOCK &&
-       other.offset.get_addr_type() == addr_types_t::RANDOM_BLOCK) {
-      auto &blk_paddr = offset.as_blk_paddr();
-      auto &o_blk_paddr = other.offset.as_blk_paddr();
-      if (blk_paddr.get_block_off() > o_blk_paddr.get_block_off()) {
-       return 1;
-      } else if (blk_paddr.get_block_off() < o_blk_paddr.get_block_off()) {
-       return -1;
+    using ret_t = std::pair<int64_t, segment_id_t>;
+    auto to_pair = [](const paddr_t &addr) -> ret_t {
+      if (addr.get_addr_type() == addr_types_t::SEGMENT) {
+       auto &seg_addr = addr.as_seg_paddr();
+       return ret_t(seg_addr.get_segment_off(), seg_addr.get_segment_id());
+      } else if (addr.get_addr_type() == addr_types_t::RANDOM_BLOCK) {
+       auto &blk_addr = addr.as_blk_paddr();
+       return ret_t(blk_addr.get_block_off(), MAX_SEG_ID);
+      } else {
+       assert(0 == "impossible");
+       return ret_t(0, MAX_SEG_ID);
       }
-    } else {
-      // offset.get_addr_type() != other.get_addr_type()
+    };
+    auto left = to_pair(offset);
+    auto right = to_pair(other.offset);
+    if (left > right) {
+      return 1;
+    } else if (left < right) {
       return -1;
+    } else {
+      return 0;
     }
-    return 0;
   }
 };