From ca4f546f63324c74a6aec8d55dd7ca5891a03b84 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Tue, 20 Oct 2020 13:10:06 -0400 Subject: [PATCH] librbd: remove io::ReadResult::set_clip_length Combined the functionality with the newer 'set_image_extents' call to simplify the call-site logic for IO reads. Signed-off-by: Jason Dillaman --- src/librbd/cache/WriteLogImageDispatch.cc | 5 ++--- src/librbd/io/ImageRequest.cc | 1 - src/librbd/io/ReadResult.cc | 26 ++++++----------------- src/librbd/io/ReadResult.h | 2 -- src/librbd/io/Utils.cc | 8 ------- src/librbd/io/Utils.h | 8 ++++++- 6 files changed, 16 insertions(+), 34 deletions(-) diff --git a/src/librbd/cache/WriteLogImageDispatch.cc b/src/librbd/cache/WriteLogImageDispatch.cc index 254eb431f5184..bf1831cbacfbd 100644 --- a/src/librbd/cache/WriteLogImageDispatch.cc +++ b/src/librbd/cache/WriteLogImageDispatch.cc @@ -63,8 +63,7 @@ bool WriteLogImageDispatch::read( aio_comp->set_request_count(1); aio_comp->read_result = std::move(read_result); - uint64_t length = io::util::extents_length(image_extents); - aio_comp->read_result.set_clip_length(length); + aio_comp->read_result.set_image_extents(image_extents); auto *req_comp = new io::ReadResult::C_ImageReadRequest( aio_comp, image_extents); @@ -218,7 +217,7 @@ bool WriteLogImageDispatch::list_snaps( template bool WriteLogImageDispatch::preprocess_length( io::AioCompletion* aio_comp, io::Extents &image_extents) const { - auto total_bytes = io::util::extents_length(image_extents); + auto total_bytes = io::util::get_extents_length(image_extents); if (total_bytes == 0) { aio_comp->set_request_count(0); return true; diff --git a/src/librbd/io/ImageRequest.cc b/src/librbd/io/ImageRequest.cc index 5f5ea4471ecb3..17b97f9edf870 100644 --- a/src/librbd/io/ImageRequest.cc +++ b/src/librbd/io/ImageRequest.cc @@ -403,7 +403,6 @@ void ImageReadRequest::send_request() { } AioCompletion *aio_comp = this->m_aio_comp; - aio_comp->read_result.set_clip_length(buffer_ofs); aio_comp->read_result.set_image_extents(image_extents); // issue the requests diff --git a/src/librbd/io/ReadResult.cc b/src/librbd/io/ReadResult.cc index 963d4c685accf..d0a1e7e8294a3 100644 --- a/src/librbd/io/ReadResult.cc +++ b/src/librbd/io/ReadResult.cc @@ -5,6 +5,7 @@ #include "include/buffer.h" #include "common/dout.h" #include "librbd/io/AioCompletion.h" +#include "librbd/io/Utils.h" #include #include @@ -16,29 +17,20 @@ namespace librbd { namespace io { -struct ReadResult::SetClipLengthVisitor : public boost::static_visitor { - size_t length; +struct ReadResult::SetImageExtentsVisitor : public boost::static_visitor { + Extents image_extents; - explicit SetClipLengthVisitor(size_t length) : length(length) { + explicit SetImageExtentsVisitor(const Extents& image_extents) + : image_extents(image_extents) { } void operator()(Linear &linear) const { + uint64_t length = util::get_extents_length(image_extents); + ceph_assert(length <= linear.buf_len); linear.buf_len = length; } - template - void operator()(T &t) const { - } -}; - -struct ReadResult::SetImageExtentsVisitor : public boost::static_visitor { - Extents image_extents; - - explicit SetImageExtentsVisitor(const Extents& image_extents) - : image_extents(image_extents) { - } - void operator()(SparseBufferlist &sbl) const { sbl.image_extents = image_extents; } @@ -253,10 +245,6 @@ ReadResult::ReadResult(Extents* extent_map, ceph::bufferlist* bl) : m_buffer(SparseBufferlist(extent_map, bl)) { } -void ReadResult::set_clip_length(size_t length) { - boost::apply_visitor(SetClipLengthVisitor(length), m_buffer); -} - void ReadResult::set_image_extents(const Extents& image_extents) { boost::apply_visitor(SetImageExtentsVisitor(image_extents), m_buffer); } diff --git a/src/librbd/io/ReadResult.h b/src/librbd/io/ReadResult.h index 3a5b0d7bb37b6..69ced0c7b3760 100644 --- a/src/librbd/io/ReadResult.h +++ b/src/librbd/io/ReadResult.h @@ -63,7 +63,6 @@ public: ReadResult(ceph::bufferlist *bl); ReadResult(Extents* extent_map, ceph::bufferlist* bl); - void set_clip_length(size_t length); void set_image_extents(const Extents& image_extents); void assemble_result(CephContext *cct); @@ -112,7 +111,6 @@ private: Vector, Bufferlist, SparseBufferlist> Buffer; - struct SetClipLengthVisitor; struct SetImageExtentsVisitor; struct AssembleResultVisitor; diff --git a/src/librbd/io/Utils.cc b/src/librbd/io/Utils.cc index bc5f9644ff9e6..bfb89cfecc37b 100644 --- a/src/librbd/io/Utils.cc +++ b/src/librbd/io/Utils.cc @@ -151,14 +151,6 @@ int clip_request(I *image_ctx, Extents *image_extents) { return 0; } -uint64_t extents_length(Extents &extents) { - uint64_t total_bytes = 0; - for (auto& image_extent : extents) { - total_bytes += image_extent.second; - } - return total_bytes; -} - void unsparsify(CephContext* cct, ceph::bufferlist* bl, const Extents& extent_map, uint64_t bl_off, uint64_t out_bl_len) { diff --git a/src/librbd/io/Utils.h b/src/librbd/io/Utils.h index c58649bb975db..d28786b2a3d79 100644 --- a/src/librbd/io/Utils.h +++ b/src/librbd/io/Utils.h @@ -37,7 +37,13 @@ void read_parent(ImageCtxT *image_ctx, uint64_t object_no, template int clip_request(ImageCtxT *image_ctx, Extents *image_extents); -uint64_t extents_length(Extents &extents); +inline uint64_t get_extents_length(const Extents &extents) { + uint64_t total_bytes = 0; + for (auto [_, extent_length] : extents) { + total_bytes += extent_length; + } + return total_bytes; +} void unsparsify(CephContext* cct, ceph::bufferlist* bl, const Extents& extent_map, uint64_t bl_off, -- 2.39.5