From 3fc57e529e8e1fddf7100a2c632c4f079640d714 Mon Sep 17 00:00:00 2001 From: Joshua Baergen Date: Thu, 9 Nov 2023 09:43:21 -0700 Subject: [PATCH] librbd: Change append_io_events() to take Extents An upcoming commits will use this to change how multi-extent image requests are appended to the journal. Signed-off-by: Joshua Baergen (cherry picked from commit 9fae091ea22c627cb18cc68055afa7acf634c1b7) --- src/librbd/Journal.cc | 19 ++++++++++--------- src/librbd/Journal.h | 11 +++++++---- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/librbd/Journal.cc b/src/librbd/Journal.cc index 8ddce2e8f7d4f..121701c70d254 100644 --- a/src/librbd/Journal.cc +++ b/src/librbd/Journal.cc @@ -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::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 @@ -832,7 +833,8 @@ uint64_t Journal::append_compare_and_write_event(uint64_t offset, } while (bytes_remaining > 0); return append_io_events(journal::EVENT_TYPE_AIO_COMPARE_AND_WRITE, - bufferlists, offset, length, flush_entry, -EILSEQ); + bufferlists, {{offset, length}}, flush_entry, + -EILSEQ); } template @@ -842,14 +844,14 @@ uint64_t Journal::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 uint64_t Journal::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()); @@ -870,14 +872,13 @@ uint64_t Journal::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( diff --git a/src/librbd/Journal.h b/src/librbd/Journal.h index 1ef9ffa8830fe..e33256bd575d2 100644 --- a/src/librbd/Journal.h +++ b/src/librbd/Journal.h @@ -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" @@ -200,11 +201,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); + } } } }; @@ -324,7 +327,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); -- 2.39.5