From: Samuel Just Date: Mon, 13 Jul 2020 22:46:27 +0000 (-0700) Subject: crimson/os/seastore/cache: ignore invalid extents during commit X-Git-Tag: v16.1.0~1513^2~15 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1ef0dd7824d61e14d1a0d6afe2562048eae0946d;p=ceph.git crimson/os/seastore/cache: ignore invalid extents during commit This happens when a transaction mutates and then retires an extent. Signed-off-by: Samuel Just --- diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index 649eb9c8d088c..9f2b2c84bd466 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -117,6 +117,10 @@ std::optional Cache::try_construct_record(Transaction &t) // Add new copy of mutated blocks, set_io_wait to block until written record.deltas.reserve(t.mutated_block_list.size()); for (auto &i: t.mutated_block_list) { + if (!i->is_valid()) { + logger().debug("try_construct_record: ignoring invalid {}", *i); + continue; + } logger().debug("try_construct_record: mutating {}", *i); add_extent(i); i->prepare_write(); @@ -188,12 +192,20 @@ void Cache::complete_commit( // Add new copy of mutated blocks, set_io_wait to block until written for (auto &i: t.mutated_block_list) { + if (!i->is_valid()) { + logger().debug("complete_commit: ignoring invalid {}", *i); + continue; + } i->state = CachedExtent::extent_state_t::DIRTY; logger().debug("complete_commit: mutated {}", *i); i->on_delta_write(final_block_start); } for (auto &i: t.mutated_block_list) { + if (!i->is_valid()) { + logger().debug("complete_commit: ignoring invalid {}", *i); + continue; + } i->complete_io(); } }