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;
|
||||
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;
|
||||
|
||||
if (num_reqs > 1) {
|
||||
@ -331,7 +330,7 @@ static inline void submit_requests(BlockBackend *blk, MultiReqBuffer *mrb,
|
||||
int tmp_niov = qiov->niov;
|
||||
|
||||
/* 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. */
|
||||
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,
|
||||
mrb->reqs[i]->qiov.size);
|
||||
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,
|
||||
nb_sectors, is_write);
|
||||
trace_virtio_blk_submit_multireq(mrb, start, num_reqs,
|
||||
sector_num << BDRV_SECTOR_BITS,
|
||||
qiov->size, is_write);
|
||||
block_acct_merge_done(blk_get_stats(blk),
|
||||
is_write ? BLOCK_ACCT_WRITE : BLOCK_ACCT_READ,
|
||||
num_reqs - 1);
|
||||
}
|
||||
|
||||
if (is_write) {
|
||||
blk_aio_writev(blk, sector_num, qiov, nb_sectors,
|
||||
virtio_blk_rw_complete, mrb->reqs[start]);
|
||||
blk_aio_pwritev(blk, sector_num << BDRV_SECTOR_BITS, qiov, 0,
|
||||
virtio_blk_rw_complete, mrb->reqs[start]);
|
||||
} else {
|
||||
blk_aio_readv(blk, sector_num, qiov, nb_sectors,
|
||||
virtio_blk_rw_complete, mrb->reqs[start]);
|
||||
blk_aio_preadv(blk, sector_num << BDRV_SECTOR_BITS, qiov, 0,
|
||||
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_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_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
|
||||
virtio_blk_data_plane_start(void *s) "dataplane %p"
|
||||
|
Loading…
Reference in New Issue
Block a user