]> xenbits.xensource.com Git - qemu-xen-4.3-testing.git/commitdiff
qemu-xen-traditional: QDISK fixes
authorStefano Stabellini <stefano.stabellini@eu.citrix.com>
Mon, 2 Apr 2012 16:55:05 +0000 (17:55 +0100)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Mon, 2 Apr 2012 16:56:09 +0000 (17:56 +0100)
- if ioreq->postsync call bdrv_flush when the operation is actually
  completed;
- do not increment aio_inflight when not submitting any operations.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
hw/xen_disk.c

index b1d698510cdc1a9a4196dd74821bffb09f443a4d..5db58accc57fcd077726603179b4cc8535f089ca 100644 (file)
@@ -382,6 +382,8 @@ static void qemu_aio_complete(void *opaque, int ret)
     ioreq->aio_inflight--;
     if (ioreq->aio_inflight > 0)
         return;
+    if (ioreq->postsync)
+       bdrv_flush(ioreq->blkdev->bs);
 
     ioreq->status = ioreq->aio_errors ? BLKIF_RSP_ERROR : BLKIF_RSP_OKAY;
     ioreq_unmap(ioreq);
@@ -409,9 +411,9 @@ static int ioreq_runio_qemu_aio(struct ioreq *ioreq)
        break;
     case BLKIF_OP_WRITE:
     case BLKIF_OP_WRITE_BARRIER:
-        ioreq->aio_inflight++;
         if (!ioreq->req.nr_segments)
             break;
+        ioreq->aio_inflight++;
         bdrv_aio_writev(blkdev->bs, ioreq->start / BLOCK_SIZE,
                         &ioreq->v, ioreq->v.size / BLOCK_SIZE,
                         qemu_aio_complete, ioreq);
@@ -421,8 +423,6 @@ static int ioreq_runio_qemu_aio(struct ioreq *ioreq)
        goto err;
     }
 
-    if (ioreq->postsync)
-       bdrv_flush(blkdev->bs); /* FIXME: aio_flush() ??? */
     qemu_aio_complete(ioreq, 0);
 
     return 0;