From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:57136) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TjoWl-00013N-Ax for qemu-devel@nongnu.org; Sat, 15 Dec 2012 04:59:29 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TjoWk-0004Ao-0k for qemu-devel@nongnu.org; Sat, 15 Dec 2012 04:59:27 -0500 Received: from mail-pb0-f45.google.com ([209.85.160.45]:59927) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TjoWj-00049T-QG for qemu-devel@nongnu.org; Sat, 15 Dec 2012 04:59:25 -0500 Received: by mail-pb0-f45.google.com with SMTP id mc8so2864429pbc.4 for ; Sat, 15 Dec 2012 01:59:25 -0800 (PST) From: Liu Yuan Date: Sat, 15 Dec 2012 17:59:12 +0800 Message-Id: <1355565552-18346-1-git-send-email-namei.unix@gmail.com> In-Reply-To: <1355565174-5121-1-git-send-email-namei.unix@gmail.com> References: <1355565174-5121-1-git-send-email-namei.unix@gmail.com> Subject: [Qemu-devel] [PATCH Update] sheepdog: don't update inode when create_and_write fails List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Kevin Wolf , MORITA Kazutaka From: Liu Yuan For the error case such as SD_RES_NO_SPACE, we shouldn't update the inode bitmap to avoid the scenario that the object is allocated but wasn't created at the server side. This will result in VM's IO error on the failed object. Cc: MORITA Kazutaka Cc: Kevin Wolf Signed-off-by: Liu Yuan --- Update - update the coding style and passed checkpath block/sheepdog.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/block/sheepdog.c b/block/sheepdog.c index a48f58c..6116316 100644 --- a/block/sheepdog.c +++ b/block/sheepdog.c @@ -697,6 +697,12 @@ static void coroutine_fn aio_read_response(void *opaque) acb = aio_req->aiocb; + if (rsp.result != SD_RES_SUCCESS) { + acb->ret = -EIO; + error_report("%s", sd_strerror(rsp.result)); + goto err; + } + switch (acb->aiocb_type) { case AIOCB_WRITE_UDATA: /* this coroutine context is no longer suitable for co_recv @@ -736,11 +742,7 @@ static void coroutine_fn aio_read_response(void *opaque) break; } - if (rsp.result != SD_RES_SUCCESS) { - acb->ret = -EIO; - error_report("%s", sd_strerror(rsp.result)); - } - +err: free_aio_req(s, aio_req); if (!acb->nr_pending) { /* -- 1.7.9.5