At Sat, 15 Dec 2012 17:59:12 +0800, Liu Yuan wrote: > > From: Liu Yuan <tailai...@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.kazut...@lab.ntt.co.jp> > Cc: Kevin Wolf <kw...@redhat.com> > Signed-off-by: Liu Yuan <tailai...@taobao.com> > --- > 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) { > /*
send_pending_req() needs to be called even in error case. Rather than moving the error check, I think it looks better to update s->inode.data_vdi_id only when rsp.result is SD_RES_SUCCESS. Thanks, Kazutaka