]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: fix read() to use onode.size for len=0
authorSamuel Just <sjust@redhat.com>
Wed, 28 Apr 2021 08:42:35 +0000 (01:42 -0700)
committerSamuel Just <sjust@redhat.com>
Fri, 7 May 2021 07:36:34 +0000 (00:36 -0700)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/os/seastore/seastore.cc

index ae86e4b79d4532693df689a220a05d4050cfdffd..814bde35eff77df5ee8ddad43f8e880ad5bdf4ea 100644 (file)
@@ -175,7 +175,17 @@ SeaStore::read_errorator::future<ceph::bufferlist> SeaStore::read(
   return repeat_with_onode<ceph::bufferlist>(
     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<ceph::bufferlist>();
+      }
+
+      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<ceph::bufferlist> SeaStore::read(
          onode,
        },
        offset,
-       len);
+       corrected_len);
     });
 }