From: Jason Dillaman Date: Wed, 7 Sep 2016 15:49:26 +0000 (-0400) Subject: rbd-nbd: mask out-of-bounds IO errors caused by image shrink X-Git-Tag: v10.2.4~21^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d7c0873ea77234b7b736080c3de4012d2f6adaee;p=ceph.git rbd-nbd: mask out-of-bounds IO errors caused by image shrink Signed-off-by: Jason Dillaman (cherry picked from commit c6cfb616a846959a2cd1c0e540b14668c61a2afd) --- diff --git a/src/tools/rbd_nbd/rbd-nbd.cc b/src/tools/rbd_nbd/rbd-nbd.cc index d6dae2073f69..49cbeecf19d1 100644 --- a/src/tools/rbd_nbd/rbd-nbd.cc +++ b/src/tools/rbd_nbd/rbd-nbd.cc @@ -184,13 +184,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(ctx->request.len)) { int pad_byte_count = static_cast (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 {