lib/vhost: accept generic vhost arugments in process_blk_request()
process_blk_request() accepted spdk_vhost_blk_session argument which is specific for vhost_user. In preparation to making this function usable outside of vhost_user, replace this field with struct spdk_io_channel and spdk_vhost_dev. For this purpose vhost_user_process_blk_request() was created to translate from spdk_vhost_blk_task to the generic arguments. to_blk_dev() was moved further up so it can be more commonly used throughout the file. Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Change-Id: Ie61a1ae2a615c4f1a95601e533b9eec51998cd07 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12333 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Community-CI: Mellanox Build Bot Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
eb15d158d4
commit
c29112b1d7
@ -123,8 +123,32 @@ static const struct spdk_json_object_decoder rpc_construct_vhost_blk[] = {
|
||||
static const struct spdk_vhost_dev_backend vhost_blk_device_backend;
|
||||
|
||||
static int
|
||||
process_blk_request(struct spdk_vhost_blk_task *task,
|
||||
struct spdk_vhost_blk_session *bvsession);
|
||||
process_blk_request(struct spdk_vhost_dev *vdev, struct spdk_io_channel *ch,
|
||||
struct spdk_vhost_blk_task *task);
|
||||
|
||||
static int
|
||||
vhost_user_process_blk_request(struct spdk_vhost_blk_task *task)
|
||||
{
|
||||
struct spdk_vhost_blk_session *bvsession = task->bvsession;
|
||||
struct spdk_vhost_dev *vdev = &bvsession->bvdev->vdev;
|
||||
|
||||
return process_blk_request(vdev, bvsession->io_channel, task);
|
||||
}
|
||||
|
||||
static struct spdk_vhost_blk_dev *
|
||||
to_blk_dev(struct spdk_vhost_dev *vdev)
|
||||
{
|
||||
if (vdev == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (vdev->backend != &vhost_blk_device_backend) {
|
||||
SPDK_ERRLOG("%s: not a vhost-blk device\n", vdev->name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return SPDK_CONTAINEROF(vdev, struct spdk_vhost_blk_dev, vdev);
|
||||
}
|
||||
|
||||
static struct spdk_vhost_blk_session *
|
||||
to_blk_session(struct spdk_vhost_session *vsession)
|
||||
@ -423,7 +447,7 @@ blk_request_resubmit(void *arg)
|
||||
struct spdk_vhost_blk_task *task = (struct spdk_vhost_blk_task *)arg;
|
||||
int rc = 0;
|
||||
|
||||
rc = process_blk_request(task, task->bvsession);
|
||||
rc = vhost_user_process_blk_request(task);
|
||||
if (rc == 0) {
|
||||
SPDK_DEBUGLOG(vhost_blk, "====== Task %p resubmitted ======\n", task);
|
||||
} else {
|
||||
@ -450,10 +474,10 @@ blk_request_queue_io(struct spdk_vhost_blk_task *task)
|
||||
}
|
||||
|
||||
static int
|
||||
process_blk_request(struct spdk_vhost_blk_task *task,
|
||||
struct spdk_vhost_blk_session *bvsession)
|
||||
process_blk_request(struct spdk_vhost_dev *vdev, struct spdk_io_channel *ch,
|
||||
struct spdk_vhost_blk_task *task)
|
||||
{
|
||||
struct spdk_vhost_blk_dev *bvdev = bvsession->bvdev;
|
||||
struct spdk_vhost_blk_dev *bvdev = to_blk_dev(vdev);
|
||||
struct virtio_blk_outhdr req;
|
||||
struct virtio_blk_discard_write_zeroes *desc;
|
||||
struct iovec *iov;
|
||||
@ -510,12 +534,12 @@ process_blk_request(struct spdk_vhost_blk_task *task,
|
||||
|
||||
if (type == VIRTIO_BLK_T_IN) {
|
||||
task->used_len = payload_len + sizeof(*task->status);
|
||||
rc = spdk_bdev_readv(bvdev->bdev_desc, bvsession->io_channel,
|
||||
rc = spdk_bdev_readv(bvdev->bdev_desc, ch,
|
||||
&task->iovs[1], iovcnt, req.sector * 512,
|
||||
payload_len, blk_request_complete_cb, task);
|
||||
} else if (!bvdev->readonly) {
|
||||
task->used_len = sizeof(*task->status);
|
||||
rc = spdk_bdev_writev(bvdev->bdev_desc, bvsession->io_channel,
|
||||
rc = spdk_bdev_writev(bvdev->bdev_desc, ch,
|
||||
&task->iovs[1], iovcnt, req.sector * 512,
|
||||
payload_len, blk_request_complete_cb, task);
|
||||
} else {
|
||||
@ -547,7 +571,7 @@ process_blk_request(struct spdk_vhost_blk_task *task,
|
||||
return -1;
|
||||
}
|
||||
|
||||
rc = spdk_bdev_unmap(bvdev->bdev_desc, bvsession->io_channel,
|
||||
rc = spdk_bdev_unmap(bvdev->bdev_desc, ch,
|
||||
desc->sector * 512, desc->num_sectors * 512,
|
||||
blk_request_complete_cb, task);
|
||||
if (rc) {
|
||||
@ -577,7 +601,7 @@ process_blk_request(struct spdk_vhost_blk_task *task,
|
||||
(uint64_t)desc->sector * 512, (uint64_t)desc->num_sectors * 512);
|
||||
}
|
||||
|
||||
rc = spdk_bdev_write_zeroes(bvdev->bdev_desc, bvsession->io_channel,
|
||||
rc = spdk_bdev_write_zeroes(bvdev->bdev_desc, ch,
|
||||
desc->sector * 512, desc->num_sectors * 512,
|
||||
blk_request_complete_cb, task);
|
||||
if (rc) {
|
||||
@ -597,7 +621,7 @@ process_blk_request(struct spdk_vhost_blk_task *task,
|
||||
blk_request_finish(VIRTIO_BLK_S_IOERR, task);
|
||||
return -1;
|
||||
}
|
||||
rc = spdk_bdev_flush(bvdev->bdev_desc, bvsession->io_channel,
|
||||
rc = spdk_bdev_flush(bvdev->bdev_desc, ch,
|
||||
0, flush_bytes,
|
||||
blk_request_complete_cb, task);
|
||||
if (rc) {
|
||||
@ -660,7 +684,7 @@ process_blk_task(struct spdk_vhost_virtqueue *vq, uint16_t req_idx)
|
||||
return;
|
||||
}
|
||||
|
||||
if (process_blk_request(task, task->bvsession) == 0) {
|
||||
if (vhost_user_process_blk_request(task) == 0) {
|
||||
SPDK_DEBUGLOG(vhost_blk, "====== Task %p req_idx %d submitted ======\n", task,
|
||||
req_idx);
|
||||
} else {
|
||||
@ -722,7 +746,7 @@ process_packed_blk_task(struct spdk_vhost_virtqueue *vq, uint16_t req_idx)
|
||||
return;
|
||||
}
|
||||
|
||||
if (process_blk_request(task, task->bvsession) == 0) {
|
||||
if (vhost_user_process_blk_request(task) == 0) {
|
||||
SPDK_DEBUGLOG(vhost_blk, "====== Task %p req_idx %d submitted ======\n", task,
|
||||
task_idx);
|
||||
} else {
|
||||
@ -780,7 +804,7 @@ process_packed_inflight_blk_task(struct spdk_vhost_virtqueue *vq,
|
||||
return;
|
||||
}
|
||||
|
||||
if (process_blk_request(task, task->bvsession) == 0) {
|
||||
if (vhost_user_process_blk_request(task) == 0) {
|
||||
SPDK_DEBUGLOG(vhost_blk, "====== Task %p req_idx %d submitted ======\n", task,
|
||||
task_idx);
|
||||
} else {
|
||||
@ -1082,21 +1106,6 @@ vhost_blk_poller_set_interrupt_mode(struct spdk_poller *poller, void *cb_arg, bo
|
||||
vhost_user_session_set_interrupt_mode(&bvsession->vsession, interrupt_mode);
|
||||
}
|
||||
|
||||
static struct spdk_vhost_blk_dev *
|
||||
to_blk_dev(struct spdk_vhost_dev *vdev)
|
||||
{
|
||||
if (vdev == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (vdev->backend != &vhost_blk_device_backend) {
|
||||
SPDK_ERRLOG("%s: not a vhost-blk device\n", vdev->name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return SPDK_CONTAINEROF(vdev, struct spdk_vhost_blk_dev, vdev);
|
||||
}
|
||||
|
||||
static int
|
||||
vhost_session_bdev_resize_cb(struct spdk_vhost_dev *vdev,
|
||||
struct spdk_vhost_session *vsession,
|
||||
|
Loading…
Reference in New Issue
Block a user