auto req = io::ImageDispatchSpec::create_read(
image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp, {{off, len}},
- std::move(read_result), image_ctx.get_data_io_context(), op_flags, trace);
+ std::move(read_result), image_ctx.get_data_io_context(), op_flags, 0,
+ trace);
req->send();
}
io::ImageReadRequest<> req(*image_ctx, aio_comp, std::move(image_extents),
io::ReadResult{bl},
image_ctx->get_data_io_context(), fadvise_flags,
- {});
+ 0, {});
req.set_bypass_image_cache();
req.send();
}
io::ImageRequest<I>::aio_read(src_image_ctx->parent, comp,
std::move(image_extents),
io::ReadResult{&m_read_from_parent_data},
- src_image_ctx->get_data_io_context(), 0,
+ src_image_ctx->get_data_io_context(), 0, 0,
ZTracer::Trace());
}
bool ImageDispatch<I>::read(
io::AioCompletion* aio_comp, io::Extents &&image_extents,
io::ReadResult &&read_result, IOContext io_context, int op_flags,
- const ZTracer::Trace &parent_trace, uint64_t tid,
+ int read_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) {
bool read(
io::AioCompletion* aio_comp, io::Extents &&image_extents,
io::ReadResult &&read_result, IOContext io_context, int op_flags,
- const ZTracer::Trace &parent_trace, uint64_t tid,
+ int read_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;
io::ImageReadRequest<> req(*src, comp, {{offset, len}},
io::ReadResult{bl}, src->get_data_io_context(),
- fadvise_flags, std::move(trace));
+ fadvise_flags, 0, std::move(trace));
ctx->read_trace = req.get_trace();
req.send();
io::AIO_TYPE_READ);
io::ImageRequest<>::aio_read(ictx, c, {{off, read_len}},
io::ReadResult{&bl},
- ictx->get_data_io_context(), 0,
+ ictx->get_data_io_context(), 0, 0,
std::move(trace));
int ret = ctx.wait();
ImageRequest<I>::aio_read(
m_image_ctx->parent, comp, std::move(m_image_extents),
ReadResult{&m_copyup_extent_map, &m_copyup_data},
- m_image_ctx->parent->get_data_io_context(), 0, m_trace);
+ m_image_ctx->parent->get_data_io_context(), 0, 0, m_trace);
} else {
ImageRequest<I>::aio_read(
m_image_ctx->parent, comp, std::move(m_image_extents),
ReadResult{&m_copyup_data},
- m_image_ctx->parent->get_data_io_context(), 0, m_trace);
+ m_image_ctx->parent->get_data_io_context(), 0, 0, m_trace);
}
}
template <typename I>
bool ImageDispatch<I>::read(
AioCompletion* aio_comp, Extents &&image_extents, ReadResult &&read_result,
- IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
- uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
+ IOContext io_context, int op_flags, int read_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;
*dispatch_result = DISPATCH_RESULT_COMPLETE;
ImageRequest<I>::aio_read(
m_image_ctx, aio_comp, std::move(image_extents), std::move(read_result),
- io_context, op_flags, parent_trace);
+ io_context, op_flags, read_flags, parent_trace);
return true;
}
bool read(
AioCompletion* aio_comp, Extents &&image_extents,
ReadResult &&read_result, IOContext io_context, int op_flags,
- const ZTracer::Trace &parent_trace, uint64_t tid,
+ int read_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;
virtual bool read(
AioCompletion* aio_comp, Extents &&image_extents,
ReadResult &&read_result, IOContext io_context, int op_flags,
- const ZTracer::Trace &parent_trace, uint64_t tid,
+ int read_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;
public:
struct Read {
ReadResult read_result;
+ int read_flags;
- Read(ReadResult &&read_result) : read_result(std::move(read_result)) {
+ Read(ReadResult &&read_result, int read_flags)
+ : read_result(std::move(read_result)), read_flags(read_flags) {
}
};
ImageCtxT &image_ctx, ImageDispatchLayer image_dispatch_layer,
AioCompletion *aio_comp, Extents &&image_extents,
ReadResult &&read_result, IOContext io_context, int op_flags,
- const ZTracer::Trace &parent_trace) {
+ int read_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)},
+ Read{std::move(read_result), read_flags},
io_context, op_flags, parent_trace);
}
image_dispatch_spec->aio_comp,
std::move(image_dispatch_spec->image_extents),
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->op_flags, read.read_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,
void ImageRequest<I>::aio_read(I *ictx, AioCompletion *c,
Extents &&image_extents,
ReadResult &&read_result, IOContext io_context,
- int op_flags,
+ int op_flags, int read_flags,
const ZTracer::Trace &parent_trace) {
ImageReadRequest<I> req(*ictx, c, std::move(image_extents),
std::move(read_result), io_context, op_flags,
- parent_trace);
+ read_flags, parent_trace);
req.send();
}
Extents &&image_extents,
ReadResult &&read_result,
IOContext io_context, int op_flags,
- const ZTracer::Trace &parent_trace)
+ int read_flags,
+ const ZTracer::Trace &parent_trace)
: ImageRequest<I>(image_ctx, aio_comp, std::move(image_extents),
io_context, "read", parent_trace),
- m_op_flags(op_flags) {
+ m_op_flags(op_flags), m_read_flags(read_flags) {
aio_comp->read_result = std::move(read_result);
}
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}}, this->m_io_context, m_op_flags, 0, this->m_trace,
- &req_comp->bl, &req_comp->extent_map, nullptr, req_comp);
+ {{oe.offset, oe.length}}, this->m_io_context, m_op_flags, m_read_flags,
+ this->m_trace, &req_comp->bl, &req_comp->extent_map, nullptr, req_comp);
req->send();
}
static void aio_read(ImageCtxT *ictx, AioCompletion *c,
Extents &&image_extents, ReadResult &&read_result,
- IOContext io_context, int op_flags,
+ IOContext io_context, int op_flags, int read_flags,
const ZTracer::Trace &parent_trace);
static void aio_write(ImageCtxT *ictx, AioCompletion *c,
Extents &&image_extents, bufferlist &&bl,
ImageReadRequest(ImageCtxT &image_ctx, AioCompletion *aio_comp,
Extents &&image_extents, ReadResult &&read_result,
- IOContext io_context, int op_flags,
+ IOContext io_context, int op_flags, int read_flags,
const ZTracer::Trace &parent_trace);
protected:
}
private:
int m_op_flags;
+ int m_read_flags;
};
template <typename ImageCtxT = ImageCtx>
template <typename I>
bool QosImageDispatch<I>::read(
AioCompletion* aio_comp, Extents &&image_extents, ReadResult &&read_result,
- IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
- uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
+ IOContext io_context, int op_flags, int read_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;
bool read(
AioCompletion* aio_comp, Extents &&image_extents,
ReadResult &&read_result, IOContext io_context, int op_flags,
- const ZTracer::Trace &parent_trace, uint64_t tid,
+ int read_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;
template <typename I>
bool QueueImageDispatch<I>::read(
AioCompletion* aio_comp, Extents &&image_extents, ReadResult &&read_result,
- IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
- uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
+ IOContext io_context, int op_flags, int read_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;
bool read(
AioCompletion* aio_comp, Extents &&image_extents,
ReadResult &&read_result, IOContext io_context, int op_flags,
- const ZTracer::Trace &parent_trace, uint64_t tid,
+ int read_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;
template <typename I>
bool RefreshImageDispatch<I>::read(
AioCompletion* aio_comp, Extents &&image_extents, ReadResult &&read_result,
- IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
- uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
+ IOContext io_context, int op_flags, int read_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;
bool read(
AioCompletion* aio_comp, Extents &&image_extents,
ReadResult &&read_result, IOContext io_context, int op_flags,
- const ZTracer::Trace &parent_trace, uint64_t tid,
+ int read_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;
ImageRequest<I>::aio_read(
image_ctx->parent, comp, std::move(parent_extents), ReadResult{data},
- image_ctx->parent->get_data_io_context(), 0, trace);
+ image_ctx->parent->get_data_io_context(), 0, 0, trace);
}
} // namespace util
bool read(
AioCompletion* aio_comp, Extents &&image_extents,
ReadResult &&read_result, IOContext io_context, int op_flags,
- const ZTracer::Trace &parent_trace, uint64_t tid,
+ int read_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 {
static void aio_read(MockTestImageCtx *ictx, AioCompletion *c,
Extents &&image_extents, ReadResult &&read_result,
IOContext io_context, int op_flags,
+ int read_flags,
const ZTracer::Trace &parent_trace) {
ceph_assert(s_instance != nullptr);
s_instance->aio_read(c, image_extents);
static ImageRequest *s_instance;
static void aio_read(librbd::MockImageCtx *ictx, AioCompletion *c,
Extents &&image_extents, ReadResult &&read_result,
- IOContext io_context, int op_flags,
+ IOContext io_context, int op_flags, int read_flags,
const ZTracer::Trace &parent_trace) {
s_instance->aio_read(c, image_extents, &read_result);
}
ReadResult rr;
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, {});
+ mock_image_ctx.get_data_io_context(), 0, 0, {});
{
std::shared_lock owner_locker{mock_image_ctx.owner_lock};
mock_aio_image_read_1.send();
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, {});
+ mock_image_ctx.get_data_io_context(), 0, 0, {});
{
std::shared_lock owner_locker{mock_image_ctx.owner_lock};
mock_aio_image_read_2.send();
bool read(
AioCompletion* aio_comp, Extents &&image_extents,
ReadResult &&read_result, IOContext io_context, int op_flags,
- const ZTracer::Trace &parent_trace, uint64_t tid,
+ int read_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 {