From 6d7307f0660ebe88f068e51d9f7ce4b92d8f3f9f Mon Sep 17 00:00:00 2001 From: shangdehao1 Date: Fri, 19 Apr 2019 07:18:48 +0800 Subject: [PATCH] librbd: keep gen lambda context small move all codes of lambda context to handle_read_cache. Signed-off-by: Dehao Shang --- .../cache/SharedReadOnlyObjectDispatch.cc | 25 +++++++++++-------- .../cache/SharedReadOnlyObjectDispatch.h | 2 +- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/librbd/cache/SharedReadOnlyObjectDispatch.cc b/src/librbd/cache/SharedReadOnlyObjectDispatch.cc index c4b6ca6c5bf..499da1cbcb3 100644 --- a/src/librbd/cache/SharedReadOnlyObjectDispatch.cc +++ b/src/librbd/cache/SharedReadOnlyObjectDispatch.cc @@ -102,16 +102,8 @@ bool SharedReadOnlyObjectDispatch::read( std::function> ([this, snap_id, read_data, dispatch_result, on_dispatched, oid, object_off, object_len](ObjectCacheRequest* ack) { - if (ack->type == RBDSC_READ_REPLY) { - std::string file_path = ((ObjectCacheReadReplyData*)ack)->cache_path; - ceph_assert(file_path != ""); - handle_read_cache(file_path, object_off, object_len, read_data, - dispatch_result, on_dispatched); - } else { - // go back to read rados - *dispatch_result = io::DISPATCH_RESULT_CONTINUE; - on_dispatched->complete(0); - } + handle_read_cache(ack, object_off, object_len, read_data, + dispatch_result, on_dispatched); }); if (m_cache_client && m_cache_client->is_session_work() && m_object_store) { @@ -125,9 +117,20 @@ bool SharedReadOnlyObjectDispatch::read( template int SharedReadOnlyObjectDispatch::handle_read_cache( - const std::string file_path, uint64_t read_off, + ObjectCacheRequest* ack, uint64_t read_off, uint64_t read_len, ceph::bufferlist* read_data, io::DispatchResult* dispatch_result, Context* on_dispatched) { + std::string file_path; + if (ack->type == RBDSC_READ_REPLY) { + file_path = ((ObjectCacheReadReplyData*)ack)->cache_path; + ceph_assert(file_path != ""); + } else { + // go back to read rados + *dispatch_result = io::DISPATCH_RESULT_CONTINUE; + on_dispatched->complete(0); + return false; + } + auto cct = m_image_ctx->cct; ldout(cct, 20) << dendl; diff --git a/src/librbd/cache/SharedReadOnlyObjectDispatch.h b/src/librbd/cache/SharedReadOnlyObjectDispatch.h index 792f5fce6fc..3c7e934f07b 100644 --- a/src/librbd/cache/SharedReadOnlyObjectDispatch.h +++ b/src/librbd/cache/SharedReadOnlyObjectDispatch.h @@ -114,7 +114,7 @@ public: private: int handle_read_cache( - const std::string file_path, uint64_t read_off, + ObjectCacheRequest* ack, uint64_t read_off, uint64_t read_len, ceph::bufferlist* read_data, io::DispatchResult* dispatch_result, Context* on_dispatched); -- 2.39.5