From 4e87c1cd7e923f4254ce43e92e1cce4329fd86dd Mon Sep 17 00:00:00 2001 From: "cy.l@inwinstack.com" Date: Wed, 27 Apr 2016 11:00:25 +0800 Subject: [PATCH] Fix RBD-NBD aio_callback error handling Tracker-Id: #15604 Signed-off-by: Chang-Yi Lee (cherry picked from commit f8f6c1dc865b7ed642fec3f416e5eca5e91523d0) --- qa/workunits/rbd/rbd-nbd.sh | 3 +-- src/tools/rbd_nbd/rbd-nbd.cc | 11 ++++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/qa/workunits/rbd/rbd-nbd.sh b/qa/workunits/rbd/rbd-nbd.sh index 3bc7d80d2800d..46e8f3858d018 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 e0c0284021c55..60192b07eaf3e 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); } -- 2.39.5