]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-nbd: mask out-of-bounds IO errors caused by image shrink
authorJason Dillaman <dillaman@redhat.com>
Wed, 7 Sep 2016 15:49:26 +0000 (11:49 -0400)
committerJason Dillaman <dillaman@redhat.com>
Fri, 9 Sep 2016 12:22:46 +0000 (08:22 -0400)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/tools/rbd_nbd/rbd-nbd.cc

index 4f70db42403c102b8a67244f33f254df03573a0a..2db9dfacb9a7b2a43c14d46e1087a6b3e0de88b0 100644 (file)
@@ -185,13 +185,21 @@ private:
 
     dout(20) << __func__ << ": " << *ctx << dendl;
 
+    if (ret == -EINVAL) {
+      // if shrinking an image, a pagecache writeback might reference
+      // extents outside of the range of the new image extents
+      dout(5) << __func__ << ": masking IO out-of-bounds error" << dendl;
+      ctx->data.clear();
+      ret = 0;
+    }
+
     if (ret < 0) {
       ctx->reply.error = htonl(-ret);
     } else if ((ctx->command == NBD_CMD_READ) &&
                 ret < static_cast<int>(ctx->request.len)) {
       int pad_byte_count = static_cast<int> (ctx->request.len) - ret;
       ctx->data.append_zero(pad_byte_count);
-      dout(20) << __func__ << ": " << *ctx << ": Pad byte count: " 
+      dout(20) << __func__ << ": " << *ctx << ": Pad byte count: "
                << pad_byte_count << dendl;
       ctx->reply.error = 0;
     } else {