From: Jason Dillaman Date: Thu, 3 Sep 2020 14:02:05 +0000 (-0400) Subject: librbd: pass read flags via image-extent dispatch layers X-Git-Tag: v16.1.0~961^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b5b3007d403e850e804bfd06c378e19bc767e5be;p=ceph.git librbd: pass read flags via image-extent dispatch layers Signed-off-by: Jason Dillaman --- diff --git a/src/librbd/api/Io.cc b/src/librbd/api/Io.cc index 900e607a3496e..31b48b3f6b8d5 100644 --- a/src/librbd/api/Io.cc +++ b/src/librbd/api/Io.cc @@ -232,7 +232,8 @@ void Io::aio_read(I &image_ctx, io::AioCompletion *aio_comp, uint64_t off, 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(); } diff --git a/src/librbd/cache/ImageWriteback.cc b/src/librbd/cache/ImageWriteback.cc index dbc22778b7f6b..af39090e4bfeb 100644 --- a/src/librbd/cache/ImageWriteback.cc +++ b/src/librbd/cache/ImageWriteback.cc @@ -35,7 +35,7 @@ void ImageWriteback::aio_read(Extents &&image_extents, bufferlist *bl, 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(); } diff --git a/src/librbd/deep_copy/ObjectCopyRequest.cc b/src/librbd/deep_copy/ObjectCopyRequest.cc index a4a18cd5fe1af..0ece45aafa95f 100644 --- a/src/librbd/deep_copy/ObjectCopyRequest.cc +++ b/src/librbd/deep_copy/ObjectCopyRequest.cc @@ -267,7 +267,7 @@ void ObjectCopyRequest::send_read_from_parent() { io::ImageRequest::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()); } diff --git a/src/librbd/exclusive_lock/ImageDispatch.cc b/src/librbd/exclusive_lock/ImageDispatch.cc index e980efc391bb7..c4e04970a7cdf 100644 --- a/src/librbd/exclusive_lock/ImageDispatch.cc +++ b/src/librbd/exclusive_lock/ImageDispatch.cc @@ -106,7 +106,7 @@ template bool ImageDispatch::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* image_dispatch_flags, io::DispatchResult* dispatch_result, Context** on_finish, Context* on_dispatched) { diff --git a/src/librbd/exclusive_lock/ImageDispatch.h b/src/librbd/exclusive_lock/ImageDispatch.h index 1ce28a21cfc07..c6c0058949c6d 100644 --- a/src/librbd/exclusive_lock/ImageDispatch.h +++ b/src/librbd/exclusive_lock/ImageDispatch.h @@ -52,7 +52,7 @@ public: 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* image_dispatch_flags, io::DispatchResult* dispatch_result, Context** on_finish, Context* on_dispatched) override; diff --git a/src/librbd/internal.cc b/src/librbd/internal.cc index 3dcf674fbd76a..d8bd8b7147e67 100644 --- a/src/librbd/internal.cc +++ b/src/librbd/internal.cc @@ -1331,7 +1331,7 @@ int validate_pool(IoCtx &io_ctx, CephContext *cct) { 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(); @@ -1542,7 +1542,7 @@ int validate_pool(IoCtx &io_ctx, CephContext *cct) { 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(); diff --git a/src/librbd/io/CopyupRequest.cc b/src/librbd/io/CopyupRequest.cc index 7ab03928ed117..11e5e3733b951 100644 --- a/src/librbd/io/CopyupRequest.cc +++ b/src/librbd/io/CopyupRequest.cc @@ -176,12 +176,12 @@ void CopyupRequest::read_from_parent() { ImageRequest::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::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); } } diff --git a/src/librbd/io/ImageDispatch.cc b/src/librbd/io/ImageDispatch.cc index 161dac5025602..2413b16b994b1 100644 --- a/src/librbd/io/ImageDispatch.cc +++ b/src/librbd/io/ImageDispatch.cc @@ -34,8 +34,9 @@ void ImageDispatch::shut_down(Context* on_finish) { template bool ImageDispatch::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* image_dispatch_flags, + IOContext io_context, int op_flags, int read_flags, + const ZTracer::Trace &parent_trace, uint64_t tid, + std::atomic* image_dispatch_flags, DispatchResult* dispatch_result, Context** on_finish, Context* on_dispatched) { auto cct = m_image_ctx->cct; @@ -46,7 +47,7 @@ bool ImageDispatch::read( *dispatch_result = DISPATCH_RESULT_COMPLETE; ImageRequest::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; } diff --git a/src/librbd/io/ImageDispatch.h b/src/librbd/io/ImageDispatch.h index d12d9e7c79d98..512f28e2420de 100644 --- a/src/librbd/io/ImageDispatch.h +++ b/src/librbd/io/ImageDispatch.h @@ -36,7 +36,7 @@ public: 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* image_dispatch_flags, DispatchResult* dispatch_result, Context** on_finish, Context* on_dispatched) override; diff --git a/src/librbd/io/ImageDispatchInterface.h b/src/librbd/io/ImageDispatchInterface.h index 973f6fe13ee1d..1e563a634fe2c 100644 --- a/src/librbd/io/ImageDispatchInterface.h +++ b/src/librbd/io/ImageDispatchInterface.h @@ -34,7 +34,7 @@ struct ImageDispatchInterface { 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* image_dispatch_flags, DispatchResult* dispatch_result, Context** on_finish, Context* on_dispatched) = 0; diff --git a/src/librbd/io/ImageDispatchSpec.h b/src/librbd/io/ImageDispatchSpec.h index 4ed8788092f4f..4b62c356ed056 100644 --- a/src/librbd/io/ImageDispatchSpec.h +++ b/src/librbd/io/ImageDispatchSpec.h @@ -39,8 +39,10 @@ private: 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) { } }; @@ -125,11 +127,11 @@ public: 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); } diff --git a/src/librbd/io/ImageDispatcher.cc b/src/librbd/io/ImageDispatcher.cc index 728baf24a08da..6c2863bccbb67 100644 --- a/src/librbd/io/ImageDispatcher.cc +++ b/src/librbd/io/ImageDispatcher.cc @@ -41,8 +41,8 @@ struct ImageDispatcher::SendVisitor : public boost::static_visitor { 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, diff --git a/src/librbd/io/ImageRequest.cc b/src/librbd/io/ImageRequest.cc index b9b624b597515..f57857c323a56 100644 --- a/src/librbd/io/ImageRequest.cc +++ b/src/librbd/io/ImageRequest.cc @@ -237,11 +237,11 @@ template void ImageRequest::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 req(*ictx, c, std::move(image_extents), std::move(read_result), io_context, op_flags, - parent_trace); + read_flags, parent_trace); req.send(); } @@ -423,10 +423,11 @@ ImageReadRequest::ImageReadRequest(I &image_ctx, 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) : ImageRequest(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); } @@ -482,8 +483,8 @@ void ImageReadRequest::send_request() { 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(); } diff --git a/src/librbd/io/ImageRequest.h b/src/librbd/io/ImageRequest.h index 65ac9ca37fc2e..dabda6b6d85a4 100644 --- a/src/librbd/io/ImageRequest.h +++ b/src/librbd/io/ImageRequest.h @@ -35,7 +35,7 @@ public: 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, @@ -111,7 +111,7 @@ public: 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: @@ -128,6 +128,7 @@ protected: } private: int m_op_flags; + int m_read_flags; }; template diff --git a/src/librbd/io/QosImageDispatch.cc b/src/librbd/io/QosImageDispatch.cc index 0901f80e668f7..9ca88ac1916aa 100644 --- a/src/librbd/io/QosImageDispatch.cc +++ b/src/librbd/io/QosImageDispatch.cc @@ -116,8 +116,9 @@ void QosImageDispatch::apply_qos_limit(uint64_t flag, uint64_t limit, template bool QosImageDispatch::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* image_dispatch_flags, + IOContext io_context, int op_flags, int read_flags, + const ZTracer::Trace &parent_trace, uint64_t tid, + std::atomic* image_dispatch_flags, DispatchResult* dispatch_result, Context** on_finish, Context* on_dispatched) { auto cct = m_image_ctx->cct; diff --git a/src/librbd/io/QosImageDispatch.h b/src/librbd/io/QosImageDispatch.h index 9e73ddf8ce900..8ea12d64b8373 100644 --- a/src/librbd/io/QosImageDispatch.h +++ b/src/librbd/io/QosImageDispatch.h @@ -53,7 +53,7 @@ public: 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* image_dispatch_flags, DispatchResult* dispatch_result, Context** on_finish, Context* on_dispatched) override; diff --git a/src/librbd/io/QueueImageDispatch.cc b/src/librbd/io/QueueImageDispatch.cc index d2f1ec3e9bd85..e80d39e44210e 100644 --- a/src/librbd/io/QueueImageDispatch.cc +++ b/src/librbd/io/QueueImageDispatch.cc @@ -40,8 +40,9 @@ void QueueImageDispatch::shut_down(Context* on_finish) { template bool QueueImageDispatch::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* image_dispatch_flags, + IOContext io_context, int op_flags, int read_flags, + const ZTracer::Trace &parent_trace, uint64_t tid, + std::atomic* image_dispatch_flags, DispatchResult* dispatch_result, Context** on_finish, Context* on_dispatched) { auto cct = m_image_ctx->cct; diff --git a/src/librbd/io/QueueImageDispatch.h b/src/librbd/io/QueueImageDispatch.h index 83a683ff27167..ec94b61d84624 100644 --- a/src/librbd/io/QueueImageDispatch.h +++ b/src/librbd/io/QueueImageDispatch.h @@ -40,7 +40,7 @@ public: 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* image_dispatch_flags, DispatchResult* dispatch_result, Context** on_finish, Context* on_dispatched) override; diff --git a/src/librbd/io/RefreshImageDispatch.cc b/src/librbd/io/RefreshImageDispatch.cc index 9017804209a5d..5199f01d85d8f 100644 --- a/src/librbd/io/RefreshImageDispatch.cc +++ b/src/librbd/io/RefreshImageDispatch.cc @@ -30,8 +30,9 @@ void RefreshImageDispatch::shut_down(Context* on_finish) { template bool RefreshImageDispatch::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* image_dispatch_flags, + IOContext io_context, int op_flags, int read_flags, + const ZTracer::Trace &parent_trace, uint64_t tid, + std::atomic* image_dispatch_flags, DispatchResult* dispatch_result, Context** on_finish, Context* on_dispatched) { auto cct = m_image_ctx->cct; diff --git a/src/librbd/io/RefreshImageDispatch.h b/src/librbd/io/RefreshImageDispatch.h index 976960cc4bf99..144d97bafe8e0 100644 --- a/src/librbd/io/RefreshImageDispatch.h +++ b/src/librbd/io/RefreshImageDispatch.h @@ -36,7 +36,7 @@ public: 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* image_dispatch_flags, DispatchResult* dispatch_result, Context** on_finish, Context* on_dispatched) override; diff --git a/src/librbd/io/Utils.cc b/src/librbd/io/Utils.cc index a4f143d74f2ac..797006471ec3f 100644 --- a/src/librbd/io/Utils.cc +++ b/src/librbd/io/Utils.cc @@ -119,7 +119,7 @@ void read_parent(I *image_ctx, uint64_t object_no, const Extents &extents, ImageRequest::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 diff --git a/src/librbd/io/WriteBlockImageDispatch.h b/src/librbd/io/WriteBlockImageDispatch.h index 4af6e25eb14a4..e8b9407cf5433 100644 --- a/src/librbd/io/WriteBlockImageDispatch.h +++ b/src/librbd/io/WriteBlockImageDispatch.h @@ -49,7 +49,7 @@ public: 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* image_dispatch_flags, DispatchResult* dispatch_result, Context** on_finish, Context* on_dispatched) override { diff --git a/src/test/librbd/deep_copy/test_mock_ObjectCopyRequest.cc b/src/test/librbd/deep_copy/test_mock_ObjectCopyRequest.cc index 5ef42ba9852ac..cd3e255144aa1 100644 --- a/src/test/librbd/deep_copy/test_mock_ObjectCopyRequest.cc +++ b/src/test/librbd/deep_copy/test_mock_ObjectCopyRequest.cc @@ -49,6 +49,7 @@ struct ImageRequest { 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); diff --git a/src/test/librbd/io/test_mock_CopyupRequest.cc b/src/test/librbd/io/test_mock_CopyupRequest.cc index f00ec1861a932..69aaab7c8eed2 100644 --- a/src/test/librbd/io/test_mock_CopyupRequest.cc +++ b/src/test/librbd/io/test_mock_CopyupRequest.cc @@ -105,7 +105,7 @@ struct ImageRequest { 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); } diff --git a/src/test/librbd/io/test_mock_ImageRequest.cc b/src/test/librbd/io/test_mock_ImageRequest.cc index 196a5c70a9089..968207fb21820 100644 --- a/src/test/librbd/io/test_mock_ImageRequest.cc +++ b/src/test/librbd/io/test_mock_ImageRequest.cc @@ -265,7 +265,7 @@ TEST_F(TestMockIoImageRequest, AioReadAccessTimestamp) { 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(); @@ -278,7 +278,7 @@ TEST_F(TestMockIoImageRequest, AioReadAccessTimestamp) { 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(); diff --git a/src/test/librbd/mock/io/MockImageDispatch.h b/src/test/librbd/mock/io/MockImageDispatch.h index 40804d2431ca0..ebd2d829f6f29 100644 --- a/src/test/librbd/mock/io/MockImageDispatch.h +++ b/src/test/librbd/mock/io/MockImageDispatch.h @@ -23,7 +23,7 @@ public: 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* image_dispatch_flags, DispatchResult* dispatch_result, Context** on_finish, Context* on_dispatched) override {