From 5807ffd76b866611fa176a2e681836d7738ea3ad Mon Sep 17 00:00:00 2001 From: Ilya Dryomov Date: Sat, 14 Aug 2021 19:06:28 +0200 Subject: [PATCH] librbd/cache/pwl: make pool size a multiple of 1M In ssd mode, we need it to be a multiple of bdev block size. Instead of munging it after opening the bdev in ssd/WriteLog.cc, let's impose a common restriction and round rbd_persistent_cache_size down to a 1M boundary. Signed-off-by: Ilya Dryomov (cherry picked from commit 1fc722bc218acfe8a52ad7be2c06347bddb42bbe) --- src/librbd/cache/pwl/AbstractWriteLog.cc | 3 +++ src/librbd/cache/pwl/Types.h | 1 + 2 files changed, 4 insertions(+) diff --git a/src/librbd/cache/pwl/AbstractWriteLog.cc b/src/librbd/cache/pwl/AbstractWriteLog.cc index 62fadc3331cf6..518628b952852 100644 --- a/src/librbd/cache/pwl/AbstractWriteLog.cc +++ b/src/librbd/cache/pwl/AbstractWriteLog.cc @@ -511,6 +511,9 @@ void AbstractWriteLog::pwl_init(Context *on_finish, DeferredContexts &later) m_log_pool_name = m_cache_state->path; m_log_pool_size = max(m_cache_state->size, MIN_POOL_SIZE); + m_log_pool_size = p2align(m_log_pool_size, POOL_SIZE_ALIGN); + ldout(cct, 5) << "pool " << m_log_pool_name << " size " << m_log_pool_size + << " (adjusted from " << m_cache_state->size << ")" << dendl; if ((!m_cache_state->present) && (access(m_log_pool_name.c_str(), F_OK) == 0)) { diff --git a/src/librbd/cache/pwl/Types.h b/src/librbd/cache/pwl/Types.h index 5d438b2f11d06..a646e971acbe1 100644 --- a/src/librbd/cache/pwl/Types.h +++ b/src/librbd/cache/pwl/Types.h @@ -173,6 +173,7 @@ const unsigned int MAX_CONCURRENT_WRITES = (1024 * 1024); const uint64_t DEFAULT_POOL_SIZE = 1u<<30; const uint64_t MIN_POOL_SIZE = DEFAULT_POOL_SIZE; +const uint64_t POOL_SIZE_ALIGN = 1 << 20; constexpr double USABLE_SIZE = (7.0 / 10); const uint64_t BLOCK_ALLOC_OVERHEAD_BYTES = 16; const uint8_t RWL_POOL_VERSION = 1; -- 2.39.5