]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/librbd/cache/ImageWriteback.cc
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / librbd / cache / ImageWriteback.cc
index 909691a2a804726b6ddd29bc31f3c38ab9dc7b04..dcbba42ba9ef533d34c40acc4f0deeb325a583dd 100644 (file)
@@ -7,9 +7,11 @@
 #include "librbd/ImageCtx.h"
 #include "librbd/Utils.h"
 #include "librbd/io/AioCompletion.h"
+#include "librbd/io/ImageDispatchSpec.h"
 #include "librbd/io/ImageRequest.h"
 #include "librbd/io/ReadResult.h"
 
+#undef dout_subsys
 #define dout_subsys ceph_subsys_rbd
 #undef dout_prefix
 #define dout_prefix *_dout << "librbd::ImageWriteback: " << __func__ << ": "
@@ -31,10 +33,13 @@ void ImageWriteback<I>::aio_read(Extents &&image_extents, bufferlist *bl,
   ImageCtx *image_ctx = util::get_image_ctx(&m_image_ctx);
   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, {});
-  req.set_bypass_image_cache();
-  req.send();
+  ZTracer::Trace trace;
+  auto req = io::ImageDispatchSpec::create_read(
+    *image_ctx, io::IMAGE_DISPATCH_LAYER_WRITEBACK_CACHE, aio_comp,
+    std::move(image_extents), io::ReadResult{bl},
+    image_ctx->get_data_io_context(),
+    fadvise_flags, 0, trace);
+  req->send();
 }
 
 template <typename I>
@@ -48,15 +53,17 @@ void ImageWriteback<I>::aio_write(Extents &&image_extents,
   ImageCtx *image_ctx = util::get_image_ctx(&m_image_ctx);
   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, {});
-  req.set_bypass_image_cache();
-  req.send();
+  ZTracer::Trace trace;
+  auto req = io::ImageDispatchSpec::create_write(
+    *image_ctx, io::IMAGE_DISPATCH_LAYER_WRITEBACK_CACHE, aio_comp,
+    std::move(image_extents), std::move(bl),
+    image_ctx->get_data_io_context(), fadvise_flags, trace);
+  req->send();
 }
 
 template <typename I>
 void ImageWriteback<I>::aio_discard(uint64_t offset, uint64_t length,
-                                   uint32_t discard_granularity_bytes,
+                                    uint32_t discard_granularity_bytes,
                                     Context *on_finish) {
   CephContext *cct = m_image_ctx.cct;
   ldout(cct, 20) << "offset=" << offset << ", "
@@ -66,23 +73,29 @@ void ImageWriteback<I>::aio_discard(uint64_t offset, uint64_t length,
   ImageCtx *image_ctx = util::get_image_ctx(&m_image_ctx);
   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, {});
-  req.set_bypass_image_cache();
-  req.send();
+  ZTracer::Trace trace;
+  auto req = io::ImageDispatchSpec::create_discard(
+    *image_ctx, io::IMAGE_DISPATCH_LAYER_WRITEBACK_CACHE, aio_comp, offset,
+    length, discard_granularity_bytes,
+    image_ctx->get_data_io_context(), trace);
+  req->send();
 }
 
 template <typename I>
-void ImageWriteback<I>::aio_flush(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;
 
   ImageCtx *image_ctx = util::get_image_ctx(&m_image_ctx);
   auto aio_comp = io::AioCompletion::create_and_start(
       on_finish, image_ctx, io::AIO_TYPE_FLUSH);
-  io::ImageFlushRequest<> req(*image_ctx, aio_comp, io::FLUSH_SOURCE_INTERNAL, {});
-  req.set_bypass_image_cache();
-  req.send();
+
+  ZTracer::Trace trace;
+  auto req = io::ImageDispatchSpec::create_flush(
+    *image_ctx, io::IMAGE_DISPATCH_LAYER_WRITEBACK_CACHE, aio_comp,
+    flush_source, trace);
+  req->send();
 }
 
 template <typename I>
@@ -98,10 +111,12 @@ void ImageWriteback<I>::aio_writesame(uint64_t offset, uint64_t length,
   ImageCtx *image_ctx = util::get_image_ctx(&m_image_ctx);
   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, {});
-  req.set_bypass_image_cache();
-  req.send();
+  ZTracer::Trace trace;
+  auto req = io::ImageDispatchSpec::create_write_same(
+    *image_ctx, io::IMAGE_DISPATCH_LAYER_WRITEBACK_CACHE, aio_comp, offset,
+    length, std::move(bl), image_ctx->get_data_io_context(),
+    fadvise_flags, trace);
+  req->send();
 }
 
 template <typename I>
@@ -118,12 +133,13 @@ void ImageWriteback<I>::aio_compare_and_write(Extents &&image_extents,
   ImageCtx *image_ctx = util::get_image_ctx(&m_image_ctx);
   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, {});
-  req.set_bypass_image_cache();
-  req.send();
+  ZTracer::Trace trace;
+  auto req = io::ImageDispatchSpec::create_compare_and_write(
+    *image_ctx, io::IMAGE_DISPATCH_LAYER_WRITEBACK_CACHE, aio_comp,
+    std::move(image_extents), std::move(cmp_bl), std::move(bl),
+    mismatch_offset, image_ctx->get_data_io_context(),
+    fadvise_flags, trace);
+  req->send();
 }
 
 } // namespace cache