qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] sheepdog: don't update inode when create_and_write fails
@ 2012-12-15  9:52 Liu Yuan
  2012-12-15  9:58 ` Liu Yuan
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Liu Yuan @ 2012-12-15  9:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Kevin Wolf, MORITA Kazutaka

From: Liu Yuan <tailai.ly@taobao.com>

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 <morita.kazutaka@lab.ntt.co.jp>
Cc: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Liu Yuan <tailai.ly@taobao.com>
---
 block/sheepdog.c |   12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/block/sheepdog.c b/block/sheepdog.c
index a48f58c..ef9e653 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

^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2012-12-19 14:25 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-12-15  9:52 [Qemu-devel] [PATCH] sheepdog: don't update inode when create_and_write fails Liu Yuan
2012-12-15  9:58 ` Liu Yuan
2012-12-15  9:59 ` [Qemu-devel] [PATCH Update] " Liu Yuan
2012-12-17  3:43   ` MORITA Kazutaka
2012-12-17  5:22     ` Liu Yuan
2012-12-17  5:57       ` MORITA Kazutaka
2012-12-17  6:17 ` [Qemu-devel] [PATCH v2 1/2] " Liu Yuan
2012-12-17  6:17   ` [Qemu-devel] [PATCH v2 2/2] sheepdog: pass oid directly to send_pending_req() Liu Yuan
2012-12-17  7:49     ` MORITA Kazutaka
2012-12-17  7:49   ` [Qemu-devel] [PATCH v2 1/2] sheepdog: don't update inode when create_and_write fails MORITA Kazutaka
2012-12-19 14:25   ` Stefan Hajnoczi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).