]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/librbd/cache/ImageWriteback.cc
import 15.2.0 Octopus source
[ceph.git] / ceph / src / librbd / cache / ImageWriteback.cc
index ad479fbd39912bcb2f6166670bd06b05a8fc2b07..909691a2a804726b6ddd29bc31f3c38ab9dc7b04 100644 (file)
@@ -5,6 +5,7 @@
 #include "include/buffer.h"
 #include "common/dout.h"
 #include "librbd/ImageCtx.h"
+#include "librbd/Utils.h"
 #include "librbd/io/AioCompletion.h"
 #include "librbd/io/ImageRequest.h"
 #include "librbd/io/ReadResult.h"
@@ -27,9 +28,10 @@ void ImageWriteback<I>::aio_read(Extents &&image_extents, bufferlist *bl,
   ldout(cct, 20) << "image_extents=" << image_extents << ", "
                  << "on_finish=" << on_finish << dendl;
 
-  auto aio_comp = io::AioCompletion::create_and_start(on_finish, &m_image_ctx,
-                                                      io::AIO_TYPE_READ);
-  io::ImageReadRequest<I> req(m_image_ctx, aio_comp, std::move(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_READ);
+  io::ImageReadRequest<> req(*image_ctx, aio_comp, std::move(image_extents),
                               io::ReadResult{bl}, fadvise_flags, {});
   req.set_bypass_image_cache();
   req.send();
@@ -43,9 +45,10 @@ void ImageWriteback<I>::aio_write(Extents &&image_extents,
   ldout(cct, 20) << "image_extents=" << image_extents << ", "
                  << "on_finish=" << on_finish << dendl;
 
-  auto aio_comp = io::AioCompletion::create_and_start(on_finish, &m_image_ctx,
-                                                      io::AIO_TYPE_WRITE);
-  io::ImageWriteRequest<I> req(m_image_ctx, aio_comp, std::move(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();
@@ -60,9 +63,10 @@ void ImageWriteback<I>::aio_discard(uint64_t offset, uint64_t length,
                  << "length=" << length << ", "
                 << "on_finish=" << on_finish << dendl;
 
-  auto aio_comp = io::AioCompletion::create_and_start(on_finish, &m_image_ctx,
-                                                      io::AIO_TYPE_DISCARD);
-  io::ImageDiscardRequest<I> req(m_image_ctx, aio_comp, {{offset, 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();
@@ -73,10 +77,10 @@ void ImageWriteback<I>::aio_flush(Context *on_finish) {
   CephContext *cct = m_image_ctx.cct;
   ldout(cct, 20) << "on_finish=" << on_finish << dendl;
 
-  auto aio_comp = io::AioCompletion::create_and_start(on_finish, &m_image_ctx,
-                                                      io::AIO_TYPE_FLUSH);
-  io::ImageFlushRequest<I> req(m_image_ctx, aio_comp, io::FLUSH_SOURCE_INTERNAL,
-                               {});
+  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();
 }
@@ -91,9 +95,10 @@ void ImageWriteback<I>::aio_writesame(uint64_t offset, uint64_t length,
                  << "data_len=" << bl.length() << ", "
                  << "on_finish=" << on_finish << dendl;
 
-  auto aio_comp = io::AioCompletion::create_and_start(on_finish, &m_image_ctx,
-                                                      io::AIO_TYPE_WRITESAME);
-  io::ImageWriteSameRequest<I> req(m_image_ctx, aio_comp, {{offset, 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();
@@ -110,9 +115,10 @@ void ImageWriteback<I>::aio_compare_and_write(Extents &&image_extents,
   ldout(cct, 20) << "image_extents=" << image_extents << ", "
                  << "on_finish=" << on_finish << dendl;
 
-  auto aio_comp = io::AioCompletion::create_and_start(on_finish, &m_image_ctx,
-                                                      io::AIO_TYPE_COMPARE_AND_WRITE);
-  io::ImageCompareAndWriteRequest<I> req(m_image_ctx, aio_comp,
+  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, {});