Commit 56bec314 authored by Nicholas Bellinger's avatar Nicholas Bellinger Committed by Luis Henriques

vhost-scsi: Add missing virtio-scsi -> TCM attribute conversion

commit 46243860 upstream.

While looking at hch's recent conversion to drop the MSG_*_TAG
definitions, I noticed a long standing bug in vhost-scsi where
the VIRTIO_SCSI_S_* attribute definitions where incorrectly
being passed directly into target_submit_cmd_map_sgls().

This patch adds the missing virtio-scsi to TCM/SAM task attribute
conversion.

Cc: Christoph Hellwig <hch@lst.de>
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
[ luis: backported to 3.16:
  - replaced TCM_*_TAG by MSG_*_TAG ]
Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
parent 29689546
...@@ -909,6 +909,23 @@ vhost_scsi_map_iov_to_prot(struct tcm_vhost_cmd *cmd, ...@@ -909,6 +909,23 @@ vhost_scsi_map_iov_to_prot(struct tcm_vhost_cmd *cmd,
return 0; return 0;
} }
static int vhost_scsi_to_tcm_attr(int attr)
{
switch (attr) {
case VIRTIO_SCSI_S_SIMPLE:
return MSG_SIMPLE_TAG;
case VIRTIO_SCSI_S_ORDERED:
return MSG_ORDERED_TAG;
case VIRTIO_SCSI_S_HEAD:
return MSG_HEAD_TAG;
case VIRTIO_SCSI_S_ACA:
return MSG_ACA_TAG;
default:
break;
}
return MSG_SIMPLE_TAG;
}
static void tcm_vhost_submission_work(struct work_struct *work) static void tcm_vhost_submission_work(struct work_struct *work)
{ {
struct tcm_vhost_cmd *cmd = struct tcm_vhost_cmd *cmd =
...@@ -934,9 +951,10 @@ static void tcm_vhost_submission_work(struct work_struct *work) ...@@ -934,9 +951,10 @@ static void tcm_vhost_submission_work(struct work_struct *work)
rc = target_submit_cmd_map_sgls(se_cmd, tv_nexus->tvn_se_sess, rc = target_submit_cmd_map_sgls(se_cmd, tv_nexus->tvn_se_sess,
cmd->tvc_cdb, &cmd->tvc_sense_buf[0], cmd->tvc_cdb, &cmd->tvc_sense_buf[0],
cmd->tvc_lun, cmd->tvc_exp_data_len, cmd->tvc_lun, cmd->tvc_exp_data_len,
cmd->tvc_task_attr, cmd->tvc_data_direction, vhost_scsi_to_tcm_attr(cmd->tvc_task_attr),
TARGET_SCF_ACK_KREF, sg_ptr, cmd->tvc_sgl_count, cmd->tvc_data_direction, TARGET_SCF_ACK_KREF,
NULL, 0, sg_prot_ptr, cmd->tvc_prot_sgl_count); sg_ptr, cmd->tvc_sgl_count, NULL, 0, sg_prot_ptr,
cmd->tvc_prot_sgl_count);
if (rc < 0) { if (rc < 0) {
transport_send_check_condition_and_sense(se_cmd, transport_send_check_condition_and_sense(se_cmd,
TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE, 0); TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE, 0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment