From 249bcfb9287b7e75f706ab5cd643772e1c7b094c Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Thu, 19 May 2022 04:39:02 +0000 Subject: [PATCH] crimson: generalize journal_seq_t to tolerate different paddr_t types Introduced: bdc1c1490ff11269c7808e762893fcbdea3a0503 Fixes: https://tracker.ceph.com/issues/55706 Signed-off-by: Samuel Just --- src/crimson/os/seastore/seastore_types.h | 44 ++++++++++-------------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/src/crimson/os/seastore/seastore_types.h b/src/crimson/os/seastore/seastore_types.h index e7858e2b822..d841273f1ee 100644 --- a/src/crimson/os/seastore/seastore_types.h +++ b/src/crimson/os/seastore/seastore_types.h @@ -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; + 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; } }; -- 2.39.5