From 8911b29fa230dddc319735fb7e4adad6000d545d Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Fri, 8 Nov 2024 09:38:11 +0800 Subject: [PATCH] crimson/os/seastore/cache: throw enospc when failed to alloc new extents Signed-off-by: Xuehan Xu --- src/crimson/os/seastore/cache.h | 7 ++++++- src/crimson/os/seastore/transaction_manager.h | 8 -------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index dba3610e95f46..c37d9c5c7cd39 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -978,7 +978,8 @@ public: auto result = epm.alloc_new_non_data_extent(t, T::TYPE, length, hint, gen); #endif if (!result) { - return nullptr; + SUBERRORT(seastore_cache, "insufficient space", t); + std::rethrow_exception(crimson::ct_error::enospc::exception_ptr()); } auto ret = CachedExtent::make_cached_extent_ref(std::move(result->bp)); ret->init(CachedExtent::extent_state_t::INITIAL_WRITE_PENDING, @@ -1019,6 +1020,10 @@ public: #else auto results = epm.alloc_new_data_extents(t, T::TYPE, length, hint, gen); #endif + if (results.empty()) { + SUBERRORT(seastore_cache, "insufficient space", t); + std::rethrow_exception(crimson::ct_error::enospc::exception_ptr()); + } std::vector> extents; for (auto &result : results) { auto ret = CachedExtent::make_cached_extent_ref(std::move(result.bp)); diff --git a/src/crimson/os/seastore/transaction_manager.h b/src/crimson/os/seastore/transaction_manager.h index dd03fca3c0f66..841c5638abc35 100644 --- a/src/crimson/os/seastore/transaction_manager.h +++ b/src/crimson/os/seastore/transaction_manager.h @@ -304,10 +304,6 @@ public: len, placement_hint, INIT_GENERATION); - if (!ext) { - SUBERRORT(seastore_tm, "insufficient space!", t); - return crimson::ct_error::enospc::make(); - } return lba_manager->alloc_extent( t, laddr_hint, @@ -343,10 +339,6 @@ public: len, placement_hint, INIT_GENERATION); - if (exts.empty()) { - SUBERRORT(seastore_tm, "insufficient space!", t); - return crimson::ct_error::enospc::make(); - } return lba_manager->alloc_extents( t, laddr_hint, -- 2.39.5