#include "librbd/ObjectMap.h"
#include "librbd/Utils.h"
#include "librbd/io/AioCompletion.h"
+#include "librbd/io/AsyncOperation.h"
#include "librbd/io/ImageRequest.h"
#include "librbd/io/ReadResult.h"
#include "osdc/Striper.h"
m_flatten(flatten), m_on_finish(on_finish) {
ceph_assert(!m_snap_map.empty());
+ m_src_async_op = new io::AsyncOperation();
+ m_src_async_op->start_op(*util::get_image_ctx(m_src_image_ctx));
+
m_src_io_ctx.dup(m_src_image_ctx->data_ctx);
m_dst_io_ctx.dup(m_dst_image_ctx->data_ctx);
// ensure IoCtxs are closed prior to proceeding
auto on_finish = m_on_finish;
+
+ m_src_async_op->finish_op();
+ delete m_src_async_op;
delete this;
on_finish->complete(r);
class RWLock;
namespace librbd {
+
+namespace io { class AsyncOperation; }
+
namespace deep_copy {
template <typename ImageCtxT = librbd::ImageCtx>
std::map<librados::snap_t, bool> m_dst_object_may_exist;
bufferlist m_read_from_parent_data;
+ io::AsyncOperation* m_src_async_op = nullptr;
+
void send_list_snaps();
void handle_list_snaps(int r);