]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd/cache/pwl/rwl: don't get front() when list is empty
authorYin Congmin <congmin.yin@intel.com>
Fri, 4 Jun 2021 06:46:16 +0000 (14:46 +0800)
committerYin Congmin <congmin.yin@intel.com>
Fri, 24 Dec 2021 08:44:06 +0000 (16:44 +0800)
Signed-off-by: Yin Congmin <congmin.yin@intel.com>
src/librbd/cache/pwl/AbstractWriteLog.cc
src/librbd/cache/pwl/rwl/WriteLog.cc

index 8194cc115fabfc3ca4ccedcb3527a93f5c1ce752..7c1fa44d724c9f0d2f83bd4fe3a8cbda97398804 100644 (file)
@@ -2129,6 +2129,7 @@ bool AbstractWriteLog<I>::can_retire_entry(std::shared_ptr<GenericLogEntry> log_
 
   ldout(cct, 20) << dendl;
   ceph_assert(ceph_mutex_is_locked_by_me(m_lock));
+  ceph_assert(log_entry);
   return log_entry->can_retire();
 }
 
index b2db20c3d49084f307f51c754ed8f889017f980b..3e3d8ad6d32035464e0b0230892a40209db8605f 100644 (file)
@@ -475,10 +475,9 @@ bool WriteLog<I>::retire_entries(const unsigned long int frees_per_tx) {
     std::lock_guard locker(m_lock);
     initial_first_valid_entry = this->m_first_valid_entry;
     first_valid_entry = this->m_first_valid_entry;
-    auto entry = m_log_entries.front();
-    while (!m_log_entries.empty() &&
-           retiring_entries.size() < frees_per_tx &&
-           this->can_retire_entry(entry)) {
+    while (!m_log_entries.empty() && retiring_entries.size() < frees_per_tx &&
+           this->can_retire_entry(m_log_entries.front())) {
+      auto entry = m_log_entries.front();
       if (entry->log_entry_index != first_valid_entry) {
         lderr(cct) << "Retiring entry index (" << entry->log_entry_index
                    << ") and first valid log entry index (" << first_valid_entry
@@ -495,7 +494,6 @@ bool WriteLog<I>::retire_entries(const unsigned long int frees_per_tx) {
           this->m_blocks_to_log_entries.remove_log_entry(gen_write_entry);
         }
       }
-      entry = m_log_entries.front();
     }
   }