#include "librbd/Utils.h"
#include "librbd/exclusive_lock/Policy.h"
#include "librbd/io/AioCompletion.h"
-#include "librbd/io/FlushTracker.h"
#include "librbd/io/ImageDispatchSpec.h"
#include "librbd/io/ImageDispatcherInterface.h"
: m_image_ctx(image_ctx),
m_lock(ceph::make_shared_mutex(
util::unique_lock_name("librbd::exclusve_lock::ImageDispatch::m_lock",
- this))),
- m_flush_tracker(new io::FlushTracker<I>(image_ctx)) {
-}
-
-template <typename I>
-ImageDispatch<I>::~ImageDispatch() {
- delete m_flush_tracker;
+ this))) {
}
template <typename I>
ctx->complete(0);
}
- // ensure we don't have any pending flushes before deleting layer
- m_flush_tracker->shut_down();
on_finish->complete(0);
}
return true;
}
- m_flush_tracker->start_io(tid);
return false;
}
return true;
}
- m_flush_tracker->start_io(tid);
return false;
}
return true;
}
- m_flush_tracker->start_io(tid);
return false;
}
return true;
}
- m_flush_tracker->start_io(tid);
return false;
}
return true;
}
- m_flush_tracker->start_io(tid);
return false;
}
return true;
}
- *dispatch_result = io::DISPATCH_RESULT_CONTINUE;
- m_flush_tracker->flush(on_dispatched);
- return true;
-}
-
-template <typename I>
-void ImageDispatch<I>::handle_finished(int r, uint64_t tid) {
- auto cct = m_image_ctx->cct;
- ldout(cct, 20) << "tid=" << tid << dendl;
-
- m_flush_tracker->finish_io(tid);
+ return false;
}
template <typename I>
namespace io {
struct AioCompletion;
-template <typename> struct FlushTracker;
}
namespace exclusive_lock {
}
ImageDispatch(ImageCtxT* image_ctx);
- ~ImageDispatch() override;
io::ImageDispatchLayer get_dispatch_layer() const override {
return io::IMAGE_DISPATCH_LAYER_EXCLUSIVE_LOCK;
std::atomic<uint32_t>* image_dispatch_flags,
io::DispatchResult* dispatch_result, Context* on_dispatched) override;
- void handle_finished(int r, uint64_t tid) override;
+ void handle_finished(int r, uint64_t tid) override {
+ }
private:
typedef std::list<Context*> Contexts;
bool m_require_lock_on_read = false;
bool m_require_lock_on_write = false;
- io::FlushTracker<ImageCtxT>* m_flush_tracker = nullptr;
Contexts m_on_dispatches;
bool set_require_lock(io::Direction direction, bool enabled);