[SCSI] target: Convert TASK_ATTR to scsi_tcq.h definitions
This patch converts target core and follwing scsi-misc upstream fabric modules to use include/scsi/scsi_tcq.h includes for SIMPLE, HEAD_OF_QUEUE and ORDERED SCSI tasks instead of scsi/libsas.h with TASK_ATTR* *) tcm_loop: Convert tcm_loop_allocate_core_cmd() + tcm_loop_device_reset() to scsi_tcq.h *) tcm_fc: Convert ft_send_cmd() from FCP_PTA_* to scsi_tcq.h Reported-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: Nicholas A. Bellinger <nab@linux-iscsi.org> Signed-off-by: James Bottomley <jbottomley@parallels.com>
This commit is contained in:
Родитель
1078da163f
Коммит
61db1802bf
|
@ -31,7 +31,7 @@
|
|||
#include <scsi/scsi_host.h>
|
||||
#include <scsi/scsi_device.h>
|
||||
#include <scsi/scsi_cmnd.h>
|
||||
#include <scsi/libsas.h> /* For TASK_ATTR_* */
|
||||
#include <scsi/scsi_tcq.h>
|
||||
|
||||
#include <target/target_core_base.h>
|
||||
#include <target/target_core_transport.h>
|
||||
|
@ -95,17 +95,17 @@ static struct se_cmd *tcm_loop_allocate_core_cmd(
|
|||
if (sc->device->tagged_supported) {
|
||||
switch (sc->tag) {
|
||||
case HEAD_OF_QUEUE_TAG:
|
||||
sam_task_attr = TASK_ATTR_HOQ;
|
||||
sam_task_attr = MSG_HEAD_TAG;
|
||||
break;
|
||||
case ORDERED_QUEUE_TAG:
|
||||
sam_task_attr = TASK_ATTR_ORDERED;
|
||||
sam_task_attr = MSG_ORDERED_TAG;
|
||||
break;
|
||||
default:
|
||||
sam_task_attr = TASK_ATTR_SIMPLE;
|
||||
sam_task_attr = MSG_SIMPLE_TAG;
|
||||
break;
|
||||
}
|
||||
} else
|
||||
sam_task_attr = TASK_ATTR_SIMPLE;
|
||||
sam_task_attr = MSG_SIMPLE_TAG;
|
||||
|
||||
/*
|
||||
* Initialize struct se_cmd descriptor from target_core_mod infrastructure
|
||||
|
@ -379,7 +379,7 @@ static int tcm_loop_device_reset(struct scsi_cmnd *sc)
|
|||
* Initialize struct se_cmd descriptor from target_core_mod infrastructure
|
||||
*/
|
||||
transport_init_se_cmd(se_cmd, se_tpg->se_tpg_tfo, se_sess, 0,
|
||||
DMA_NONE, TASK_ATTR_SIMPLE,
|
||||
DMA_NONE, MSG_SIMPLE_TAG,
|
||||
&tl_cmd->tl_sense_buf[0]);
|
||||
/*
|
||||
* Allocate the LUN_RESET TMR
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
#include <scsi/scsi_device.h>
|
||||
#include <scsi/scsi_cmnd.h>
|
||||
#include <scsi/scsi_host.h>
|
||||
#include <scsi/libsas.h> /* For TASK_ATTR_* */
|
||||
#include <scsi/scsi_tcq.h>
|
||||
|
||||
#include <target/target_core_base.h>
|
||||
#include <target/target_core_device.h>
|
||||
|
@ -911,7 +911,7 @@ static int pscsi_do_task(struct se_task *task)
|
|||
* descriptor
|
||||
*/
|
||||
blk_execute_rq_nowait(pdv->pdv_sd->request_queue, NULL, pt->pscsi_req,
|
||||
(task->task_se_cmd->sam_task_attr == TASK_ATTR_HOQ),
|
||||
(task->task_se_cmd->sam_task_attr == MSG_HEAD_TAG),
|
||||
pscsi_req_done);
|
||||
|
||||
return PYX_TRANSPORT_SENT_TO_TRANSPORT;
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
#include <net/tcp.h>
|
||||
#include <scsi/scsi.h>
|
||||
#include <scsi/scsi_cmnd.h>
|
||||
#include <scsi/libsas.h> /* For TASK_ATTR_* */
|
||||
#include <scsi/scsi_tcq.h>
|
||||
|
||||
#include <target/target_core_base.h>
|
||||
#include <target/target_core_device.h>
|
||||
|
@ -1074,7 +1074,7 @@ static inline int transport_add_task_check_sam_attr(
|
|||
* head of the struct se_device->execute_task_list, and task_prev
|
||||
* after that for each subsequent task
|
||||
*/
|
||||
if (task->task_se_cmd->sam_task_attr == TASK_ATTR_HOQ) {
|
||||
if (task->task_se_cmd->sam_task_attr == MSG_HEAD_TAG) {
|
||||
list_add(&task->t_execute_list,
|
||||
(task_prev != NULL) ?
|
||||
&task_prev->t_execute_list :
|
||||
|
@ -1873,7 +1873,7 @@ static int transport_check_alloc_task_attr(struct se_cmd *cmd)
|
|||
if (SE_DEV(cmd)->dev_task_attr_type != SAM_TASK_ATTR_EMULATED)
|
||||
return 0;
|
||||
|
||||
if (cmd->sam_task_attr == TASK_ATTR_ACA) {
|
||||
if (cmd->sam_task_attr == MSG_ACA_TAG) {
|
||||
DEBUG_STA("SAM Task Attribute ACA"
|
||||
" emulation is not supported\n");
|
||||
return -1;
|
||||
|
@ -2517,7 +2517,7 @@ static inline int transport_execute_task_attr(struct se_cmd *cmd)
|
|||
* Check for the existence of HEAD_OF_QUEUE, and if true return 1
|
||||
* to allow the passed struct se_cmd list of tasks to the front of the list.
|
||||
*/
|
||||
if (cmd->sam_task_attr == TASK_ATTR_HOQ) {
|
||||
if (cmd->sam_task_attr == MSG_HEAD_TAG) {
|
||||
atomic_inc(&SE_DEV(cmd)->dev_hoq_count);
|
||||
smp_mb__after_atomic_inc();
|
||||
DEBUG_STA("Added HEAD_OF_QUEUE for CDB:"
|
||||
|
@ -2525,7 +2525,7 @@ static inline int transport_execute_task_attr(struct se_cmd *cmd)
|
|||
T_TASK(cmd)->t_task_cdb[0],
|
||||
cmd->se_ordered_id);
|
||||
return 1;
|
||||
} else if (cmd->sam_task_attr == TASK_ATTR_ORDERED) {
|
||||
} else if (cmd->sam_task_attr == MSG_ORDERED_TAG) {
|
||||
spin_lock(&SE_DEV(cmd)->ordered_cmd_lock);
|
||||
list_add_tail(&cmd->se_ordered_list,
|
||||
&SE_DEV(cmd)->ordered_cmd_list);
|
||||
|
@ -3424,7 +3424,7 @@ static int transport_generic_cmd_sequencer(
|
|||
* See spc4r17 section 5.3
|
||||
*/
|
||||
if (SE_DEV(cmd)->dev_task_attr_type == SAM_TASK_ATTR_EMULATED)
|
||||
cmd->sam_task_attr = TASK_ATTR_HOQ;
|
||||
cmd->sam_task_attr = MSG_HEAD_TAG;
|
||||
cmd->se_cmd_flags |= SCF_SCSI_CONTROL_NONSG_IO_CDB;
|
||||
break;
|
||||
case READ_BUFFER:
|
||||
|
@ -3632,7 +3632,7 @@ static int transport_generic_cmd_sequencer(
|
|||
* See spc4r17 section 5.3
|
||||
*/
|
||||
if (SE_DEV(cmd)->dev_task_attr_type == SAM_TASK_ATTR_EMULATED)
|
||||
cmd->sam_task_attr = TASK_ATTR_HOQ;
|
||||
cmd->sam_task_attr = MSG_HEAD_TAG;
|
||||
cmd->se_cmd_flags |= SCF_SCSI_CONTROL_NONSG_IO_CDB;
|
||||
break;
|
||||
default:
|
||||
|
@ -3790,21 +3790,21 @@ static void transport_complete_task_attr(struct se_cmd *cmd)
|
|||
struct se_cmd *cmd_p, *cmd_tmp;
|
||||
int new_active_tasks = 0;
|
||||
|
||||
if (cmd->sam_task_attr == TASK_ATTR_SIMPLE) {
|
||||
if (cmd->sam_task_attr == MSG_SIMPLE_TAG) {
|
||||
atomic_dec(&dev->simple_cmds);
|
||||
smp_mb__after_atomic_dec();
|
||||
dev->dev_cur_ordered_id++;
|
||||
DEBUG_STA("Incremented dev->dev_cur_ordered_id: %u for"
|
||||
" SIMPLE: %u\n", dev->dev_cur_ordered_id,
|
||||
cmd->se_ordered_id);
|
||||
} else if (cmd->sam_task_attr == TASK_ATTR_HOQ) {
|
||||
} else if (cmd->sam_task_attr == MSG_HEAD_TAG) {
|
||||
atomic_dec(&dev->dev_hoq_count);
|
||||
smp_mb__after_atomic_dec();
|
||||
dev->dev_cur_ordered_id++;
|
||||
DEBUG_STA("Incremented dev_cur_ordered_id: %u for"
|
||||
" HEAD_OF_QUEUE: %u\n", dev->dev_cur_ordered_id,
|
||||
cmd->se_ordered_id);
|
||||
} else if (cmd->sam_task_attr == TASK_ATTR_ORDERED) {
|
||||
} else if (cmd->sam_task_attr == MSG_ORDERED_TAG) {
|
||||
spin_lock(&dev->ordered_cmd_lock);
|
||||
list_del(&cmd->se_ordered_list);
|
||||
atomic_dec(&dev->dev_ordered_sync);
|
||||
|
@ -3837,7 +3837,7 @@ static void transport_complete_task_attr(struct se_cmd *cmd)
|
|||
new_active_tasks++;
|
||||
|
||||
spin_lock(&dev->delayed_cmd_lock);
|
||||
if (cmd_p->sam_task_attr == TASK_ATTR_ORDERED)
|
||||
if (cmd_p->sam_task_attr == MSG_ORDERED_TAG)
|
||||
break;
|
||||
}
|
||||
spin_unlock(&dev->delayed_cmd_lock);
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#include <scsi/scsi_host.h>
|
||||
#include <scsi/scsi_device.h>
|
||||
#include <scsi/scsi_cmnd.h>
|
||||
#include <scsi/scsi_tcq.h>
|
||||
#include <scsi/libfc.h>
|
||||
#include <scsi/fc_encode.h>
|
||||
|
||||
|
@ -592,8 +593,25 @@ static void ft_send_cmd(struct ft_cmd *cmd)
|
|||
case FCP_CFL_WRDATA | FCP_CFL_RDDATA:
|
||||
goto err; /* TBD not supported by tcm_fc yet */
|
||||
}
|
||||
/*
|
||||
* Locate the SAM Task Attr from fc_pri_ta
|
||||
*/
|
||||
switch (fcp->fc_pri_ta & FCP_PTA_MASK) {
|
||||
case FCP_PTA_HEADQ:
|
||||
task_attr = MSG_HEAD_TAG;
|
||||
break;
|
||||
case FCP_PTA_ORDERED:
|
||||
task_attr = MSG_ORDERED_TAG;
|
||||
break;
|
||||
case FCP_PTA_ACA:
|
||||
task_attr = MSG_ACA_TAG;
|
||||
break;
|
||||
case FCP_PTA_SIMPLE: /* Fallthrough */
|
||||
default:
|
||||
task_attr = MSG_SIMPLE_TAG;
|
||||
}
|
||||
|
||||
|
||||
/* FCP_PTA_ maps 1:1 to TASK_ATTR_ */
|
||||
task_attr = fcp->fc_pri_ta & FCP_PTA_MASK;
|
||||
data_len = ntohl(fcp->fc_dl);
|
||||
cmd->cdb = fcp->fc_cdb;
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#define MSG_SIMPLE_TAG 0x20
|
||||
#define MSG_HEAD_TAG 0x21
|
||||
#define MSG_ORDERED_TAG 0x22
|
||||
#define MSG_ACA_TAG 0x24 /* unsupported */
|
||||
|
||||
#define SCSI_NO_TAG (-1) /* identify no tag in use */
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче