bdev_virtio: add alloc_virtio_disk

Added separate function for allocating virtio_scsi_disk.
This is required for the upcoming 10-bit SCSI command
support changes.

Change-Id: Ib60bfe003f37d796387944b04494baf2a77a6558
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/379422
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
Dariusz Stojaczyk 2017-09-21 11:36:06 +02:00 committed by Daniel Verkamp
parent 29df0140f0
commit bcaac30fe3

View File

@ -339,17 +339,10 @@ process_scan_inquiry(struct virtio_scsi_scan_base *base, struct virtio_req *vreq
}
static int
process_read_cap(struct virtio_scsi_scan_base *base, struct virtio_req *vreq)
alloc_virtio_disk(struct virtio_scsi_scan_base *base, uint64_t num_blocks, uint32_t block_size)
{
struct virtio_scsi_disk *disk;
struct spdk_bdev *bdev;
struct virtio_scsi_cmd_req *req = vreq->iov_req.iov_base;
struct virtio_scsi_cmd_resp *resp = vreq->iov_resp.iov_base;
if (resp->response != VIRTIO_SCSI_S_OK || resp->status != SPDK_SCSI_STATUS_GOOD) {
SPDK_ERRLOG("read capacity failed for target %"PRIu8".\n", req->lun[1]);
return -1;
}
disk = calloc(1, sizeof(*disk));
if (disk == NULL) {
@ -357,10 +350,9 @@ process_read_cap(struct virtio_scsi_scan_base *base, struct virtio_req *vreq)
return -1;
}
disk->num_blocks = from_be64((uint64_t *)(vreq->iov[0].iov_base)) + 1;
disk->block_size = from_be32((uint32_t *)(vreq->iov[0].iov_base + 8));
disk->vdev = base->vdev;
disk->num_blocks = num_blocks;
disk->block_size = block_size;
bdev = &disk->bdev;
bdev->name = spdk_sprintf_alloc("Virtio0");
@ -378,6 +370,24 @@ process_read_cap(struct virtio_scsi_scan_base *base, struct virtio_req *vreq)
return 0;
}
static int
process_read_cap(struct virtio_scsi_scan_base *base, struct virtio_req *vreq)
{
struct virtio_scsi_cmd_req *req = vreq->iov_req.iov_base;
struct virtio_scsi_cmd_resp *resp = vreq->iov_resp.iov_base;
uint64_t num_blocks;
uint32_t block_size;
if (resp->response != VIRTIO_SCSI_S_OK || resp->status != SPDK_SCSI_STATUS_GOOD) {
SPDK_ERRLOG("read capacity failed for target %"PRIu8".\n", req->lun[1]);
return -1;
}
num_blocks = from_be64((uint64_t *)(vreq->iov[0].iov_base)) + 1;
block_size = from_be32((uint32_t *)(vreq->iov[0].iov_base + 8));
return alloc_virtio_disk(base, num_blocks, block_size);
}
static void
process_scan_resp(struct virtio_scsi_scan_base *base, struct virtio_req *vreq)
{