From f9df13f0dd079b3abc400a773f0d3eb0db501c76 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Mon, 22 Nov 2021 10:55:22 +0800 Subject: [PATCH] crimson/os/seastore: don't print detail if the extent is not ready Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/cache.h | 6 ++++-- src/crimson/os/seastore/cached_extent.cc | 2 ++ src/crimson/os/seastore/cached_extent.h | 9 +++++++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index eed53d48e09..81908a42f9f 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -207,7 +207,7 @@ public: auto ret = CachedExtent::make_cached_extent_ref( alloc_cache_buf(length)); ret->set_paddr(offset); - ret->state = CachedExtent::extent_state_t::CLEAN; + ret->state = CachedExtent::extent_state_t::CLEAN_PENDING; add_extent(ret); return read_extent( std::move(ret), std::forward(extent_init_func)); @@ -218,7 +218,7 @@ public: auto ret = CachedExtent::make_cached_extent_ref( alloc_cache_buf(length)); ret->set_paddr(offset); - ret->state = CachedExtent::extent_state_t::CLEAN; + ret->state = CachedExtent::extent_state_t::CLEAN_PENDING; extents.replace(*ret, *cached); // replace placeholder in transactions @@ -911,6 +911,7 @@ private: TCachedExtentRef&& extent, Func &&func ) { + assert(extent->state == CachedExtent::extent_state_t::CLEAN_PENDING); extent->set_io_wait(); return reader.read( extent->get_paddr(), @@ -918,6 +919,7 @@ private: extent->get_bptr() ).safe_then( [extent=std::move(extent), func=std::forward(func)]() mutable { + extent->state = CachedExtent::extent_state_t::CLEAN; /* TODO: crc should be checked against LBA manager */ extent->last_committed_crc = extent->get_crc32c(); diff --git a/src/crimson/os/seastore/cached_extent.cc b/src/crimson/os/seastore/cached_extent.cc index 86d128621da..fbfd8dad049 100644 --- a/src/crimson/os/seastore/cached_extent.cc +++ b/src/crimson/os/seastore/cached_extent.cc @@ -42,6 +42,8 @@ std::ostream &operator<<(std::ostream &out, CachedExtent::extent_state_t state) return out << "INITIAL_WRITE_PENDING"; case CachedExtent::extent_state_t::MUTATION_PENDING: return out << "MUTATION_PENDING"; + case CachedExtent::extent_state_t::CLEAN_PENDING: + return out << "CLEAN_PENDING"; case CachedExtent::extent_state_t::CLEAN: return out << "CLEAN"; case CachedExtent::extent_state_t::DIRTY: diff --git a/src/crimson/os/seastore/cached_extent.h b/src/crimson/os/seastore/cached_extent.h index 921323f84c1..ad54b540ce9 100644 --- a/src/crimson/os/seastore/cached_extent.h +++ b/src/crimson/os/seastore/cached_extent.h @@ -83,6 +83,7 @@ class CachedExtent : public boost::intrusive_ref_counter< enum class extent_state_t : uint8_t { INITIAL_WRITE_PENDING, // In Transaction::write_set and fresh_block_list MUTATION_PENDING, // In Transaction::write_set and mutated_block_list + CLEAN_PENDING, // CLEAN, but not yet read out CLEAN, // In Cache::extent_index, Transaction::read_set // during write, contents match disk, version == 0 DIRTY, // Same as CLEAN, but contents do not match disk, @@ -174,7 +175,10 @@ public: << ", state=" << state << ", last_committed_crc=" << last_committed_crc << ", refcount=" << use_count(); - print_detail(out); + if (state != extent_state_t::INVALID && + state != extent_state_t::CLEAN_PENDING) { + print_detail(out); + } return out << ")"; } @@ -253,7 +257,8 @@ public: bool is_clean() const { ceph_assert(is_valid()); return state == extent_state_t::INITIAL_WRITE_PENDING || - state == extent_state_t::CLEAN; + state == extent_state_t::CLEAN || + state == extent_state_t::CLEAN_PENDING; } /// Returns true if extent is dirty (has deltas on disk) -- 2.39.5