From bdc1c1490ff11269c7808e762893fcbdea3a0503 Mon Sep 17 00:00:00 2001 From: myoungwon oh Date: Tue, 17 May 2022 14:10:52 +0900 Subject: [PATCH] seastore: make journal_seq_t.cmp compatible with blk_paddr_t Signed-off-by: Myoungwon Oh --- src/crimson/os/seastore/seastore_types.h | 35 +++++++++++++++++------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/crimson/os/seastore/seastore_types.h b/src/crimson/os/seastore/seastore_types.h index 0fb7116ba5e89..a7ff94ac49450 100644 --- a/src/crimson/os/seastore/seastore_types.h +++ b/src/crimson/os/seastore/seastore_types.h @@ -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; -- 2.39.5