]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd: import-diff was attempting to write empty chunks
authorJason Dillaman <dillaman@redhat.com>
Sat, 8 Apr 2017 00:59:28 +0000 (20:59 -0400)
committerJason Dillaman <dillaman@redhat.com>
Sat, 8 Apr 2017 01:06:29 +0000 (21:06 -0400)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/tools/rbd/action/Import.cc

index 5367b25a5c094e668bb224677b0c2b3fe00c8733..6d0e4bfe06cf042c68c0ff1b22993f70c46f61a1 100644 (file)
@@ -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;