]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: pass IOContext to image-extent IO dispatch methods 37222/head
authorJason Dillaman <dillaman@redhat.com>
Fri, 4 Sep 2020 02:21:30 +0000 (22:21 -0400)
committerJason Dillaman <dillaman@redhat.com>
Fri, 18 Sep 2020 03:52:32 +0000 (23:52 -0400)
This allows a specific IOContext to be used regardless of the image's
current read and write snapshot state.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
31 files changed:
src/librbd/api/Io.cc
src/librbd/cache/ImageWriteback.cc
src/librbd/deep_copy/ObjectCopyRequest.cc
src/librbd/exclusive_lock/ImageDispatch.cc
src/librbd/exclusive_lock/ImageDispatch.h
src/librbd/internal.cc
src/librbd/io/CopyupRequest.cc
src/librbd/io/ImageDispatch.cc
src/librbd/io/ImageDispatch.h
src/librbd/io/ImageDispatchInterface.h
src/librbd/io/ImageDispatchSpec.h
src/librbd/io/ImageDispatcher.cc
src/librbd/io/ImageRequest.cc
src/librbd/io/ImageRequest.h
src/librbd/io/QosImageDispatch.cc
src/librbd/io/QosImageDispatch.h
src/librbd/io/QueueImageDispatch.cc
src/librbd/io/QueueImageDispatch.h
src/librbd/io/RefreshImageDispatch.cc
src/librbd/io/RefreshImageDispatch.h
src/librbd/io/Utils.cc
src/librbd/io/WriteBlockImageDispatch.cc
src/librbd/io/WriteBlockImageDispatch.h
src/librbd/journal/Replay.cc
src/librbd/operation/SnapshotCreateRequest.cc
src/test/librbd/deep_copy/test_mock_ObjectCopyRequest.cc
src/test/librbd/io/test_mock_CopyupRequest.cc
src/test/librbd/io/test_mock_ImageRequest.cc
src/test/librbd/journal/test_mock_Replay.cc
src/test/librbd/mock/io/MockImageDispatch.h
src/test/librbd/operation/test_mock_SnapshotCreateRequest.cc

index 139a216ea337bde7bbe0333ab26d7861dbbabcd0..900e607a3496e748675f6b796a114671de619f46 100644 (file)
@@ -232,7 +232,7 @@ void Io<I>::aio_read(I &image_ctx, io::AioCompletion *aio_comp, uint64_t off,
 
   auto req = io::ImageDispatchSpec::create_read(
     image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp, {{off, len}},
-    std::move(read_result), op_flags, trace);
+    std::move(read_result), image_ctx.get_data_io_context(), op_flags, trace);
   req->send();
 }
 
@@ -263,7 +263,7 @@ void Io<I>::aio_write(I &image_ctx, io::AioCompletion *aio_comp, uint64_t off,
 
   auto req = io::ImageDispatchSpec::create_write(
     image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp, {{off, len}},
-    std::move(bl), op_flags, trace);
+    std::move(bl), image_ctx.get_data_io_context(), op_flags, trace);
   req->send();
 }
 
@@ -294,7 +294,7 @@ void Io<I>::aio_discard(I &image_ctx, io::AioCompletion *aio_comp, uint64_t off,
 
   auto req = io::ImageDispatchSpec::create_discard(
     image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp, off, len,
-    discard_granularity_bytes, trace);
+    discard_granularity_bytes, image_ctx.get_data_io_context(), trace);
   req->send();
 }
 
@@ -326,7 +326,7 @@ void Io<I>::aio_write_same(I &image_ctx, io::AioCompletion *aio_comp,
 
   auto req = io::ImageDispatchSpec::create_write_same(
     image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp, off, len,
-    std::move(bl), op_flags, trace);
+    std::move(bl), image_ctx.get_data_io_context(), op_flags, trace);
   req->send();
 }
 
@@ -399,7 +399,7 @@ void Io<I>::aio_write_zeroes(I& image_ctx, io::AioCompletion *aio_comp,
       aio_comp->aio_type = io::AIO_TYPE_WRITE;
       auto req = io::ImageDispatchSpec::create_write(
         image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp, {{off, len}},
-        std::move(bl), op_flags, trace);
+        std::move(bl), image_ctx.get_data_io_context(), op_flags, trace);
       req->send();
       return;
     } else if (prepend_length == 0 && append_length == 0) {
@@ -409,7 +409,7 @@ void Io<I>::aio_write_zeroes(I& image_ctx, io::AioCompletion *aio_comp,
 
       auto req = io::ImageDispatchSpec::create_write_same(
         image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp, off, len,
-        std::move(bl), op_flags, trace);
+        std::move(bl), image_ctx.get_data_io_context(), op_flags, trace);
       req->send();
       return;
     }
@@ -437,7 +437,8 @@ void Io<I>::aio_write_zeroes(I& image_ctx, io::AioCompletion *aio_comp,
         prepend_ctx, &image_ctx, io::AIO_TYPE_WRITE);
       auto prepend_req = io::ImageDispatchSpec::create_write(
         image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, prepend_aio_comp,
-        {{prepend_offset, prepend_length}}, std::move(bl), op_flags, trace);
+        {{prepend_offset, prepend_length}}, std::move(bl),
+        image_ctx.get_data_io_context(), op_flags, trace);
       prepend_req->send();
     }
 
@@ -450,7 +451,8 @@ void Io<I>::aio_write_zeroes(I& image_ctx, io::AioCompletion *aio_comp,
         append_ctx, &image_ctx, io::AIO_TYPE_WRITE);
       auto append_req = io::ImageDispatchSpec::create_write(
         image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, append_aio_comp,
-        {{append_offset, append_length}}, std::move(bl), op_flags, trace);
+        {{append_offset, append_length}}, std::move(bl),
+        image_ctx.get_data_io_context(), op_flags, trace);
       append_req->send();
     }
 
@@ -462,7 +464,8 @@ void Io<I>::aio_write_zeroes(I& image_ctx, io::AioCompletion *aio_comp,
       write_same_ctx, &image_ctx, io::AIO_TYPE_WRITESAME);
     auto req = io::ImageDispatchSpec::create_write_same(
       image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, write_same_aio_comp,
-      write_same_offset, write_same_length, std::move(bl), op_flags, trace);
+      write_same_offset, write_same_length, std::move(bl),
+      image_ctx.get_data_io_context(), op_flags, trace);
     req->send();
     return;
   }
@@ -472,7 +475,7 @@ void Io<I>::aio_write_zeroes(I& image_ctx, io::AioCompletion *aio_comp,
 
   auto req = io::ImageDispatchSpec::create_discard(
     image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp, off, len,
-    discard_granularity_bytes, trace);
+    discard_granularity_bytes, image_ctx.get_data_io_context(), trace);
   req->send();
 }
 
@@ -506,7 +509,8 @@ void Io<I>::aio_compare_and_write(I &image_ctx, io::AioCompletion *aio_comp,
 
   auto req = io::ImageDispatchSpec::create_compare_and_write(
     image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp, {{off, len}},
-    std::move(cmp_bl), std::move(bl), mismatch_off, op_flags, trace);
+    std::move(cmp_bl), std::move(bl), mismatch_off,
+    image_ctx.get_data_io_context(), op_flags, trace);
   req->send();
 }
 
index 9965c0363c64d3914ce996b75d1cf5f7b07dd911..dbc22778b7f6b690c0663459efe2ab60c8b8d73b 100644 (file)
@@ -33,7 +33,9 @@ void ImageWriteback<I>::aio_read(Extents &&image_extents, bufferlist *bl,
   auto aio_comp = io::AioCompletion::create_and_start(
       on_finish, image_ctx, io::AIO_TYPE_READ);
   io::ImageReadRequest<> req(*image_ctx, aio_comp, std::move(image_extents),
-                              io::ReadResult{bl}, fadvise_flags, {});
+                              io::ReadResult{bl},
+                              image_ctx->get_data_io_context(), fadvise_flags,
+                              {});
   req.set_bypass_image_cache();
   req.send();
 }
@@ -50,7 +52,8 @@ void ImageWriteback<I>::aio_write(Extents &&image_extents,
   auto aio_comp = io::AioCompletion::create_and_start(
       on_finish, image_ctx, io::AIO_TYPE_WRITE);
   io::ImageWriteRequest<> req(*image_ctx, aio_comp, std::move(image_extents),
-                               std::move(bl), fadvise_flags, {});
+                               std::move(bl), image_ctx->get_data_io_context(),
+                               fadvise_flags, {});
   req.set_bypass_image_cache();
   req.send();
 }
@@ -68,13 +71,15 @@ void ImageWriteback<I>::aio_discard(uint64_t offset, uint64_t length,
   auto aio_comp = io::AioCompletion::create_and_start(
       on_finish, image_ctx, io::AIO_TYPE_DISCARD);
   io::ImageDiscardRequest<> req(*image_ctx, aio_comp, {{offset, length}},
-                                 discard_granularity_bytes, {});
+                                discard_granularity_bytes,
+                                image_ctx->get_data_io_context(), {});
   req.set_bypass_image_cache();
   req.send();
 }
 
 template <typename I>
-void ImageWriteback<I>::aio_flush(io::FlushSource flush_source, Context *on_finish) {
+void ImageWriteback<I>::aio_flush(io::FlushSource flush_source,
+                                  Context *on_finish) {
   CephContext *cct = m_image_ctx.cct;
   ldout(cct, 20) << "on_finish=" << on_finish << dendl;
 
@@ -101,7 +106,9 @@ void ImageWriteback<I>::aio_writesame(uint64_t offset, uint64_t length,
   auto aio_comp = io::AioCompletion::create_and_start(
       on_finish, image_ctx, io::AIO_TYPE_WRITESAME);
   io::ImageWriteSameRequest<> req(*image_ctx, aio_comp, {{offset, length}},
-                                   std::move(bl), fadvise_flags, {});
+                                  std::move(bl),
+                                  image_ctx->get_data_io_context(),
+                                  fadvise_flags, {});
   req.set_bypass_image_cache();
   req.send();
 }
@@ -121,9 +128,11 @@ void ImageWriteback<I>::aio_compare_and_write(Extents &&image_extents,
   auto aio_comp = io::AioCompletion::create_and_start(
       on_finish, image_ctx, io::AIO_TYPE_COMPARE_AND_WRITE);
   io::ImageCompareAndWriteRequest<> req(*image_ctx, aio_comp,
-                                         std::move(image_extents),
-                                         std::move(cmp_bl), std::move(bl),
-                                         mismatch_offset, fadvise_flags, {});
+                                        std::move(image_extents),
+                                        std::move(cmp_bl), std::move(bl),
+                                        mismatch_offset,
+                                        image_ctx->get_data_io_context(),
+                                        fadvise_flags, {});
   req.set_bypass_image_cache();
   req.send();
 }
index 4e8d23d53fb6af103e1f258e5c7eeef3e7649496..a4a18cd5fe1afdee6d333643a44c51e1d9c958d9 100644 (file)
@@ -266,7 +266,8 @@ void ObjectCopyRequest<I>::send_read_from_parent() {
   auto src_image_ctx = m_src_image_ctx;
   io::ImageRequest<I>::aio_read(src_image_ctx->parent, comp,
                                 std::move(image_extents),
-                                io::ReadResult{&m_read_from_parent_data}, 0,
+                                io::ReadResult{&m_read_from_parent_data},
+                                src_image_ctx->get_data_io_context(), 0,
                                 ZTracer::Trace());
 }
 
index d6eb958e286dffb6dc867424343ce98da66ec1e7..e980efc391bb76080e968657f81890c955c8eb32 100644 (file)
@@ -105,7 +105,7 @@ bool ImageDispatch<I>::set_require_lock(io::Direction direction, bool enabled) {
 template <typename I>
 bool ImageDispatch<I>::read(
     io::AioCompletion* aio_comp, io::Extents &&image_extents,
-    io::ReadResult &&read_result, int op_flags,
+    io::ReadResult &&read_result, IOContext io_context, int op_flags,
     const ZTracer::Trace &parent_trace, uint64_t tid,
     std::atomic<uint32_t>* image_dispatch_flags,
     io::DispatchResult* dispatch_result, Context** on_finish,
@@ -123,8 +123,8 @@ bool ImageDispatch<I>::read(
 template <typename I>
 bool ImageDispatch<I>::write(
     io::AioCompletion* aio_comp, io::Extents &&image_extents, bufferlist &&bl,
-    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-    std::atomic<uint32_t>* image_dispatch_flags,
+    IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
     io::DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -141,8 +141,9 @@ bool ImageDispatch<I>::write(
 template <typename I>
 bool ImageDispatch<I>::discard(
     io::AioCompletion* aio_comp, io::Extents &&image_extents,
-    uint32_t discard_granularity_bytes, const ZTracer::Trace &parent_trace,
-    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
+    uint32_t discard_granularity_bytes, IOContext io_context,
+    const ZTracer::Trace &parent_trace, uint64_t tid,
+    std::atomic<uint32_t>* image_dispatch_flags,
     io::DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -159,8 +160,8 @@ bool ImageDispatch<I>::discard(
 template <typename I>
 bool ImageDispatch<I>::write_same(
     io::AioCompletion* aio_comp, io::Extents &&image_extents, bufferlist &&bl,
-    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-    std::atomic<uint32_t>* image_dispatch_flags,
+    IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
     io::DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -178,8 +179,8 @@ template <typename I>
 bool ImageDispatch<I>::compare_and_write(
     io::AioCompletion* aio_comp, io::Extents &&image_extents,
     bufferlist &&cmp_bl, bufferlist &&bl, uint64_t *mismatch_offset,
-    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-    std::atomic<uint32_t>* image_dispatch_flags,
+    IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
     io::DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
index 7f0353b39e1fd6695f8f9f4c9a6f8b652f37de71..6e65e728db27a39330023333942d1fd588cde196 100644 (file)
@@ -51,35 +51,35 @@ public:
 
   bool read(
       io::AioCompletion* aio_comp, io::Extents &&image_extents,
-      io::ReadResult &&read_result, int op_flags,
+      io::ReadResult &&read_result, IOContext io_context, int op_flags,
       const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       io::DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool write(
       io::AioCompletion* aio_comp, io::Extents &&image_extents, bufferlist &&bl,
-      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-      std::atomic<uint32_t>* image_dispatch_flags,
+      IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
       io::DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool discard(
       io::AioCompletion* aio_comp, io::Extents &&image_extents,
-      uint32_t discard_granularity_bytes,
+      uint32_t discard_granularity_bytes, IOContext io_context,
       const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       io::DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool write_same(
       io::AioCompletion* aio_comp, io::Extents &&image_extents, bufferlist &&bl,
-      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-      std::atomic<uint32_t>* image_dispatch_flags,
+      IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
       io::DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool compare_and_write(
       io::AioCompletion* aio_comp, io::Extents &&image_extents,
       bufferlist &&cmp_bl, bufferlist &&bl, uint64_t *mismatch_offset,
-      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-      std::atomic<uint32_t>* image_dispatch_flags,
+      IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
       io::DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool flush(
index d6b445f10799fd2cc56fbf6dfdc41af2ec1d3d4d..3dcf674fbd76ab38a3ab75de5050fc5c8b90fff9 100644 (file)
@@ -1330,8 +1330,8 @@ int validate_pool(IoCtx &io_ctx, CephContext *cct) {
        ctx, src, io::AIO_TYPE_READ);
 
       io::ImageReadRequest<> req(*src, comp, {{offset, len}},
-                                io::ReadResult{bl}, fadvise_flags,
-                                std::move(trace));
+                                io::ReadResult{bl}, src->get_data_io_context(),
+                                 fadvise_flags, std::move(trace));
       ctx->read_trace = req.get_trace();
 
       req.send();
@@ -1541,7 +1541,9 @@ int validate_pool(IoCtx &io_ctx, CephContext *cct) {
       auto c = io::AioCompletion::create_and_start(&ctx, ictx,
                                                    io::AIO_TYPE_READ);
       io::ImageRequest<>::aio_read(ictx, c, {{off, read_len}},
-                                   io::ReadResult{&bl}, 0, std::move(trace));
+                                   io::ReadResult{&bl},
+                                   ictx->get_data_io_context(), 0,
+                                   std::move(trace));
 
       int ret = ctx.wait();
       if (ret < 0) {
index 537481d925947ba2921d54ae28873de1a24a973c..7ab03928ed11717ef9f561d3874c974833c55c39 100644 (file)
@@ -175,11 +175,13 @@ void CopyupRequest<I>::read_from_parent() {
   if (m_image_ctx->enable_sparse_copyup) {
     ImageRequest<I>::aio_read(
       m_image_ctx->parent, comp, std::move(m_image_extents),
-      ReadResult{&m_copyup_extent_map, &m_copyup_data}, 0, m_trace);
+      ReadResult{&m_copyup_extent_map, &m_copyup_data},
+      m_image_ctx->parent->get_data_io_context(), 0, m_trace);
   } else {
     ImageRequest<I>::aio_read(
       m_image_ctx->parent, comp, std::move(m_image_extents),
-      ReadResult{&m_copyup_data}, 0, m_trace);
+      ReadResult{&m_copyup_data},
+      m_image_ctx->parent->get_data_io_context(), 0, m_trace);
   }
 }
 
index 7c7d85849d9c24fa43211b524adbdeac737e59d2..8ae0c18acbaa27cb5dd3899c5d6889313093aa0b 100644 (file)
@@ -34,8 +34,8 @@ void ImageDispatch<I>::shut_down(Context* on_finish) {
 template <typename I>
 bool ImageDispatch<I>::read(
     AioCompletion* aio_comp, Extents &&image_extents, ReadResult &&read_result,
-    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-    std::atomic<uint32_t>* image_dispatch_flags,
+    IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -46,15 +46,15 @@ bool ImageDispatch<I>::read(
   *dispatch_result = DISPATCH_RESULT_COMPLETE;
   ImageRequest<I>::aio_read(
     m_image_ctx, aio_comp, std::move(image_extents), std::move(read_result),
-    op_flags, parent_trace);
+    io_context, op_flags, parent_trace);
   return true;
 }
 
 template <typename I>
 bool ImageDispatch<I>::write(
     AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-    std::atomic<uint32_t>* image_dispatch_flags,
+    IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -64,16 +64,17 @@ bool ImageDispatch<I>::write(
 
   *dispatch_result = DISPATCH_RESULT_COMPLETE;
   ImageRequest<I>::aio_write(
-    m_image_ctx, aio_comp, std::move(image_extents), std::move(bl), op_flags,
-    parent_trace);
+    m_image_ctx, aio_comp, std::move(image_extents), std::move(bl),
+    io_context, op_flags, parent_trace);
   return true;
 }
 
 template <typename I>
 bool ImageDispatch<I>::discard(
     AioCompletion* aio_comp, Extents &&image_extents,
-    uint32_t discard_granularity_bytes, const ZTracer::Trace &parent_trace,
-    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
+    uint32_t discard_granularity_bytes, IOContext io_context,
+    const ZTracer::Trace &parent_trace, uint64_t tid,
+    std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -84,15 +85,15 @@ bool ImageDispatch<I>::discard(
   *dispatch_result = DISPATCH_RESULT_COMPLETE;
   ImageRequest<I>::aio_discard(
     m_image_ctx, aio_comp, std::move(image_extents), discard_granularity_bytes,
-    parent_trace);
+    io_context, parent_trace);
   return true;
 }
 
 template <typename I>
 bool ImageDispatch<I>::write_same(
     AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-    std::atomic<uint32_t>* image_dispatch_flags,
+    IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -102,16 +103,16 @@ bool ImageDispatch<I>::write_same(
 
   *dispatch_result = DISPATCH_RESULT_COMPLETE;
   ImageRequest<I>::aio_writesame(
-    m_image_ctx, aio_comp, std::move(image_extents), std::move(bl), op_flags,
-    parent_trace);
+    m_image_ctx, aio_comp, std::move(image_extents), std::move(bl),
+    io_context, op_flags, parent_trace);
   return true;
 }
 
 template <typename I>
 bool ImageDispatch<I>::compare_and_write(
     AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&cmp_bl,
-    bufferlist &&bl, uint64_t *mismatch_offset, int op_flags,
-    const ZTracer::Trace &parent_trace, uint64_t tid,
+    bufferlist &&bl, uint64_t *mismatch_offset, IOContext io_context,
+    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
     std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
@@ -123,7 +124,7 @@ bool ImageDispatch<I>::compare_and_write(
   *dispatch_result = DISPATCH_RESULT_COMPLETE;
   ImageRequest<I>::aio_compare_and_write(
     m_image_ctx, aio_comp, std::move(image_extents), std::move(cmp_bl),
-    std::move(bl), mismatch_offset, op_flags, parent_trace);
+    std::move(bl), mismatch_offset, io_context, op_flags, parent_trace);
   return true;
 }
 
index 5ace3ec79e594fd8d113990c79d30f724e7df525..17e9724ae2e7c4561a9b5ff9f203f4e09bd2e352 100644 (file)
@@ -35,34 +35,34 @@ public:
 
   bool read(
       AioCompletion* aio_comp, Extents &&image_extents,
-      ReadResult &&read_result, int op_flags,
+      ReadResult &&read_result, IOContext io_context, int op_flags,
       const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool write(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-      std::atomic<uint32_t>* image_dispatch_flags,
+      IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool discard(
       AioCompletion* aio_comp, Extents &&image_extents,
-      uint32_t discard_granularity_bytes,
+      uint32_t discard_granularity_bytes, IOContext io_context,
       const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool write_same(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-      std::atomic<uint32_t>* image_dispatch_flags,
+      IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool compare_and_write(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&cmp_bl,
-      bufferlist &&bl, uint64_t *mismatch_offset, int op_flags,
-      const ZTracer::Trace &parent_trace, uint64_t tid,
+      bufferlist &&bl, uint64_t *mismatch_offset, IOContext io_context,
+      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
index bf44ee8ad63187823934486142a9557bd980bd95..0a1bc58a3510cc07a1afb688cbed73edfbc95646 100644 (file)
@@ -7,6 +7,7 @@
 #include "include/int_types.h"
 #include "include/buffer.h"
 #include "common/zipkin_trace.h"
+#include "librbd/Types.h"
 #include "librbd/io/ReadResult.h"
 #include "librbd/io/Types.h"
 #include <atomic>
@@ -32,34 +33,34 @@ struct ImageDispatchInterface {
 
   virtual bool read(
       AioCompletion* aio_comp, Extents &&image_extents,
-      ReadResult &&read_result, int op_flags,
+      ReadResult &&read_result, IOContext io_context, int op_flags,
       const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) = 0;
   virtual bool write(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-      std::atomic<uint32_t>* image_dispatch_flags,
+      IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) = 0;
   virtual bool discard(
       AioCompletion* aio_comp, Extents &&image_extents,
       uint32_t discard_granularity_bytes,
-      const ZTracer::Trace &parent_trace, uint64_t tid,
+      IOContext io_context, const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) = 0;
   virtual bool write_same(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-      std::atomic<uint32_t>* image_dispatch_flags,
+      IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) = 0;
   virtual bool compare_and_write(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&cmp_bl,
-      bufferlist &&bl, uint64_t *mismatch_offset, int op_flags,
-      const ZTracer::Trace &parent_trace, uint64_t tid,
+      bufferlist &&bl, uint64_t *mismatch_offset, IOContext io_context,
+      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) = 0;
index da1bd2b6ebf2532a431cba875296a47b78ccd03a..5ea0af33934e38e1702b7166b07236e0a6ac0d44 100644 (file)
@@ -102,6 +102,7 @@ public:
   AioCompletion* aio_comp;
   Extents image_extents;
   Request request;
+  IOContext io_context;
   int op_flags;
   ZTracer::Trace parent_trace;
   uint64_t tid = 0;
@@ -110,46 +111,49 @@ public:
   static ImageDispatchSpec* create_read(
       ImageCtxT &image_ctx, ImageDispatchLayer image_dispatch_layer,
       AioCompletion *aio_comp, Extents &&image_extents,
-      ReadResult &&read_result, int op_flags,
+      ReadResult &&read_result, IOContext io_context, int op_flags,
       const ZTracer::Trace &parent_trace) {
     return new ImageDispatchSpec(image_ctx.io_image_dispatcher,
                                  image_dispatch_layer, aio_comp,
                                  std::move(image_extents),
                                  Read{std::move(read_result)},
-                                 op_flags, parent_trace);
+                                 io_context, op_flags, parent_trace);
   }
 
   template <typename ImageCtxT = ImageCtx>
   static ImageDispatchSpec* create_discard(
       ImageCtxT &image_ctx, ImageDispatchLayer image_dispatch_layer,
       AioCompletion *aio_comp, uint64_t off, uint64_t len,
-      uint32_t discard_granularity_bytes, const ZTracer::Trace &parent_trace) {
+      uint32_t discard_granularity_bytes, IOContext io_context,
+      const ZTracer::Trace &parent_trace) {
     return new ImageDispatchSpec(image_ctx.io_image_dispatcher,
                                  image_dispatch_layer, aio_comp, {{off, len}},
                                  Discard{discard_granularity_bytes},
-                                 0, parent_trace);
+                                 io_context, 0, parent_trace);
   }
 
   template <typename ImageCtxT = ImageCtx>
   static ImageDispatchSpec* create_write(
       ImageCtxT &image_ctx, ImageDispatchLayer image_dispatch_layer,
       AioCompletion *aio_comp, Extents &&image_extents,
-      bufferlist &&bl, int op_flags, const ZTracer::Trace &parent_trace) {
+      bufferlist &&bl, IOContext io_context, int op_flags,
+      const ZTracer::Trace &parent_trace) {
     return new ImageDispatchSpec(image_ctx.io_image_dispatcher,
                                  image_dispatch_layer, aio_comp,
                                  std::move(image_extents), Write{std::move(bl)},
-                                 op_flags, parent_trace);
+                                 io_context, op_flags, parent_trace);
   }
 
   template <typename ImageCtxT = ImageCtx>
   static ImageDispatchSpec* create_write_same(
       ImageCtxT &image_ctx, ImageDispatchLayer image_dispatch_layer,
       AioCompletion *aio_comp, uint64_t off, uint64_t len,
-      bufferlist &&bl, int op_flags, const ZTracer::Trace &parent_trace) {
+      bufferlist &&bl, IOContext io_context, int op_flags,
+      const ZTracer::Trace &parent_trace) {
     return new ImageDispatchSpec(image_ctx.io_image_dispatcher,
                                  image_dispatch_layer, aio_comp,
                                  {{off, len}}, WriteSame{std::move(bl)},
-                                 op_flags, parent_trace);
+                                 io_context, op_flags, parent_trace);
   }
 
   template <typename ImageCtxT = ImageCtx>
@@ -157,14 +161,14 @@ public:
       ImageCtxT &image_ctx, ImageDispatchLayer image_dispatch_layer,
       AioCompletion *aio_comp, Extents &&image_extents,
       bufferlist &&cmp_bl, bufferlist &&bl, uint64_t *mismatch_offset,
-      int op_flags, const ZTracer::Trace &parent_trace) {
+      IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace) {
     return new ImageDispatchSpec(image_ctx.io_image_dispatcher,
                                  image_dispatch_layer, aio_comp,
                                  std::move(image_extents),
                                  CompareAndWrite{std::move(cmp_bl),
                                                  std::move(bl),
                                                  mismatch_offset},
-                                 op_flags, parent_trace);
+                                 io_context, op_flags, parent_trace);
   }
 
   template <typename ImageCtxT = ImageCtx>
@@ -174,7 +178,7 @@ public:
       const ZTracer::Trace &parent_trace) {
     return new ImageDispatchSpec(image_ctx.io_image_dispatcher,
                                  image_dispatch_layer, aio_comp, {},
-                                 Flush{flush_source}, 0, parent_trace);
+                                 Flush{flush_source}, {}, 0, parent_trace);
   }
 
   ~ImageDispatchSpec() {
@@ -192,12 +196,12 @@ private:
   ImageDispatchSpec(ImageDispatcherInterface* image_dispatcher,
                     ImageDispatchLayer image_dispatch_layer,
                     AioCompletion* aio_comp, Extents&& image_extents,
-                    Request&& request, int op_flags,
+                    Request&& request, IOContext io_context, int op_flags,
                     const ZTracer::Trace& parent_trace)
     : dispatcher_ctx(this), image_dispatcher(image_dispatcher),
       dispatch_layer(image_dispatch_layer), aio_comp(aio_comp),
       image_extents(std::move(image_extents)), request(std::move(request)),
-      op_flags(op_flags), parent_trace(parent_trace) {
+      io_context(io_context), op_flags(op_flags), parent_trace(parent_trace) {
     aio_comp->image_dispatcher_ctx = &dispatcher_ctx;
     aio_comp->get();
   }
index 03b30a04bf20573ae0dbeaacac48dc66aafd78af..3c155a2454eeeef3576e2f74fd63a1afd57d4700 100644 (file)
@@ -40,8 +40,9 @@ struct ImageDispatcher<I>::SendVisitor : public boost::static_visitor<bool> {
     return image_dispatch->read(
       image_dispatch_spec->aio_comp,
       std::move(image_dispatch_spec->image_extents),
-      std::move(read.read_result), image_dispatch_spec->op_flags,
-      image_dispatch_spec->parent_trace, image_dispatch_spec->tid,
+      std::move(read.read_result), image_dispatch_spec->io_context,
+      image_dispatch_spec->op_flags, image_dispatch_spec->parent_trace,
+      image_dispatch_spec->tid,
       &image_dispatch_spec->image_dispatch_flags,
       &image_dispatch_spec->dispatch_result,
       &image_dispatch_spec->aio_comp->image_dispatcher_ctx,
@@ -52,7 +53,7 @@ struct ImageDispatcher<I>::SendVisitor : public boost::static_visitor<bool> {
     return image_dispatch->discard(
       image_dispatch_spec->aio_comp,
       std::move(image_dispatch_spec->image_extents),
-      discard.discard_granularity_bytes,
+      discard.discard_granularity_bytes, image_dispatch_spec->io_context,
       image_dispatch_spec->parent_trace, image_dispatch_spec->tid,
       &image_dispatch_spec->image_dispatch_flags,
       &image_dispatch_spec->dispatch_result,
@@ -64,8 +65,9 @@ struct ImageDispatcher<I>::SendVisitor : public boost::static_visitor<bool> {
     return image_dispatch->write(
       image_dispatch_spec->aio_comp,
       std::move(image_dispatch_spec->image_extents), std::move(write.bl),
-      image_dispatch_spec->op_flags, image_dispatch_spec->parent_trace,
-      image_dispatch_spec->tid, &image_dispatch_spec->image_dispatch_flags,
+      image_dispatch_spec->io_context, image_dispatch_spec->op_flags,
+      image_dispatch_spec->parent_trace, image_dispatch_spec->tid,
+      &image_dispatch_spec->image_dispatch_flags,
       &image_dispatch_spec->dispatch_result,
       &image_dispatch_spec->aio_comp->image_dispatcher_ctx,
       &image_dispatch_spec->dispatcher_ctx);
@@ -75,8 +77,9 @@ struct ImageDispatcher<I>::SendVisitor : public boost::static_visitor<bool> {
     return image_dispatch->write_same(
       image_dispatch_spec->aio_comp,
       std::move(image_dispatch_spec->image_extents), std::move(write_same.bl),
-      image_dispatch_spec->op_flags, image_dispatch_spec->parent_trace,
-      image_dispatch_spec->tid, &image_dispatch_spec->image_dispatch_flags,
+      image_dispatch_spec->io_context, image_dispatch_spec->op_flags,
+      image_dispatch_spec->parent_trace, image_dispatch_spec->tid,
+      &image_dispatch_spec->image_dispatch_flags,
       &image_dispatch_spec->dispatch_result,
       &image_dispatch_spec->aio_comp->image_dispatcher_ctx,
       &image_dispatch_spec->dispatcher_ctx);
@@ -88,9 +91,9 @@ struct ImageDispatcher<I>::SendVisitor : public boost::static_visitor<bool> {
       image_dispatch_spec->aio_comp,
       std::move(image_dispatch_spec->image_extents),
       std::move(compare_and_write.cmp_bl), std::move(compare_and_write.bl),
-      compare_and_write.mismatch_offset, image_dispatch_spec->op_flags,
-      image_dispatch_spec->parent_trace, image_dispatch_spec->tid,
-      &image_dispatch_spec->image_dispatch_flags,
+      compare_and_write.mismatch_offset, image_dispatch_spec->io_context,
+      image_dispatch_spec->op_flags, image_dispatch_spec->parent_trace,
+      image_dispatch_spec->tid, &image_dispatch_spec->image_dispatch_flags,
       &image_dispatch_spec->dispatch_result,
       &image_dispatch_spec->aio_comp->image_dispatcher_ctx,
       &image_dispatch_spec->dispatcher_ctx);
index 63a559c65658962422473544704fa70474a8c75b..6f444b3c73bdaf8e94ee2264e7048dd478d3109a 100644 (file)
@@ -58,7 +58,7 @@ struct C_RBD_Readahead : public Context {
 };
 
 template <typename I>
-void readahead(I *ictx, const Extents& image_extents) {
+void readahead(I *ictx, const Extents& image_extents, IOContext io_context) {
   uint64_t total_bytes = 0;
   for (auto& image_extent : image_extents) {
     total_bytes += image_extent.second;
@@ -77,8 +77,6 @@ void readahead(I *ictx, const Extents& image_extents) {
   uint64_t image_size = ictx->get_image_size(ictx->snap_id);
   ictx->image_lock.unlock_shared();
 
-  auto io_context = ictx->get_data_io_context();
-
   auto readahead_extent = ictx->readahead.update(image_extents, image_size);
   uint64_t readahead_offset = readahead_extent.first;
   uint64_t readahead_length = readahead_extent.second;
@@ -161,20 +159,22 @@ bool should_update_timestamp(const utime_t& now, const utime_t& timestamp,
 template <typename I>
 void ImageRequest<I>::aio_read(I *ictx, AioCompletion *c,
                                Extents &&image_extents,
-                               ReadResult &&read_result, int op_flags,
+                               ReadResult &&read_result, IOContext io_context,
+                               int op_flags,
                               const ZTracer::Trace &parent_trace) {
   ImageReadRequest<I> req(*ictx, c, std::move(image_extents),
-                          std::move(read_result), op_flags, parent_trace);
+                          std::move(read_result), io_context, op_flags,
+                          parent_trace);
   req.send();
 }
 
 template <typename I>
 void ImageRequest<I>::aio_write(I *ictx, AioCompletion *c,
                                 Extents &&image_extents, bufferlist &&bl,
-                                int op_flags,
+                                IOContext io_context, int op_flags,
                                const ZTracer::Trace &parent_trace) {
   ImageWriteRequest<I> req(*ictx, c, std::move(image_extents), std::move(bl),
-                           op_flags, parent_trace);
+                           io_context, op_flags, parent_trace);
   req.send();
 }
 
@@ -182,9 +182,11 @@ template <typename I>
 void ImageRequest<I>::aio_discard(I *ictx, AioCompletion *c,
                                   Extents &&image_extents,
                                   uint32_t discard_granularity_bytes,
-                                 const ZTracer::Trace &parent_trace) {
+                                 IOContext io_context,
+                                  const ZTracer::Trace &parent_trace) {
   ImageDiscardRequest<I> req(*ictx, c, std::move(image_extents),
-                             discard_granularity_bytes, parent_trace);
+                             discard_granularity_bytes, io_context,
+                             parent_trace);
   req.send();
 }
 
@@ -199,10 +201,12 @@ void ImageRequest<I>::aio_flush(I *ictx, AioCompletion *c,
 template <typename I>
 void ImageRequest<I>::aio_writesame(I *ictx, AioCompletion *c,
                                     Extents &&image_extents,
-                                    bufferlist &&bl, int op_flags,
+                                    bufferlist &&bl, IOContext io_context,
+                                    int op_flags,
                                    const ZTracer::Trace &parent_trace) {
   ImageWriteSameRequest<I> req(*ictx, c, std::move(image_extents),
-                               std::move(bl), op_flags, parent_trace);
+                               std::move(bl), io_context, op_flags,
+                               parent_trace);
   req.send();
 }
 
@@ -212,11 +216,12 @@ void ImageRequest<I>::aio_compare_and_write(I *ictx, AioCompletion *c,
                                             bufferlist &&cmp_bl,
                                             bufferlist &&bl,
                                             uint64_t *mismatch_offset,
-                                            int op_flags,
+                                            IOContext io_context, int op_flags,
                                             const ZTracer::Trace &parent_trace) {
   ImageCompareAndWriteRequest<I> req(*ictx, c, std::move(image_extents),
                                      std::move(cmp_bl), std::move(bl),
-                                     mismatch_offset, op_flags, parent_trace);
+                                     mismatch_offset, io_context, op_flags,
+                                     parent_trace);
   req.send();
 }
 
@@ -328,10 +333,11 @@ void ImageRequest<I>::update_timestamp() {
 template <typename I>
 ImageReadRequest<I>::ImageReadRequest(I &image_ctx, AioCompletion *aio_comp,
                                       Extents &&image_extents,
-                                      ReadResult &&read_result, int op_flags,
+                                      ReadResult &&read_result,
+                                      IOContext io_context, int op_flags,
                                      const ZTracer::Trace &parent_trace)
-  : ImageRequest<I>(image_ctx, aio_comp, std::move(image_extents), "read",
-                   parent_trace),
+  : ImageRequest<I>(image_ctx, aio_comp, std::move(image_extents),
+                    io_context, "read", parent_trace),
     m_op_flags(op_flags) {
   aio_comp->read_result = std::move(read_result);
 }
@@ -371,7 +377,7 @@ void ImageReadRequest<I>::send_request() {
   auto &image_extents = this->m_image_extents;
   if (image_ctx.cache && image_ctx.readahead_max_bytes > 0 &&
       !(m_op_flags & LIBRADOS_OP_FLAG_FADVISE_RANDOM)) {
-    readahead(get_image_ctx(&image_ctx), image_extents);
+    readahead(get_image_ctx(&image_ctx), image_extents, this->m_io_context);
   }
 
   // map image extents to object extents
@@ -387,8 +393,6 @@ void ImageReadRequest<I>::send_request() {
     buffer_ofs += extent.second;
   }
 
-  auto io_context = image_ctx.get_data_io_context();
-
   // issue the requests
   AioCompletion *aio_comp = this->m_aio_comp;
   aio_comp->set_request_count(object_extents.size());
@@ -401,7 +405,7 @@ void ImageReadRequest<I>::send_request() {
       aio_comp, oe.offset, oe.length, std::move(oe.buffer_extents));
     auto req = ObjectDispatchSpec::create_read(
       &image_ctx, OBJECT_DISPATCH_LAYER_NONE, oe.object_no,
-      {{oe.offset, oe.length}}, io_context, m_op_flags, this->m_trace,
+      {{oe.offset, oe.length}}, this->m_io_context, m_op_flags, this->m_trace,
       &req_comp->bl, &req_comp->extent_map, nullptr, req_comp);
     req->send();
   }
@@ -430,7 +434,8 @@ bool AbstractImageWriteRequest<I>::finish_request_early() {
   AioCompletion *aio_comp = this->m_aio_comp;
   {
     std::shared_lock image_locker{this->m_image_ctx.image_lock};
-    if (this->m_image_ctx.snap_id != CEPH_NOSNAP || this->m_image_ctx.read_only) {
+    if (this->m_image_ctx.snap_id != CEPH_NOSNAP ||
+        this->m_image_ctx.read_only) {
       aio_comp->fail(-EROFS);
       return true;
     }
@@ -450,7 +455,6 @@ void AbstractImageWriteRequest<I>::send_request() {
 
   bool journaling = false;
 
-  auto io_context = image_ctx.get_data_io_context();
   AioCompletion *aio_comp = this->m_aio_comp;
   {
     // prevent image size from changing between computing clip and recording
@@ -488,7 +492,7 @@ void AbstractImageWriteRequest<I>::send_request() {
       journal_tid = append_journal_event(m_synchronous);
     }
 
-    send_object_requests(object_extents, io_context, journal_tid);
+    send_object_requests(object_extents, this->m_io_context, journal_tid);
   }
 
   update_stats(clip_len);
index b6460de6568f55ed0bd12f9f73bfceb4d0436082..67c5af2b29ba75f5725653efbbc6043049541f05 100644 (file)
@@ -35,25 +35,31 @@ public:
 
   static void aio_read(ImageCtxT *ictx, AioCompletion *c,
                        Extents &&image_extents, ReadResult &&read_result,
-                       int op_flags, const ZTracer::Trace &parent_trace);
+                       IOContext io_context, int op_flags,
+                       const ZTracer::Trace &parent_trace);
   static void aio_write(ImageCtxT *ictx, AioCompletion *c,
-                        Extents &&image_extents, bufferlist &&bl, int op_flags,
+                        Extents &&image_extents, bufferlist &&bl,
+                        IOContext io_context, int op_flags,
                        const ZTracer::Trace &parent_trace);
   static void aio_discard(ImageCtxT *ictx, AioCompletion *c,
                           Extents &&image_extents,
                           uint32_t discard_granularity_bytes,
+                          IOContext io_context,
                           const ZTracer::Trace &parent_trace);
   static void aio_flush(ImageCtxT *ictx, AioCompletion *c,
                         FlushSource flush_source,
                         const ZTracer::Trace &parent_trace);
   static void aio_writesame(ImageCtxT *ictx, AioCompletion *c,
                             Extents &&image_extents, bufferlist &&bl,
-                            int op_flags, const ZTracer::Trace &parent_trace);
+                            IOContext io_context, int op_flags,
+                            const ZTracer::Trace &parent_trace);
 
   static void aio_compare_and_write(ImageCtxT *ictx, AioCompletion *c,
-                                    Extents &&image_extents, bufferlist &&cmp_bl,
+                                    Extents &&image_extents,
+                                    bufferlist &&cmp_bl,
                                     bufferlist &&bl, uint64_t *mismatch_offset,
-                                    int op_flags, const ZTracer::Trace &parent_trace);
+                                    IOContext io_context, int op_flags,
+                                    const ZTracer::Trace &parent_trace);
 
   void send();
 
@@ -71,14 +77,16 @@ protected:
   ImageCtxT &m_image_ctx;
   AioCompletion *m_aio_comp;
   Extents m_image_extents;
+  IOContext m_io_context;
   ZTracer::Trace m_trace;
   bool m_bypass_image_cache = false;
 
   ImageRequest(ImageCtxT &image_ctx, AioCompletion *aio_comp,
-               Extents &&image_extents, const char *trace_name,
+               Extents &&image_extents, IOContext io_context,
+               const char *trace_name,
               const ZTracer::Trace &parent_trace)
     : m_image_ctx(image_ctx), m_aio_comp(aio_comp),
-      m_image_extents(std::move(image_extents)),
+      m_image_extents(std::move(image_extents)), m_io_context(io_context),
       m_trace(librbd::util::create_trace(image_ctx, trace_name, parent_trace)) {
     m_trace.event("start");
   }
@@ -104,7 +112,8 @@ public:
 
   ImageReadRequest(ImageCtxT &image_ctx, AioCompletion *aio_comp,
                    Extents &&image_extents, ReadResult &&read_result,
-                   int op_flags, const ZTracer::Trace &parent_trace);
+                   IOContext io_context, int op_flags,
+                   const ZTracer::Trace &parent_trace);
 
 protected:
   int clip_request() override;
@@ -135,10 +144,11 @@ protected:
   using typename ImageRequest<ImageCtxT>::Extents;
 
   AbstractImageWriteRequest(ImageCtxT &image_ctx, AioCompletion *aio_comp,
-                            Extents &&image_extents, const char *trace_name,
+                            Extents &&image_extents, IOContext io_context,
+                            const char *trace_name,
                            const ZTracer::Trace &parent_trace)
     : ImageRequest<ImageCtxT>(image_ctx, aio_comp, std::move(image_extents),
-                             trace_name, parent_trace),
+                             io_context, trace_name, parent_trace),
       m_synchronous(false) {
   }
 
@@ -169,10 +179,12 @@ public:
   using typename ImageRequest<ImageCtxT>::Extents;
 
   ImageWriteRequest(ImageCtxT &image_ctx, AioCompletion *aio_comp,
-                    Extents &&image_extents, bufferlist &&bl, int op_flags,
+                    Extents &&image_extents, bufferlist &&bl,
+                    IOContext io_context, int op_flags,
                    const ZTracer::Trace &parent_trace)
     : AbstractImageWriteRequest<ImageCtxT>(
-       image_ctx, aio_comp, std::move(image_extents), "write", parent_trace),
+       image_ctx, aio_comp, std::move(image_extents), io_context, "write",
+        parent_trace),
       m_bl(std::move(bl)), m_op_flags(op_flags) {
   }
 
@@ -209,10 +221,11 @@ class ImageDiscardRequest : public AbstractImageWriteRequest<ImageCtxT> {
 public:
   ImageDiscardRequest(ImageCtxT &image_ctx, AioCompletion *aio_comp,
                       Extents&& image_extents,
-                     uint32_t discard_granularity_bytes,
+                     uint32_t discard_granularity_bytes, IOContext io_context,
                       const ZTracer::Trace &parent_trace)
     : AbstractImageWriteRequest<ImageCtxT>(
-       image_ctx, aio_comp, std::move(image_extents), "discard", parent_trace),
+       image_ctx, aio_comp, std::move(image_extents), io_context, "discard",
+        parent_trace),
       m_discard_granularity_bytes(discard_granularity_bytes) {
   }
 
@@ -248,7 +261,8 @@ public:
   ImageFlushRequest(ImageCtxT &image_ctx, AioCompletion *aio_comp,
                     FlushSource flush_source,
                     const ZTracer::Trace &parent_trace)
-    : ImageRequest<ImageCtxT>(image_ctx, aio_comp, {}, "flush", parent_trace),
+    : ImageRequest<ImageCtxT>(image_ctx, aio_comp, {}, {}, "flush",
+                              parent_trace),
       m_flush_source(flush_source) {
   }
 
@@ -280,9 +294,10 @@ class ImageWriteSameRequest : public AbstractImageWriteRequest<ImageCtxT> {
 public:
   ImageWriteSameRequest(ImageCtxT &image_ctx, AioCompletion *aio_comp,
                         Extents&& image_extents, bufferlist &&bl,
-                        int op_flags, const ZTracer::Trace &parent_trace)
+                        IOContext io_context, int op_flags,
+                        const ZTracer::Trace &parent_trace)
     : AbstractImageWriteRequest<ImageCtxT>(
-       image_ctx, aio_comp, std::move(image_extents), "writesame",
+       image_ctx, aio_comp, std::move(image_extents), io_context, "writesame",
         parent_trace),
       m_data_bl(std::move(bl)), m_op_flags(op_flags) {
   }
@@ -318,9 +333,11 @@ public:
   ImageCompareAndWriteRequest(ImageCtxT &image_ctx, AioCompletion *aio_comp,
                               Extents &&image_extents, bufferlist &&cmp_bl,
                               bufferlist &&bl, uint64_t *mismatch_offset,
-                              int op_flags, const ZTracer::Trace &parent_trace)
+                              IOContext io_context, int op_flags,
+                               const ZTracer::Trace &parent_trace)
       : AbstractImageWriteRequest<ImageCtxT>(
-          image_ctx, aio_comp, std::move(image_extents), "compare_and_write", parent_trace),
+          image_ctx, aio_comp, std::move(image_extents), io_context,
+          "compare_and_write", parent_trace),
         m_cmp_bl(std::move(cmp_bl)), m_bl(std::move(bl)),
         m_mismatch_offset(mismatch_offset), m_op_flags(op_flags) {
   }
index 66da8d440e45bfc30c40c9b459c9531bc924b0fe..0901f80e668f7241f36c0e350eee9f36ebd794b3 100644 (file)
@@ -116,8 +116,8 @@ void QosImageDispatch<I>::apply_qos_limit(uint64_t flag, uint64_t limit,
 template <typename I>
 bool QosImageDispatch<I>::read(
     AioCompletion* aio_comp, Extents &&image_extents, ReadResult &&read_result,
-    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-    std::atomic<uint32_t>* image_dispatch_flags,
+    IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -135,8 +135,8 @@ bool QosImageDispatch<I>::read(
 template <typename I>
 bool QosImageDispatch<I>::write(
     AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-    std::atomic<uint32_t>* image_dispatch_flags,
+    IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -154,8 +154,9 @@ bool QosImageDispatch<I>::write(
 template <typename I>
 bool QosImageDispatch<I>::discard(
     AioCompletion* aio_comp, Extents &&image_extents,
-    uint32_t discard_granularity_bytes, const ZTracer::Trace &parent_trace,
-    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
+    uint32_t discard_granularity_bytes, IOContext io_context,
+    const ZTracer::Trace &parent_trace, uint64_t tid,
+    std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -173,8 +174,8 @@ bool QosImageDispatch<I>::discard(
 template <typename I>
 bool QosImageDispatch<I>::write_same(
     AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-    std::atomic<uint32_t>* image_dispatch_flags,
+    IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -192,8 +193,8 @@ bool QosImageDispatch<I>::write_same(
 template <typename I>
 bool QosImageDispatch<I>::compare_and_write(
     AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&cmp_bl,
-    bufferlist &&bl, uint64_t *mismatch_offset, int op_flags,
-    const ZTracer::Trace &parent_trace, uint64_t tid,
+    bufferlist &&bl, uint64_t *mismatch_offset, IOContext io_context,
+    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
     std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
index 386cf0b4eef7a2acb430a1f1f0361c47e3bd9af0..77c1aae1f892ab0c65b6ac26c4458f27a950799c 100644 (file)
@@ -52,34 +52,34 @@ public:
 
   bool read(
       AioCompletion* aio_comp, Extents &&image_extents,
-      ReadResult &&read_result, int op_flags,
+      ReadResult &&read_result, IOContext io_context, int op_flags,
       const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool write(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-      std::atomic<uint32_t>* image_dispatch_flags,
+      IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool discard(
       AioCompletion* aio_comp, Extents &&image_extents,
-      uint32_t discard_granularity_bytes,
+      uint32_t discard_granularity_bytes, IOContext io_context,
       const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool write_same(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-      std::atomic<uint32_t>* image_dispatch_flags,
+      IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool compare_and_write(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&cmp_bl,
-      bufferlist &&bl, uint64_t *mismatch_offset, int op_flags,
-      const ZTracer::Trace &parent_trace, uint64_t tid,
+      bufferlist &&bl, uint64_t *mismatch_offset, IOContext io_context,
+      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
index f59d484d5c46f2d5efc69b619a34896766792ca0..d2f1ec3e9bd859c89e55023a64675ecf400ba1c6 100644 (file)
@@ -40,8 +40,8 @@ void QueueImageDispatch<I>::shut_down(Context* on_finish) {
 template <typename I>
 bool QueueImageDispatch<I>::read(
     AioCompletion* aio_comp, Extents &&image_extents, ReadResult &&read_result,
-    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-    std::atomic<uint32_t>* image_dispatch_flags,
+    IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -53,8 +53,8 @@ bool QueueImageDispatch<I>::read(
 template <typename I>
 bool QueueImageDispatch<I>::write(
     AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-    std::atomic<uint32_t>* image_dispatch_flags,
+    IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -66,7 +66,8 @@ bool QueueImageDispatch<I>::write(
 template <typename I>
 bool QueueImageDispatch<I>::discard(
     AioCompletion* aio_comp, Extents &&image_extents,
-    uint32_t discard_granularity_bytes, const ZTracer::Trace &parent_trace,
+    uint32_t discard_granularity_bytes, IOContext io_context,
+    const ZTracer::Trace &parent_trace,
     uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
@@ -79,8 +80,8 @@ bool QueueImageDispatch<I>::discard(
 template <typename I>
 bool QueueImageDispatch<I>::write_same(
     AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-    std::atomic<uint32_t>* image_dispatch_flags,
+    IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -92,8 +93,8 @@ bool QueueImageDispatch<I>::write_same(
 template <typename I>
 bool QueueImageDispatch<I>::compare_and_write(
     AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&cmp_bl,
-    bufferlist &&bl, uint64_t *mismatch_offset, int op_flags,
-    const ZTracer::Trace &parent_trace, uint64_t tid,
+    bufferlist &&bl, uint64_t *mismatch_offset, IOContext io_context,
+    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
     std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
index c1d0ac4c6156091994b4959e89cc412d098c4084..d4d5ee0eed18a9add5c0aa1abbb682e2f89501ea 100644 (file)
@@ -39,34 +39,34 @@ public:
 
   bool read(
       AioCompletion* aio_comp, Extents &&image_extents,
-      ReadResult &&read_result, int op_flags,
+      ReadResult &&read_result, IOContext io_context, int op_flags,
       const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool write(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-      std::atomic<uint32_t>* image_dispatch_flags,
+      IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool discard(
       AioCompletion* aio_comp, Extents &&image_extents,
-      uint32_t discard_granularity_bytes,
+      uint32_t discard_granularity_bytes, IOContext io_context,
       const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool write_same(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-      std::atomic<uint32_t>* image_dispatch_flags,
+      IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool compare_and_write(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&cmp_bl,
-      bufferlist &&bl, uint64_t *mismatch_offset, int op_flags,
-      const ZTracer::Trace &parent_trace, uint64_t tid,
+      bufferlist &&bl, uint64_t *mismatch_offset, IOContext io_context,
+      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
index 9ba3bda03ba19666c475d6904666dbb4d4f6c9a5..9017804209a5d7007ca64f0f81c22fd1f3a08dd1 100644 (file)
@@ -30,8 +30,8 @@ void RefreshImageDispatch<I>::shut_down(Context* on_finish) {
 template <typename I>
 bool RefreshImageDispatch<I>::read(
     AioCompletion* aio_comp, Extents &&image_extents, ReadResult &&read_result,
-    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-    std::atomic<uint32_t>* image_dispatch_flags,
+    IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -48,8 +48,8 @@ bool RefreshImageDispatch<I>::read(
 template <typename I>
 bool RefreshImageDispatch<I>::write(
     AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-    std::atomic<uint32_t>* image_dispatch_flags,
+    IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -66,8 +66,9 @@ bool RefreshImageDispatch<I>::write(
 template <typename I>
 bool RefreshImageDispatch<I>::discard(
     AioCompletion* aio_comp, Extents &&image_extents,
-    uint32_t discard_granularity_bytes, const ZTracer::Trace &parent_trace,
-    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
+    uint32_t discard_granularity_bytes, IOContext io_context,
+    const ZTracer::Trace &parent_trace, uint64_t tid,
+    std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -84,8 +85,8 @@ bool RefreshImageDispatch<I>::discard(
 template <typename I>
 bool RefreshImageDispatch<I>::write_same(
     AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-    std::atomic<uint32_t>* image_dispatch_flags,
+    IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -102,8 +103,8 @@ bool RefreshImageDispatch<I>::write_same(
 template <typename I>
 bool RefreshImageDispatch<I>::compare_and_write(
     AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&cmp_bl,
-    bufferlist &&bl, uint64_t *mismatch_offset, int op_flags,
-    const ZTracer::Trace &parent_trace, uint64_t tid,
+    bufferlist &&bl, uint64_t *mismatch_offset, IOContext io_context,
+    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
     std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
index e9c53772fcdbd1eef2ddae30267fc87df9b5115e..024a3dbc8c19549acda2b20d1b53628463afd6d6 100644 (file)
@@ -35,34 +35,34 @@ public:
 
   bool read(
       AioCompletion* aio_comp, Extents &&image_extents,
-      ReadResult &&read_result, int op_flags,
+      ReadResult &&read_result, IOContext io_context, int op_flags,
       const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool write(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-      std::atomic<uint32_t>* image_dispatch_flags,
+      IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool discard(
       AioCompletion* aio_comp, Extents &&image_extents,
-      uint32_t discard_granularity_bytes,
+      uint32_t discard_granularity_bytes, IOContext io_context,
       const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool write_same(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-      std::atomic<uint32_t>* image_dispatch_flags,
+      IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool compare_and_write(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&cmp_bl,
-      bufferlist &&bl, uint64_t *mismatch_offset, int op_flags,
-      const ZTracer::Trace &parent_trace, uint64_t tid,
+      bufferlist &&bl, uint64_t *mismatch_offset, IOContext io_context,
+      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
index 50334c063d52bf663de109a0504e512a8fb86dd7..a4f143d74f2ac7844388ca12ac15a699b3f441a4 100644 (file)
@@ -117,8 +117,9 @@ void read_parent(I *image_ctx, uint64_t object_no, const Extents &extents,
   ldout(cct, 20) << "completion " << comp << ", extents " << parent_extents
                  << dendl;
 
-  ImageRequest<I>::aio_read(image_ctx->parent, comp, std::move(parent_extents),
-                            ReadResult{data}, 0, trace);
+  ImageRequest<I>::aio_read(
+    image_ctx->parent, comp, std::move(parent_extents), ReadResult{data},
+    image_ctx->parent->get_data_io_context(), 0, trace);
 }
 
 } // namespace util
index e2b5315fda590a967907f4a63dc479988bbbc6af..4439a15a797edd41978f45909fbc0878886d6037 100644 (file)
@@ -127,8 +127,8 @@ void WriteBlockImageDispatch<I>::wait_on_writes_unblocked(
 template <typename I>
 bool WriteBlockImageDispatch<I>::write(
     AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-    std::atomic<uint32_t>* image_dispatch_flags,
+    IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -140,8 +140,9 @@ bool WriteBlockImageDispatch<I>::write(
 template <typename I>
 bool WriteBlockImageDispatch<I>::discard(
     AioCompletion* aio_comp, Extents &&image_extents,
-    uint32_t discard_granularity_bytes, const ZTracer::Trace &parent_trace,
-    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
+    uint32_t discard_granularity_bytes, IOContext io_context,
+    const ZTracer::Trace &parent_trace, uint64_t tid,
+    std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -153,8 +154,8 @@ bool WriteBlockImageDispatch<I>::discard(
 template <typename I>
 bool WriteBlockImageDispatch<I>::write_same(
     AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-    std::atomic<uint32_t>* image_dispatch_flags,
+    IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+    uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
@@ -166,8 +167,8 @@ bool WriteBlockImageDispatch<I>::write_same(
 template <typename I>
 bool WriteBlockImageDispatch<I>::compare_and_write(
     AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&cmp_bl,
-    bufferlist &&bl, uint64_t *mismatch_offset, int op_flags,
-    const ZTracer::Trace &parent_trace, uint64_t tid,
+    bufferlist &&bl, uint64_t *mismatch_offset, IOContext io_context,
+    int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
     std::atomic<uint32_t>* image_dispatch_flags,
     DispatchResult* dispatch_result, Context** on_finish,
     Context* on_dispatched) {
index 4383e2e21c691b9a159513fe7a4a80a6c655c39c..f93802728c67d3df73fbf8b475010926d39c208f 100644 (file)
@@ -48,7 +48,7 @@ public:
 
   bool read(
       AioCompletion* aio_comp, Extents &&image_extents,
-      ReadResult &&read_result, int op_flags,
+      ReadResult &&read_result, IOContext io_context, int op_flags,
       const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
@@ -57,27 +57,27 @@ public:
   }
   bool write(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-      std::atomic<uint32_t>* image_dispatch_flags,
+      IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool discard(
       AioCompletion* aio_comp, Extents &&image_extents,
-      uint32_t discard_granularity_bytes,
+      uint32_t discard_granularity_bytes, IOContext io_context,
       const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool write_same(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-      std::atomic<uint32_t>* image_dispatch_flags,
+      IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
   bool compare_and_write(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&cmp_bl,
-      bufferlist &&bl, uint64_t *mismatch_offset, int op_flags,
-      const ZTracer::Trace &parent_trace, uint64_t tid,
+      bufferlist &&bl, uint64_t *mismatch_offset, IOContext io_context,
+      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override;
index a9c8f8072fd9194ee959f012353db5a00aad2a5e..db73edb610947e6f77258a5ccdeeacb65892ed23 100644 (file)
@@ -356,7 +356,8 @@ void Replay<I>::handle_event(const journal::AioDiscardEvent &event,
   if (!clipped_io(event.offset, aio_comp)) {
     io::ImageRequest<I>::aio_discard(&m_image_ctx, aio_comp,
                                      {{event.offset, event.length}},
-                                     event.discard_granularity_bytes, {});
+                                     event.discard_granularity_bytes,
+                                     m_image_ctx.get_data_io_context(), {});
   }
 
   if (flush_required) {
@@ -390,7 +391,8 @@ void Replay<I>::handle_event(const journal::AioWriteEvent &event,
   if (!clipped_io(event.offset, aio_comp)) {
     io::ImageRequest<I>::aio_write(&m_image_ctx, aio_comp,
                                    {{event.offset, event.length}},
-                                   std::move(data), 0, {});
+                                   std::move(data),
+                                   m_image_ctx.get_data_io_context(), 0, {});
   }
 
   if (flush_required) {
@@ -443,7 +445,9 @@ void Replay<I>::handle_event(const journal::AioWriteSameEvent &event,
   if (!clipped_io(event.offset, aio_comp)) {
     io::ImageRequest<I>::aio_writesame(&m_image_ctx, aio_comp,
                                        {{event.offset, event.length}},
-                                       std::move(data), 0, {});
+                                       std::move(data),
+                                       m_image_ctx.get_data_io_context(), 0,
+                                       {});
   }
 
   if (flush_required) {
@@ -477,7 +481,9 @@ void Replay<I>::handle_event(const journal::AioWriteSameEvent &event,
                                                {{event.offset, event.length}},
                                                std::move(cmp_data),
                                                std::move(write_data),
-                                               nullptr, 0, {});
+                                               nullptr,
+                                               m_image_ctx.get_data_io_context(),
+                                               0, {});
   }
 
   if (flush_required) {
index 344dcf781b29e1c8c0ea9cdb9199c5e2eaf74387..866ef7d610146d8e1ebb8d4d1f54cab50505e712 100644 (file)
@@ -401,10 +401,6 @@ void SnapshotCreateRequest<I>::update_snap_context() {
 
   std::shared_lock owner_locker{image_ctx.owner_lock};
   std::unique_lock image_locker{image_ctx.image_lock};
-  if (image_ctx.old_format) {
-    return;
-  }
-
   if (image_ctx.get_snap_info(m_snap_id) != NULL) {
     return;
   }
index 48b732706fb2e1ab71b33eb2966d057a847c208f..5ef42ba9852aca68fea5bc431f804a89d78223e0 100644 (file)
@@ -48,7 +48,8 @@ struct ImageRequest<MockTestImageCtx> {
 
   static void aio_read(MockTestImageCtx *ictx, AioCompletion *c,
                        Extents &&image_extents, ReadResult &&read_result,
-                       int op_flags, const ZTracer::Trace &parent_trace) {
+                       IOContext io_context, int op_flags,
+                       const ZTracer::Trace &parent_trace) {
     ceph_assert(s_instance != nullptr);
     s_instance->aio_read(c, image_extents);
   }
index b0f3eae101a1dedf933d96e321f3278c49fd026c..f00ec1861a9322b93af6a0cc0135f21f46708aa8 100644 (file)
@@ -105,7 +105,8 @@ struct ImageRequest<librbd::MockTestImageCtx> {
   static ImageRequest *s_instance;
   static void aio_read(librbd::MockImageCtx *ictx, AioCompletion *c,
                        Extents &&image_extents, ReadResult &&read_result,
-                       int op_flags, const ZTracer::Trace &parent_trace) {
+                       IOContext io_context, int op_flags,
+                       const ZTracer::Trace &parent_trace) {
     s_instance->aio_read(c, image_extents, &read_result);
   }
 
index 2dab0ebe4b64cad87f0f02069da200a38e4931da..9ef62fcc555fa223cc745088942a53357f56a37e 100644 (file)
@@ -152,8 +152,9 @@ TEST_F(TestMockIoImageRequest, AioWriteModifyTimestamp) {
 
   bufferlist bl;
   bl.append("1");
-  MockImageWriteRequest mock_aio_image_write_1(mock_image_ctx, aio_comp_1,
-                                             {{0, 1}}, std::move(bl), 0, {});
+  MockImageWriteRequest mock_aio_image_write_1(
+    mock_image_ctx, aio_comp_1, {{0, 1}}, std::move(bl),
+    mock_image_ctx.get_data_io_context(), 0, {});
   {
     std::shared_lock owner_locker{mock_image_ctx.owner_lock};
     mock_aio_image_write_1.send();
@@ -164,8 +165,9 @@ TEST_F(TestMockIoImageRequest, AioWriteModifyTimestamp) {
   expect_object_request_send(mock_image_ctx, 0);
 
   bl.append("1");
-  MockImageWriteRequest mock_aio_image_write_2(mock_image_ctx, aio_comp_2,
-                                             {{0, 1}}, std::move(bl), 0, {});
+  MockImageWriteRequest mock_aio_image_write_2(
+    mock_image_ctx, aio_comp_2, {{0, 1}}, std::move(bl),
+    mock_image_ctx.get_data_io_context(), 0, {});
   {
     std::shared_lock owner_locker{mock_image_ctx.owner_lock};
     mock_aio_image_write_2.send();
@@ -186,8 +188,9 @@ TEST_F(TestMockIoImageRequest, AioWriteEarlyFinish) {
     &aio_comp_ctx_2, ictx, AIO_TYPE_WRITE);
 
   bufferlist bl;
-  MockImageWriteRequest mock_aio_image_write_1(mock_image_ctx, aio_comp_1,
-                                             {{0, 0}}, std::move(bl), 0, {});
+  MockImageWriteRequest mock_aio_image_write_1(
+    mock_image_ctx, aio_comp_1, {{0, 0}}, std::move(bl),
+    mock_image_ctx.get_data_io_context(), 0, {});
   {
     std::shared_lock owner_locker{mock_image_ctx.owner_lock};
     mock_aio_image_write_1.send();
@@ -196,8 +199,9 @@ TEST_F(TestMockIoImageRequest, AioWriteEarlyFinish) {
 
   mock_image_ctx.snap_id = 123;
   bl.append("1");
-  MockImageWriteRequest mock_aio_image_write_2(mock_image_ctx, aio_comp_2,
-                                             {{0, 1}}, std::move(bl), 0, {});
+  MockImageWriteRequest mock_aio_image_write_2(
+    mock_image_ctx, aio_comp_2, {{0, 1}}, std::move(bl),
+    mock_image_ctx.get_data_io_context(), 0, {});
   {
     std::shared_lock owner_locker{mock_image_ctx.owner_lock};
     mock_aio_image_write_2.send();
@@ -238,8 +242,9 @@ TEST_F(TestMockIoImageRequest, AioReadAccessTimestamp) {
 
 
   ReadResult rr;
-  MockImageReadRequest mock_aio_image_read_1(mock_image_ctx, aio_comp_1,
-                                             {{0, 1}}, std::move(rr), 0, {});
+  MockImageReadRequest mock_aio_image_read_1(
+    mock_image_ctx, aio_comp_1, {{0, 1}}, std::move(rr),
+    mock_image_ctx.get_data_io_context(), 0, {});
   {
     std::shared_lock owner_locker{mock_image_ctx.owner_lock};
     mock_aio_image_read_1.send();
@@ -250,8 +255,9 @@ TEST_F(TestMockIoImageRequest, AioReadAccessTimestamp) {
     &aio_comp_ctx_2, ictx, AIO_TYPE_READ);
   expect_object_request_send(mock_image_ctx, 0);
 
-  MockImageReadRequest mock_aio_image_read_2(mock_image_ctx, aio_comp_2,
-                                             {{0, 1}}, std::move(rr), 0, {});
+  MockImageReadRequest mock_aio_image_read_2(
+    mock_image_ctx, aio_comp_2, {{0, 1}}, std::move(rr),
+    mock_image_ctx.get_data_io_context(), 0, {});
   {
     std::shared_lock owner_locker{mock_image_ctx.owner_lock};
     mock_aio_image_read_2.send();
@@ -277,7 +283,7 @@ TEST_F(TestMockIoImageRequest, PartialDiscard) {
     &aio_comp_ctx, ictx, AIO_TYPE_DISCARD);
   MockImageDiscardRequest mock_aio_image_discard(
     mock_image_ctx, aio_comp, {{16, 63}, {84, 100}},
-    ictx->discard_granularity_bytes, {});
+    ictx->discard_granularity_bytes, mock_image_ctx.get_data_io_context(), {});
   {
     std::shared_lock owner_locker{mock_image_ctx.owner_lock};
     mock_aio_image_discard.send();
@@ -305,7 +311,7 @@ TEST_F(TestMockIoImageRequest, TailDiscard) {
   MockImageDiscardRequest mock_aio_image_discard(
     mock_image_ctx, aio_comp,
     {{ictx->layout.object_size - 1024, 1024}},
-    ictx->discard_granularity_bytes, {});
+    ictx->discard_granularity_bytes, mock_image_ctx.get_data_io_context(), {});
   {
     std::shared_lock owner_locker{mock_image_ctx.owner_lock};
     mock_aio_image_discard.send();
@@ -335,7 +341,7 @@ TEST_F(TestMockIoImageRequest, DiscardGranularity) {
   MockImageDiscardRequest mock_aio_image_discard(
     mock_image_ctx, aio_comp,
     {{16, 63}, {96, 31}, {84, 100}, {ictx->layout.object_size - 33, 33}},
-    ictx->discard_granularity_bytes, {});
+    ictx->discard_granularity_bytes, mock_image_ctx.get_data_io_context(), {});
   {
     std::shared_lock owner_locker{mock_image_ctx.owner_lock};
     mock_aio_image_discard.send();
@@ -364,8 +370,9 @@ TEST_F(TestMockIoImageRequest, AioWriteJournalAppendDisabled) {
 
   bufferlist bl;
   bl.append("1");
-  MockImageWriteRequest mock_aio_image_write(mock_image_ctx, aio_comp,
-                                             {{0, 1}}, std::move(bl), 0, {});
+  MockImageWriteRequest mock_aio_image_write(
+    mock_image_ctx, aio_comp, {{0, 1}}, std::move(bl),
+    mock_image_ctx.get_data_io_context(), 0, {});
   {
     std::shared_lock owner_locker{mock_image_ctx.owner_lock};
     mock_aio_image_write.send();
@@ -393,7 +400,8 @@ TEST_F(TestMockIoImageRequest, AioDiscardJournalAppendDisabled) {
   AioCompletion *aio_comp = AioCompletion::create_and_start(
     &aio_comp_ctx, ictx, AIO_TYPE_DISCARD);
   MockImageDiscardRequest mock_aio_image_discard(
-    mock_image_ctx, aio_comp, {{0, 1}}, ictx->discard_granularity_bytes, {});
+    mock_image_ctx, aio_comp, {{0, 1}}, ictx->discard_granularity_bytes,
+    mock_image_ctx.get_data_io_context(), {});
   {
     std::shared_lock owner_locker{mock_image_ctx.owner_lock};
     mock_aio_image_discard.send();
@@ -450,9 +458,9 @@ TEST_F(TestMockIoImageRequest, AioWriteSameJournalAppendDisabled) {
 
   bufferlist bl;
   bl.append("1");
-  MockImageWriteSameRequest mock_aio_image_writesame(mock_image_ctx, aio_comp,
-                                                     {{0, 1}}, std::move(bl), 0,
-                                                     {});
+  MockImageWriteSameRequest mock_aio_image_writesame(
+    mock_image_ctx, aio_comp, {{0, 1}}, std::move(bl),
+    mock_image_ctx.get_data_io_context(), 0, {});
   {
     std::shared_lock owner_locker{mock_image_ctx.owner_lock};
     mock_aio_image_writesame.send();
@@ -484,11 +492,9 @@ TEST_F(TestMockIoImageRequest, AioCompareAndWriteJournalAppendDisabled) {
   bufferlist write_bl;
   write_bl.append("1");
   uint64_t mismatch_offset;
-  MockImageCompareAndWriteRequest mock_aio_image_write(mock_image_ctx, aio_comp,
-                                                       {{0, 1}}, std::move(cmp_bl),
-                                                       std::move(write_bl),
-                                                       &mismatch_offset,
-                                                       0, {});
+  MockImageCompareAndWriteRequest mock_aio_image_write(
+    mock_image_ctx, aio_comp, {{0, 1}}, std::move(cmp_bl), std::move(write_bl),
+    &mismatch_offset, mock_image_ctx.get_data_io_context(), 0, {});
   {
     std::shared_lock owner_locker{mock_image_ctx.owner_lock};
     mock_aio_image_write.send();
index 85ff9884cc832396d52ae5910788b1e338275b54..b902e0f95924570ad03b1ef725837c673ac68d52 100644 (file)
@@ -32,7 +32,8 @@ struct ImageRequest<MockReplayImageCtx> {
                                const bufferlist &bl, int op_flags));
   static void aio_write(MockReplayImageCtx *ictx, AioCompletion *c,
                         Extents &&image_extents, bufferlist &&bl,
-                        int op_flags, const ZTracer::Trace &parent_trace) {
+                        IOContext io_context, int op_flags,
+                        const ZTracer::Trace &parent_trace) {
     ceph_assert(s_instance != nullptr);
     s_instance->aio_write(c, image_extents, bl, op_flags);
   }
@@ -42,6 +43,7 @@ struct ImageRequest<MockReplayImageCtx> {
   static void aio_discard(MockReplayImageCtx *ictx, AioCompletion *c,
                           Extents&& image_extents,
                           uint32_t discard_granularity_bytes,
+                          IOContext io_context,
                           const ZTracer::Trace &parent_trace) {
     ceph_assert(s_instance != nullptr);
     s_instance->aio_discard(c, image_extents, discard_granularity_bytes);
@@ -56,21 +58,25 @@ struct ImageRequest<MockReplayImageCtx> {
 
   MOCK_METHOD4(aio_writesame, void(AioCompletion *c,
                                    const Extents& image_extents,
-                                   const bufferlist &bl, int op_flags));
+                                   const bufferlist &bl,
+                                   int op_flags));
   static void aio_writesame(MockReplayImageCtx *ictx, AioCompletion *c,
                             Extents&& image_extents, bufferlist &&bl,
-                            int op_flags, const ZTracer::Trace &parent_trace) {
+                            IOContext io_context, int op_flags,
+                            const ZTracer::Trace &parent_trace) {
     ceph_assert(s_instance != nullptr);
     s_instance->aio_writesame(c, image_extents, bl, op_flags);
   }
 
   MOCK_METHOD6(aio_compare_and_write, void(AioCompletion *c, const Extents &image_extents,
                                            const bufferlist &cmp_bl, const bufferlist &bl,
-                                           uint64_t *mismatch_offset, int op_flags));
+                                           uint64_t *mismatch_offset,
+                                           int op_flags));
   static void aio_compare_and_write(MockReplayImageCtx *ictx, AioCompletion *c,
                                     Extents &&image_extents, bufferlist &&cmp_bl,
                                     bufferlist &&bl, uint64_t *mismatch_offset,
-                                    int op_flags, const ZTracer::Trace &parent_trace) {
+                                    IOContext io_context, int op_flags,
+                                    const ZTracer::Trace &parent_trace) {
     ceph_assert(s_instance != nullptr);
     s_instance->aio_compare_and_write(c, image_extents, cmp_bl, bl,
                                       mismatch_offset, op_flags);
index d4c145e8cc378fe4d4b6ba792a195b4f1f91c41a..4b9b78d05354fd5673b44010fdc5e2631339024b 100644 (file)
@@ -22,7 +22,7 @@ public:
 
   bool read(
       AioCompletion* aio_comp, Extents &&image_extents,
-      ReadResult &&read_result, int op_flags,
+      ReadResult &&read_result, IOContext io_context, int op_flags,
       const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
@@ -32,8 +32,8 @@ public:
 
   bool write(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-      std::atomic<uint32_t>* image_dispatch_flags,
+      IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override {
     return false;
@@ -41,7 +41,7 @@ public:
 
   bool discard(
       AioCompletion* aio_comp, Extents &&image_extents,
-      uint32_t discard_granularity_bytes,
+      uint32_t discard_granularity_bytes, IOContext io_context,
       const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
@@ -51,8 +51,8 @@ public:
 
   bool write_same(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
-      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-      std::atomic<uint32_t>* image_dispatch_flags,
+      IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
+      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override {
     return false;
@@ -60,8 +60,8 @@ public:
 
   bool compare_and_write(
       AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&cmp_bl,
-      bufferlist &&bl, uint64_t *mismatch_offset, int op_flags,
-      const ZTracer::Trace &parent_trace, uint64_t tid,
+      bufferlist &&bl, uint64_t *mismatch_offset, IOContext io_context,
+      int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
       std::atomic<uint32_t>* image_dispatch_flags,
       DispatchResult* dispatch_result, Context** on_finish,
       Context* on_dispatched) override {
index 2aed5403c344643bbd58a447871de264560d1898..218fc6b0417035ac821d268aec20983d6f4e9254 100644 (file)
@@ -176,11 +176,9 @@ TEST_F(TestMockOperationSnapshotCreateRequest, Success) {
   expect_block_writes(mock_image_ctx);
   expect_allocate_snap_id(mock_image_ctx, 0);
   expect_snap_create(mock_image_ctx, 0);
-  if (!mock_image_ctx.old_format) {
-    expect_object_map_snap_create(mock_image_ctx);
-    expect_update_snap_context(mock_image_ctx);
-    EXPECT_CALL(mock_image_ctx, rebuild_data_io_context());
-  }
+  expect_object_map_snap_create(mock_image_ctx);
+  expect_update_snap_context(mock_image_ctx);
+  EXPECT_CALL(mock_image_ctx, rebuild_data_io_context());
   expect_unblock_writes(mock_image_ctx);
   expect_notify_unquiesce(mock_image_ctx, -EINVAL);
 
@@ -276,11 +274,9 @@ TEST_F(TestMockOperationSnapshotCreateRequest, CreateSnapStale) {
   expect_block_writes(mock_image_ctx);
   expect_allocate_snap_id(mock_image_ctx, -ESTALE);
   expect_snap_create(mock_image_ctx, -ESTALE);
-  if (!mock_image_ctx.old_format) {
-    expect_object_map_snap_create(mock_image_ctx);
-    expect_update_snap_context(mock_image_ctx);
-    EXPECT_CALL(mock_image_ctx, rebuild_data_io_context());
-  }
+  expect_object_map_snap_create(mock_image_ctx);
+  expect_update_snap_context(mock_image_ctx);
+  EXPECT_CALL(mock_image_ctx, rebuild_data_io_context());
   expect_unblock_writes(mock_image_ctx);
   expect_notify_unquiesce(mock_image_ctx, 0);
 
@@ -430,11 +426,9 @@ TEST_F(TestMockOperationSnapshotCreateRequest, SkipNotifyQuiesce) {
   expect_block_writes(mock_image_ctx);
   expect_allocate_snap_id(mock_image_ctx, 0);
   expect_snap_create(mock_image_ctx, 0);
-  if (!mock_image_ctx.old_format) {
-    expect_object_map_snap_create(mock_image_ctx);
-    expect_update_snap_context(mock_image_ctx);
-    EXPECT_CALL(mock_image_ctx, rebuild_data_io_context());
-  }
+  expect_object_map_snap_create(mock_image_ctx);
+  expect_update_snap_context(mock_image_ctx);
+  EXPECT_CALL(mock_image_ctx, rebuild_data_io_context());
   expect_unblock_writes(mock_image_ctx);
 
   C_SaferCond cond_ctx;