offset = lba_512 * 512;
- for (i = 0; i < task->iovs_cnt; i++) {
+ /* iovs[0] is the head and iovs[iovs_cnt - 1] is the tail
+ * Middle is the data range
+ */
+ for (i = 1; i < task->iovs_cnt - 1; i++) {
if (task->dxfer_dir == BLK_DIR_TO_DEV)
memcpy(bdev->data + offset, task->iovs[i].iov_base,
task->iovs[i].iov_len);
"%s - passed IO buffer is not multiple of 512b"
"(req_idx = %"PRIu16").\n",
task->req->type ? "WRITE" : "READ",
- task->head_idx);
+ task->req_idx);
return VIRTIO_BLK_S_UNSUPP;
}
"%s - passed IO buffer is not multiple of 512b"
"(req_idx = %"PRIu16").\n",
task->req->type ? "WRITE" : "READ",
- task->head_idx);
+ task->req_idx);
return VIRTIO_BLK_S_UNSUPP;
}
- if (task->readtype) {
- fprintf(stderr, "type isn't right\n");
- return VIRTIO_BLK_S_IOERR;
- }
task->dxfer_dir = BLK_DIR_TO_DEV;
vhost_bdev_blk_readwrite(bdev, task,
task->req->sector, task->data_len);