[SCSI] target: Convert TASK_ATTR to scsi_tcq.h definitions
authorNicholas Bellinger <nab@linux-iscsi.org>
Fri, 20 May 2011 03:19:14 +0000 (20:19 -0700)
committerNicholas Bellinger <nab@linux-iscsi.org>
Fri, 27 May 2011 11:49:49 +0000 (11:49 +0000)
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>
drivers/target/loopback/tcm_loop.c
drivers/target/target_core_pscsi.c
drivers/target/target_core_transport.c
drivers/target/tcm_fc/tfc_cmd.c
include/scsi/scsi_tcq.h

index 09681bafe10d7e134abe49ae942d47b5b89ae090..dee2a2c909f5386671f593428cbfa837f37e65a6 100644 (file)
@@ -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
index 7ff6a35f26ac338e93e4867e8c8d9fd4de40e143..331d423fd0e085bbc65949201661ddbfd06fca91 100644 (file)
@@ -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;
index beaf8fa891246e3fb966de948b9237ab9639c6c3..5b1ce81e3aa7569a01d332099ad12248f0b404b0 100644 (file)
@@ -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);
index 49e51778f7335a88bed41a39c410fc43f3d478a9..c056a1132ae133a5836613bb357ee24badfc3202 100644 (file)
@@ -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;
index d6e7994aa634666f1ff072bf2fa96220d4b7e19f..81dd12edc38c4e7fb5d3699a088bbec88eb2d1f7 100644 (file)
@@ -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 */