]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: Change append_io_events() to take Extents
authorJoshua Baergen <jbaergen@digitalocean.com>
Thu, 9 Nov 2023 16:43:21 +0000 (09:43 -0700)
committerJoshua Baergen <jbaergen@digitalocean.com>
Wed, 6 Dec 2023 21:25:34 +0000 (14:25 -0700)
An upcoming commits will use this to change how multi-extent image
requests are appended to the journal.

Signed-off-by: Joshua Baergen <jbaergen@digitalocean.com>
(cherry picked from commit 9fae091ea22c627cb18cc68055afa7acf634c1b7)

src/librbd/Journal.cc
src/librbd/Journal.h

index 0cd38b22adaa9ee29b0f3bc17f82ebbc0c3e3e06..d35f910f203f2ccd61fdb7225dbcfa4eb46c0aea 100644 (file)
@@ -39,6 +39,7 @@ using util::create_async_context_callback;
 using util::create_context_callback;
 using journal::util::C_DecodeTag;
 using journal::util::C_DecodeTags;
+using io::Extents;
 
 namespace {
 
@@ -788,8 +789,8 @@ uint64_t Journal<I>::append_write_event(uint64_t offset, size_t length,
     bytes_remaining -= event_length;
   } while (bytes_remaining > 0);
 
-  return append_io_events(journal::EVENT_TYPE_AIO_WRITE, bufferlists, offset,
-                          length, flush_entry, 0);
+  return append_io_events(journal::EVENT_TYPE_AIO_WRITE, bufferlists,
+                          {{offset, length}}, flush_entry, 0);
 }
 
 template <typename I>
@@ -799,14 +800,14 @@ uint64_t Journal<I>::append_io_event(journal::EventEntry &&event_entry,
   bufferlist bl;
   event_entry.timestamp = ceph_clock_now();
   encode(event_entry, bl);
-  return append_io_events(event_entry.get_event_type(), {bl}, offset, length,
-                          flush_entry, filter_ret_val);
+  return append_io_events(event_entry.get_event_type(), {bl},
+                          {{offset, length}}, flush_entry, filter_ret_val);
 }
 
 template <typename I>
 uint64_t Journal<I>::append_io_events(journal::EventType event_type,
                                       const Bufferlists &bufferlists,
-                                      uint64_t offset, size_t length,
+                                      const Extents &image_extents,
                                       bool flush_entry, int filter_ret_val) {
   ceph_assert(!bufferlists.empty());
 
@@ -827,14 +828,13 @@ uint64_t Journal<I>::append_io_events(journal::EventType event_type,
 
   {
     std::lock_guard event_locker{m_event_lock};
-    m_events[tid] = Event(futures, offset, length, filter_ret_val);
+    m_events[tid] = Event(futures, image_extents, filter_ret_val);
   }
 
   CephContext *cct = m_image_ctx.cct;
   ldout(cct, 20) << this << " " << __func__ << ": "
                  << "event=" << event_type << ", "
-                 << "offset=" << offset << ", "
-                 << "length=" << length << ", "
+                 << "image_extents=" << image_extents << ", "
                  << "flush=" << flush_entry << ", tid=" << tid << dendl;
 
   Context *on_safe = create_async_context_callback(
index 406c0e34cbf0eccc65d302a11bdcac32502a613f..ed2d020378ca7c1fb747cfd64dd6b788b35d4bfe 100644 (file)
@@ -18,6 +18,7 @@
 #include "journal/ReplayHandler.h"
 #include "librbd/Utils.h"
 #include "librbd/asio/ContextWQ.h"
+#include "librbd/io/Types.h"
 #include "librbd/journal/Types.h"
 #include "librbd/journal/TypeTraits.h"
 
@@ -195,11 +196,13 @@ private:
 
     Event() {
     }
-    Event(const Futures &_futures, uint64_t offset, size_t length,
+    Event(const Futures &_futures, const io::Extents &image_extents,
           int filter_ret_val)
       : futures(_futures), filter_ret_val(filter_ret_val) {
-      if (length > 0) {
-        pending_extents.insert(offset, length);
+      for (auto &extent : image_extents) {
+        if (extent.second > 0) {
+          pending_extents.insert(extent.first, extent.second);
+        }
       }
     }
   };
@@ -319,7 +322,7 @@ private:
 
   uint64_t append_io_events(journal::EventType event_type,
                             const Bufferlists &bufferlists,
-                            uint64_t offset, size_t length, bool flush_entry,
+                            const io::Extents &extents, bool flush_entry,
                             int filter_ret_val);
   Future wait_event(ceph::mutex &lock, uint64_t tid, Context *on_safe);