From: Samuel Just Date: Tue, 15 Dec 2020 03:04:02 +0000 (-0800) Subject: crimson/tools: fix bugs introduced in 3333ff X-Git-Tag: v16.1.0~266^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F38577%2Fhead;p=ceph.git crimson/tools: fix bugs introduced in 3333ff You can't actually mix buffered and direct io on a stream. Signed-off-by: Samuel Just --- diff --git a/src/crimson/tools/store-nbd.cc b/src/crimson/tools/store-nbd.cc index 5e5625397334..c4e528ed7c5a 100644 --- a/src/crimson/tools/store-nbd.cc +++ b/src/crimson/tools/store-nbd.cc @@ -168,7 +168,7 @@ struct request_context_t { memcpy(handle, p, sizeof(handle)); p += sizeof(handle); from = seastar::consume_be(p); - len = seastar::consume_be(p); + len = seastar::consume_be(p); logger().debug( "Got request, magic {}, type {}, from {}, len {}", magic, type, from, len); @@ -194,9 +194,14 @@ struct request_context_t { return out.write(std::move(buffer)).then([this, &out] { if (out_buffer) { return seastar::do_for_each( - out_buffer->buffers(), - [&out](auto &ptr) { - return out.write(ptr.c_str(), ptr.length()); + out_buffer->mut_buffers(), + [&out](bufferptr &ptr) { + return out.write( + seastar::temporary_buffer( + ptr.c_str(), + ptr.length(), + seastar::make_deleter([ptr](){})) + ); }); } else { return seastar::now(); @@ -324,6 +329,7 @@ int main(int argc, char** argv) } class nbd_oldstyle_negotiation_t { + uint64_t magic = seastar::cpu_to_be(0x4e42444d41474943); // "NBDMAGIC" uint64_t magic2 = seastar::cpu_to_be(0x00420281861253); // "IHAVEOPT" uint64_t size = 0; uint32_t flags = seastar::cpu_to_be(0); @@ -338,11 +344,10 @@ seastar::future<> send_negotiation( size_t size, seastar::output_stream& out) { - return out.write("NBDMAGIC").then([size, &out] { - seastar::temporary_buffer buf{sizeof(nbd_oldstyle_negotiation_t)}; - new (buf.get_write()) nbd_oldstyle_negotiation_t(size, 1); - return out.write(std::move(buf)); - }).then([&out] { + seastar::temporary_buffer buf{sizeof(nbd_oldstyle_negotiation_t)}; + new (buf.get_write()) nbd_oldstyle_negotiation_t(size, 1); + return out.write(std::move(buf) + ).then([&out] { return out.flush(); }); } diff --git a/src/include/buffer.h b/src/include/buffer.h index f24459958da8..7c8f90e9fb5d 100644 --- a/src/include/buffer.h +++ b/src/include/buffer.h @@ -989,6 +989,7 @@ struct error_code; } const buffers_t& buffers() const { return _buffers; } + buffers_t& mut_buffers() { return _buffers; } void swap(list& other) noexcept; unsigned length() const { #if 0