From: Samuel Just Date: Thu, 6 Aug 2020 00:03:31 +0000 (-0700) Subject: crimson/os/seastore/cache: don't mark invalid extents clean X-Git-Tag: v16.1.0~1438^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8cd2dfaa772743715787e3ad1b7185b9a2ca641c;p=ceph.git 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 --- diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index d77ffde8864d..2e7855651abb 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); }