From: Yin Congmin Date: Thu, 16 Sep 2021 13:00:32 +0000 (+0000) Subject: librbd/cache/pwl: initialize number_log_entries X-Git-Tag: v17.1.0~723^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=dd33684733014a4dedf9551d75efe591d330d864;p=ceph.git librbd/cache/pwl: initialize number_log_entries Using uninitialized number_log_entries cause writesame req space calculation error. sometimes fail in TestMockCacheSSDWriteLog.writesame. Fixes: https://tracker.ceph.com/issues/52852 Signed-off-by: Yin Congmin --- diff --git a/src/librbd/cache/pwl/Request.h b/src/librbd/cache/pwl/Request.h index 86dd0f880ad1..27c43ee009e3 100644 --- a/src/librbd/cache/pwl/Request.h +++ b/src/librbd/cache/pwl/Request.h @@ -101,7 +101,7 @@ public: virtual void setup_buffer_resources( uint64_t *bytes_cached, uint64_t *bytes_dirtied, uint64_t *bytes_allocated, uint64_t *number_lanes, uint64_t *number_log_entries, - uint64_t *number_unpublished_reserves) {}; + uint64_t *number_unpublished_reserves) = 0; protected: utime_t m_arrived_time; diff --git a/src/librbd/cache/pwl/rwl/Request.cc b/src/librbd/cache/pwl/rwl/Request.cc index 2fe1318a33c3..09158127241a 100644 --- a/src/librbd/cache/pwl/rwl/Request.cc +++ b/src/librbd/cache/pwl/rwl/Request.cc @@ -62,6 +62,7 @@ void C_WriteSameRequest::setup_buffer_resources( uint64_t *number_lanes, uint64_t *number_log_entries, uint64_t *number_unpublished_reserves) { ceph_assert(this->image_extents.size() == 1); + *number_log_entries = 1; *bytes_dirtied += this->image_extents[0].second; auto pattern_length = this->bl.length(); this->m_resources.buffers.emplace_back(); diff --git a/src/librbd/cache/pwl/ssd/Request.cc b/src/librbd/cache/pwl/ssd/Request.cc index 994674ff43f9..e92e547c8e60 100644 --- a/src/librbd/cache/pwl/ssd/Request.cc +++ b/src/librbd/cache/pwl/ssd/Request.cc @@ -19,10 +19,9 @@ void C_WriteRequest::setup_buffer_resources( uint64_t *number_lanes, uint64_t *number_log_entries, uint64_t *number_unpublished_reserves) { - auto image_extents_size = this->image_extents.size(); *bytes_cached = 0; *bytes_allocated = 0; - *number_log_entries = image_extents_size; + *number_log_entries = this->image_extents.size(); for (auto &extent : this->image_extents) { *bytes_cached += extent.second; @@ -48,6 +47,7 @@ void C_WriteSameRequest::setup_buffer_resources( uint64_t *number_lanes, uint64_t *number_log_entries, uint64_t *number_unpublished_reserves) { ceph_assert(this->image_extents.size() == 1); + *number_log_entries = 1; *bytes_dirtied = this->image_extents[0].second; *bytes_cached = this->bl.length(); *bytes_allocated = round_up_to(*bytes_cached, MIN_WRITE_ALLOC_SSD_SIZE);