From e82f6714e828a208a3e1dd04c641c63bc7b3fad7 Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Fri, 19 Aug 2022 18:16:39 +0800 Subject: [PATCH] crimson/os/seastore/cache: skip invalid inline extents when completing commits Signed-off-by: Xuehan Xu --- src/crimson/os/seastore/cache.cc | 60 +++++++++++++++++--------------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index beab454ee9df4..b28f1c18321bd 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -1423,6 +1423,10 @@ void Cache::complete_commit( std::vector backref_list; t.for_each_fresh_block([&](const CachedExtentRef &i) { + if (!i->is_valid()) { + return; + } + bool is_inline = false; if (i->is_inline()) { is_inline = true; @@ -1431,35 +1435,33 @@ void Cache::complete_commit( i->last_committed_crc = i->get_crc32c(); i->on_initial_write(); - if (i->is_valid()) { - i->state = CachedExtent::extent_state_t::CLEAN; - DEBUGT("add extent as fresh, inline={} -- {}", - t, is_inline, *i); - const auto t_src = t.get_src(); - add_extent(i, &t_src); - epm.mark_space_used(i->get_paddr(), i->get_length()); - if (is_backref_mapped_extent_node(i)) { - DEBUGT("backref_list new {} len {}", - t, - i->get_paddr(), - i->get_length()); - backref_list.emplace_back( - std::make_unique( - i->get_paddr(), - i->is_logical() - ? i->cast()->get_laddr() - : (is_lba_node(i->get_type()) - ? i->cast()->get_node_meta().begin - : L_ADDR_NULL), - i->get_length(), - i->get_type(), - start_seq)); - } else if (is_backref_node(i->get_type())) { - add_backref_extent(i->get_paddr(), i->get_type()); - } else { - ERRORT("{}", t, *i); - ceph_abort("not possible"); - } + i->state = CachedExtent::extent_state_t::CLEAN; + DEBUGT("add extent as fresh, inline={} -- {}", + t, is_inline, *i); + const auto t_src = t.get_src(); + add_extent(i, &t_src); + epm.mark_space_used(i->get_paddr(), i->get_length()); + if (is_backref_mapped_extent_node(i)) { + DEBUGT("backref_list new {} len {}", + t, + i->get_paddr(), + i->get_length()); + backref_list.emplace_back( + std::make_unique( + i->get_paddr(), + i->is_logical() + ? i->cast()->get_laddr() + : (is_lba_node(i->get_type()) + ? i->cast()->get_node_meta().begin + : L_ADDR_NULL), + i->get_length(), + i->get_type(), + start_seq)); + } else if (is_backref_node(i->get_type())) { + add_backref_extent(i->get_paddr(), i->get_type()); + } else { + ERRORT("{}", t, *i); + ceph_abort("not possible"); } }); -- 2.39.5