]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd/cache/pwl: initialize number_log_entries
authorYin Congmin <congmin.yin@intel.com>
Thu, 16 Sep 2021 13:00:32 +0000 (13:00 +0000)
committerDeepika Upadhyay <dupadhya@redhat.com>
Fri, 5 Nov 2021 09:22:02 +0000 (14:52 +0530)
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>
(cherry picked from commit dd33684733014a4dedf9551d75efe591d330d864)

src/librbd/cache/pwl/Request.h
src/librbd/cache/pwl/rwl/Request.cc
src/librbd/cache/pwl/ssd/Request.cc

index 8d5a0b4742a722d55ac56d8dbaaa592c8dc49290..7953c2887fca724ecb36c8f0083c1202863405cb 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);