From: Samuel Just Date: Thu, 25 Mar 2021 18:56:40 +0000 (-0700) Subject: crimson/os/seastore/.../block.cc: add error message on alloc error to segment_write X-Git-Tag: v17.1.0~2478^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=24267ea8cb96320c933ba9ce60a7738520350e6d;p=ceph.git crimson/os/seastore/.../block.cc: add error message on alloc error to segment_write Signed-off-by: Samuel Just --- diff --git a/src/crimson/os/seastore/segment_manager/block.cc b/src/crimson/os/seastore/segment_manager/block.cc index 9529ac6eb875..36e890894ceb 100644 --- a/src/crimson/os/seastore/segment_manager/block.cc +++ b/src/crimson/os/seastore/segment_manager/block.cc @@ -239,15 +239,27 @@ Segment::write_ertr::future<> BlockSegmentManager::segment_write( get_offset(addr), bl.length()); + bufferptr bptr; + try { + bptr = bufferptr(ceph::buffer::create_page_aligned(bl.length())); + auto iter = bl.cbegin(); + iter.copy(bl.length(), bptr.c_str()); + } catch (const std::exception &e) { + logger().error( + "BlockSegmentManager::segment_write: " + "exception creating aligned buffer {}", + e + ); + throw e; + } + // TODO send an iovec and avoid the copy -- bl should have aligned // constituent buffers and they will remain unmodified until the write // completes return seastar::do_with( - bufferptr(ceph::buffer::create_page_aligned(bl.length())), + std::move(bptr), [&](auto &bp) { - auto iter = bl.cbegin(); - iter.copy(bl.length(), bp.c_str()); return do_write(device, get_offset(addr), bp); }); }