From: cy.l@inwinstack.com Date: Wed, 27 Apr 2016 03:00:25 +0000 (+0800) Subject: Fix RBD-NBD aio_callback error handling X-Git-Tag: v11.0.0~735^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f8f6c1dc865b7ed642fec3f416e5eca5e91523d0;p=ceph.git Fix RBD-NBD aio_callback error handling Tracker-Id: #15604 Signed-off-by: Chang-Yi Lee --- diff --git a/qa/workunits/rbd/rbd-nbd.sh b/qa/workunits/rbd/rbd-nbd.sh index 3bc7d80d2800..46e8f3858d01 100755 --- a/qa/workunits/rbd/rbd-nbd.sh +++ b/qa/workunits/rbd/rbd-nbd.sh @@ -81,8 +81,7 @@ ${SUDO} rbd-nbd list-mapped | grep "^${DEV}$" #write test dd if=/dev/urandom of=${DATA} bs=1M count=${SIZE} -${SUDO} dd if=${DATA} of=${DEV} bs=1M -sync +${SUDO} dd if=${DATA} of=${DEV} bs=1M oflag=direct [ "`dd if=${DATA} bs=1M | md5sum`" = "`rbd -p ${POOL} --no-progress export ${IMAGE} - | md5sum`" ] #trim test diff --git a/src/tools/rbd_nbd/rbd-nbd.cc b/src/tools/rbd_nbd/rbd-nbd.cc index e0c0284021c5..60192b07eaf3 100644 --- a/src/tools/rbd_nbd/rbd-nbd.cc +++ b/src/tools/rbd_nbd/rbd-nbd.cc @@ -186,11 +186,12 @@ private: if (ret < 0) { ctx->reply.error = htonl(-ret); - } else if ((ctx->command == NBD_CMD_WRITE || ctx->command == NBD_CMD_READ) - && ret != static_cast(ctx->request.len)) { - derr << __func__ << ": " << *ctx << ": unexpected return value: " << ret - << " (" << ctx->request.len << " expected)" << dendl; - ctx->reply.error = htonl(EIO); + } 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('\x0', pad_byte_count); + dout(20) << __func__ << ": " << *ctx << ": Pad byte count: " + << pad_byte_count << dendl; } else { ctx->reply.error = htonl(0); }