xen_disk: fix io accounting
bdrv_acct_done was called unconditional. But in case the ioreq has no segments there is no matching bdrv_acct_start call. This could lead to bogus accounting values. Found by code inspection. Signed-off-by: Olaf Hering <olaf@aepfle.de> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
This commit is contained in:
		
							parent
							
								
									15e8159e76
								
							
						
					
					
						commit
						58da5b1e01
					
				| 
						 | 
				
			
			@ -483,7 +483,18 @@ static void qemu_aio_complete(void *opaque, int ret)
 | 
			
		|||
    ioreq->status = ioreq->aio_errors ? BLKIF_RSP_ERROR : BLKIF_RSP_OKAY;
 | 
			
		||||
    ioreq_unmap(ioreq);
 | 
			
		||||
    ioreq_finish(ioreq);
 | 
			
		||||
    bdrv_acct_done(ioreq->blkdev->bs, &ioreq->acct);
 | 
			
		||||
    switch (ioreq->req.operation) {
 | 
			
		||||
    case BLKIF_OP_WRITE:
 | 
			
		||||
    case BLKIF_OP_FLUSH_DISKCACHE:
 | 
			
		||||
        if (!ioreq->req.nr_segments) {
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    case BLKIF_OP_READ:
 | 
			
		||||
        bdrv_acct_done(ioreq->blkdev->bs, &ioreq->acct);
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
    qemu_bh_schedule(ioreq->blkdev->bh);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue