From 8cd2dfaa772743715787e3ad1b7185b9a2ca641c Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Wed, 5 Aug 2020 17:03:31 -0700 Subject: [PATCH] crimson/os/seastore/cache: don't mark invalid extents clean In the event that an extent is created and removed in the same transaction (invalid extent in fresh_block_list), update block specific metadata but don't add to cache and especially do not mark clean. LBAManager::complete_commit implementations are meant to use skip based on state in the same way. Signed-off-by: Samuel Just --- src/crimson/os/seastore/cache.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index d77ffde8864..2e7855651ab 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -187,10 +187,16 @@ void Cache::complete_commit( for (auto &i: t.fresh_block_list) { i->set_paddr(cur); cur.offset += i->get_length(); - i->state = CachedExtent::extent_state_t::CLEAN; i->last_committed_crc = i->get_crc32c(); - logger().debug("complete_commit: fresh {}", *i); i->on_initial_write(); + + if (!i->is_valid()) { + logger().debug("complete_commit: invalid {}", *i); + continue; + } + + i->state = CachedExtent::extent_state_t::CLEAN; + logger().debug("complete_commit: fresh {}", *i); add_extent(i); } -- 2.47.3