]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd/cache/pwl: initialize number_log_entries 43182/head
authorYin Congmin <congmin.yin@intel.com>
Thu, 16 Sep 2021 13:00:32 +0000 (13:00 +0000)
committerYin Congmin <congmin.yin@intel.com>
Fri, 8 Oct 2021 10:15:48 +0000 (10:15 +0000)
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 <congmin.yin@intel.com>
src/librbd/cache/pwl/Request.h
src/librbd/cache/pwl/rwl/Request.cc
src/librbd/cache/pwl/ssd/Request.cc

index 86dd0f880ad18ace1c88ad702a9cc248dcfdd33e..27c43ee009e36c03f2dc187f0ca61cd882ff38e5 100644 (file)
@@ -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;
index 2fe1318a33c39c6d5ad4190b8dc6ac60b9a5ddb2..09158127241a33ded3d6b6460e167277e4faf86b 100644 (file)
@@ -62,6 +62,7 @@ void C_WriteSameRequest<T>::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();
index 994674ff43f902e5fa7b271401d73f3242400b3e..e92e547c8e60782ccbda78acad8de4a140a6b43f 100644 (file)
@@ -19,10 +19,9 @@ void C_WriteRequest<T>::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<T>::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);