virtio: Switch to byte-based aio block access
Sector-based blk_aio_readv() and blk_aio_writev() should die; switch to byte-based blk_aio_preadv() and blk_aio_pwritev() instead. The trace is modified at the same time, and nb_sectors is now unused. Fix a comment typo while in the vicinity. Signed-off-by: Eric Blake <eblake@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
		
							parent
							
								
									03c90063cc
								
							
						
					
					
						commit
						b5772fdde4
					
				@ -322,7 +322,6 @@ static inline void submit_requests(BlockBackend *blk, MultiReqBuffer *mrb,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    QEMUIOVector *qiov = &mrb->reqs[start]->qiov;
 | 
					    QEMUIOVector *qiov = &mrb->reqs[start]->qiov;
 | 
				
			||||||
    int64_t sector_num = mrb->reqs[start]->sector_num;
 | 
					    int64_t sector_num = mrb->reqs[start]->sector_num;
 | 
				
			||||||
    int nb_sectors = mrb->reqs[start]->qiov.size / BDRV_SECTOR_SIZE;
 | 
					 | 
				
			||||||
    bool is_write = mrb->is_write;
 | 
					    bool is_write = mrb->is_write;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (num_reqs > 1) {
 | 
					    if (num_reqs > 1) {
 | 
				
			||||||
@ -331,7 +330,7 @@ static inline void submit_requests(BlockBackend *blk, MultiReqBuffer *mrb,
 | 
				
			|||||||
        int tmp_niov = qiov->niov;
 | 
					        int tmp_niov = qiov->niov;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* mrb->reqs[start]->qiov was initialized from external so we can't
 | 
					        /* mrb->reqs[start]->qiov was initialized from external so we can't
 | 
				
			||||||
         * modifiy it here. We need to initialize it locally and then add the
 | 
					         * modify it here. We need to initialize it locally and then add the
 | 
				
			||||||
         * external iovecs. */
 | 
					         * external iovecs. */
 | 
				
			||||||
        qemu_iovec_init(qiov, niov);
 | 
					        qemu_iovec_init(qiov, niov);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -343,23 +342,22 @@ static inline void submit_requests(BlockBackend *blk, MultiReqBuffer *mrb,
 | 
				
			|||||||
            qemu_iovec_concat(qiov, &mrb->reqs[i]->qiov, 0,
 | 
					            qemu_iovec_concat(qiov, &mrb->reqs[i]->qiov, 0,
 | 
				
			||||||
                              mrb->reqs[i]->qiov.size);
 | 
					                              mrb->reqs[i]->qiov.size);
 | 
				
			||||||
            mrb->reqs[i - 1]->mr_next = mrb->reqs[i];
 | 
					            mrb->reqs[i - 1]->mr_next = mrb->reqs[i];
 | 
				
			||||||
            nb_sectors += mrb->reqs[i]->qiov.size / BDRV_SECTOR_SIZE;
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        assert(nb_sectors == qiov->size / BDRV_SECTOR_SIZE);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        trace_virtio_blk_submit_multireq(mrb, start, num_reqs, sector_num,
 | 
					        trace_virtio_blk_submit_multireq(mrb, start, num_reqs,
 | 
				
			||||||
                                         nb_sectors, is_write);
 | 
					                                         sector_num << BDRV_SECTOR_BITS,
 | 
				
			||||||
 | 
					                                         qiov->size, is_write);
 | 
				
			||||||
        block_acct_merge_done(blk_get_stats(blk),
 | 
					        block_acct_merge_done(blk_get_stats(blk),
 | 
				
			||||||
                              is_write ? BLOCK_ACCT_WRITE : BLOCK_ACCT_READ,
 | 
					                              is_write ? BLOCK_ACCT_WRITE : BLOCK_ACCT_READ,
 | 
				
			||||||
                              num_reqs - 1);
 | 
					                              num_reqs - 1);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (is_write) {
 | 
					    if (is_write) {
 | 
				
			||||||
        blk_aio_writev(blk, sector_num, qiov, nb_sectors,
 | 
					        blk_aio_pwritev(blk, sector_num << BDRV_SECTOR_BITS, qiov, 0,
 | 
				
			||||||
                       virtio_blk_rw_complete, mrb->reqs[start]);
 | 
					                        virtio_blk_rw_complete, mrb->reqs[start]);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        blk_aio_readv(blk, sector_num, qiov, nb_sectors,
 | 
					        blk_aio_preadv(blk, sector_num << BDRV_SECTOR_BITS, qiov, 0,
 | 
				
			||||||
                      virtio_blk_rw_complete, mrb->reqs[start]);
 | 
					                       virtio_blk_rw_complete, mrb->reqs[start]);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -118,7 +118,7 @@ virtio_blk_req_complete(void *req, int status) "req %p status %d"
 | 
				
			|||||||
virtio_blk_rw_complete(void *req, int ret) "req %p ret %d"
 | 
					virtio_blk_rw_complete(void *req, int ret) "req %p ret %d"
 | 
				
			||||||
virtio_blk_handle_write(void *req, uint64_t sector, size_t nsectors) "req %p sector %"PRIu64" nsectors %zu"
 | 
					virtio_blk_handle_write(void *req, uint64_t sector, size_t nsectors) "req %p sector %"PRIu64" nsectors %zu"
 | 
				
			||||||
virtio_blk_handle_read(void *req, uint64_t sector, size_t nsectors) "req %p sector %"PRIu64" nsectors %zu"
 | 
					virtio_blk_handle_read(void *req, uint64_t sector, size_t nsectors) "req %p sector %"PRIu64" nsectors %zu"
 | 
				
			||||||
virtio_blk_submit_multireq(void *mrb, int start, int num_reqs, uint64_t sector, size_t nsectors, bool is_write) "mrb %p start %d num_reqs %d sector %"PRIu64" nsectors %zu is_write %d"
 | 
					virtio_blk_submit_multireq(void *mrb, int start, int num_reqs, uint64_t offset, size_t size, bool is_write) "mrb %p start %d num_reqs %d offset %"PRIu64" size %zu is_write %d"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# hw/block/dataplane/virtio-blk.c
 | 
					# hw/block/dataplane/virtio-blk.c
 | 
				
			||||||
virtio_blk_data_plane_start(void *s) "dataplane %p"
 | 
					virtio_blk_data_plane_start(void *s) "dataplane %p"
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user