]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
seastore: make journal_seq_t.cmp compatible with blk_paddr_t
authormyoungwon oh <ohmyoungwon@gmail.com>
Tue, 17 May 2022 05:10:52 +0000 (14:10 +0900)
committermyoungwon oh <ohmyoungwon@gmail.com>
Thu, 19 May 2022 00:35:04 +0000 (09:35 +0900)
Signed-off-by: Myoungwon Oh <myoungwon.oh@samsung.com>
src/crimson/os/seastore/seastore_types.h

index 0fb7116ba5e89d23366bb06f600f02edacf17ec1..a7ff94ac494500b27d5ae51a9d4f73e1da03130c 100644 (file)
@@ -813,16 +813,31 @@ private:
     } else if (segment_seq < other.segment_seq) {
       return -1;
     }
-    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()) {
+    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;
+      }
+    } else {
+      // offset.get_addr_type() != other.get_addr_type()
       return -1;
     }
     return 0;