From 2188a7b23bef8dcbc9d3a83c268a47024fd361b1 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Fri, 7 Apr 2017 20:59:28 -0400 Subject: [PATCH] rbd: import-diff was attempting to write empty chunks Signed-off-by: Jason Dillaman --- src/tools/rbd/action/Import.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/tools/rbd/action/Import.cc b/src/tools/rbd/action/Import.cc index 5367b25a5c094..6d0e4bfe06cf0 100644 --- a/src/tools/rbd/action/Import.cc +++ b/src/tools/rbd/action/Import.cc @@ -220,7 +220,6 @@ static int do_image_io(ImportDiffContext *idiffctx, bool discard, size_t sparse_ ::decode(off, p); ::decode(len, p); - bufferlist data; if (!discard) { bufferptr bp = buffer::create(len); r = safe_read_exact(idiffctx->fd, bp.c_str(), len); @@ -242,7 +241,11 @@ static int do_image_io(ImportDiffContext *idiffctx, bool discard, size_t sparse_ bufferptr write_ptr(bp, write_offset, write_length); bufferlist write_bl; write_bl.push_back(write_ptr); - C_ImportDiff *ctx = new C_ImportDiff(idiffctx, data, off, len, discard); + assert(write_bl.length() == write_length); + + C_ImportDiff *ctx = new C_ImportDiff(idiffctx, write_bl, + off + write_offset, write_length, + false); r = ctx->send(); if (r < 0) { @@ -254,7 +257,8 @@ static int do_image_io(ImportDiffContext *idiffctx, bool discard, size_t sparse_ } } } else { - C_ImportDiff *ctx = new C_ImportDiff(idiffctx, data, off, len, discard); + bufferlist data; + C_ImportDiff *ctx = new C_ImportDiff(idiffctx, data, off, len, true); return ctx->send(); } return r; -- 2.39.5