From: Jason Dillaman Date: Sat, 8 Apr 2017 00:59:28 +0000 (-0400) Subject: rbd: import-diff was attempting to write empty chunks X-Git-Tag: v12.0.2~129^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2188a7b23bef8dcbc9d3a83c268a47024fd361b1;p=ceph.git rbd: import-diff was attempting to write empty chunks Signed-off-by: Jason Dillaman --- diff --git a/src/tools/rbd/action/Import.cc b/src/tools/rbd/action/Import.cc index 5367b25a5c09..6d0e4bfe06cf 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;