From 24267ea8cb96320c933ba9ce60a7738520350e6d Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Thu, 25 Mar 2021 11:56:40 -0700 Subject: [PATCH] crimson/os/seastore/.../block.cc: add error message on alloc error to segment_write Signed-off-by: Samuel Just --- .../os/seastore/segment_manager/block.cc | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/crimson/os/seastore/segment_manager/block.cc b/src/crimson/os/seastore/segment_manager/block.cc index 9529ac6eb87..36e890894ce 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); }); }