]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/object_data_handler: don't return empty buffers from split_pin*
authorSamuel Just <sjust@redhat.com>
Fri, 8 Apr 2022 09:20:49 +0000 (02:20 -0700)
committerchunmei-liu <chunmei.liu@intel.com>
Wed, 13 Apr 2022 00:48:52 +0000 (17:48 -0700)
Always return std::nullopt rather than an empty buffer -- this way users
can rely on this as an invariant.

Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/os/seastore/object_data_handler.cc

index fb50b633e8720f845bf3fc3dd896a06e0bc741d2..228360e3e0877390744afd1b206ff8c2d0ac5127 100644 (file)
@@ -177,7 +177,10 @@ split_ret split_pin_left(context_t ctx, LBAPinRef &pin, laddr_t offset)
       (zero_extent_len == 0
        ? std::nullopt
        : std::make_optional(extent_to_write_t(pin_offset, zero_extent_len))),
-      bufferptr(ceph::buffer::create(zero_prepend_len, 0))
+      (zero_prepend_len == 0
+       ? std::nullopt
+       : std::make_optional(
+        bufferptr(ceph::buffer::create(zero_prepend_len, 0))))
     );
   } else {
     // Data, return up to offset to prepend
@@ -213,7 +216,10 @@ split_ret split_pin_right(context_t ctx, LBAPinRef &pin, laddr_t end)
       (zero_extent_len == 0
        ? std::nullopt
        : std::make_optional(extent_to_write_t(aligned_end, zero_extent_len))),
-      bufferptr(ceph::buffer::create(zero_suffix_len, 0))
+      (zero_suffix_len == 0
+       ? std::nullopt
+       : std::make_optional(
+        bufferptr(ceph::buffer::create(zero_suffix_len, 0))))
     );
   } else {
     return read_pin(ctx, pin->duplicate()