From: Samuel Just Date: Wed, 28 Apr 2021 08:42:35 +0000 (-0700) Subject: crimson/os/seastore: fix read() to use onode.size for len=0 X-Git-Tag: v17.1.0~2043^2~16 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=820dcce6f241646445792bfaa93d1e1cb521e854;p=ceph.git crimson/os/seastore: fix read() to use onode.size for len=0 Signed-off-by: Samuel Just --- diff --git a/src/crimson/os/seastore/seastore.cc b/src/crimson/os/seastore/seastore.cc index ae86e4b79d45..814bde35eff7 100644 --- a/src/crimson/os/seastore/seastore.cc +++ b/src/crimson/os/seastore/seastore.cc @@ -175,7 +175,17 @@ SeaStore::read_errorator::future SeaStore::read( return repeat_with_onode( ch, oid, - [=](auto &t, auto &onode) { + [=](auto &t, auto &onode) -> ObjectDataHandler::read_ret { + size_t size = onode.get_layout().size; + + if (offset >= size) { + return seastar::make_ready_future(); + } + + size_t corrected_len = (len == 0) ? + size - offset : + std::min(size - offset, len); + return ObjectDataHandler().read( ObjectDataHandler::context_t{ *transaction_manager, @@ -183,7 +193,7 @@ SeaStore::read_errorator::future SeaStore::read( onode, }, offset, - len); + corrected_len); }); }