tcm_fc: Simplify ft_send_work for tmr path
authorAndy Grover <agrover@redhat.com>
Thu, 9 Feb 2012 06:42:33 +0000 (06:42 +0000)
committerNicholas Bellinger <nab@linux-iscsi.org>
Sat, 25 Feb 2012 22:37:47 +0000 (14:37 -0800)
Check fc_tm_flags early and call ft_send_tm() right away. Don't need to
set local vars for tm case.

data_len local var now unneeded, remove.

Signed-off-by: Andy Grover <agrover@redhat.com>
Cc: Kiran Patil <kiran.patil@intel.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/tcm_fc/tfc_cmd.c

index c5f5bb2..6b8d854 100644 (file)
@@ -536,7 +536,6 @@ static void ft_send_work(struct work_struct *work)
        struct fc_frame_header *fh = fc_frame_header_get(cmd->req_frame);
        struct fcp_cmnd *fcp;
        int data_dir = 0;
-       u32 data_len;
        int task_attr;
 
        fcp = fc_frame_payload_get(cmd->req_frame, sizeof(*fcp));
@@ -546,47 +545,6 @@ static void ft_send_work(struct work_struct *work)
        if (fcp->fc_flags & FCP_CFL_LEN_MASK)
                goto err;               /* not handling longer CDBs yet */
 
-       if (fcp->fc_tm_flags) {
-               task_attr = FCP_PTA_SIMPLE;
-               data_dir = DMA_NONE;
-               data_len = 0;
-       } else {
-               switch (fcp->fc_flags & (FCP_CFL_RDDATA | FCP_CFL_WRDATA)) {
-               case 0:
-                       data_dir = DMA_NONE;
-                       break;
-               case FCP_CFL_RDDATA:
-                       data_dir = DMA_FROM_DEVICE;
-                       break;
-               case FCP_CFL_WRDATA:
-                       data_dir = DMA_TO_DEVICE;
-                       break;
-               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;
-               }
-
-
-               task_attr = fcp->fc_pri_ta & FCP_PTA_MASK;
-               data_len = ntohl(fcp->fc_dl);
-               cmd->cdb = fcp->fc_cdb;
-       }
        /*
         * Check for FCP task management flags
         */
@@ -594,6 +552,40 @@ static void ft_send_work(struct work_struct *work)
                ft_send_tm(cmd);
                return;
        }
+
+       switch (fcp->fc_flags & (FCP_CFL_RDDATA | FCP_CFL_WRDATA)) {
+       case 0:
+               data_dir = DMA_NONE;
+               break;
+       case FCP_CFL_RDDATA:
+               data_dir = DMA_FROM_DEVICE;
+               break;
+       case FCP_CFL_WRDATA:
+               data_dir = DMA_TO_DEVICE;
+               break;
+       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;
+       }
+
+       cmd->cdb = fcp->fc_cdb;
+
        fc_seq_exch(cmd->seq)->lp->tt.seq_set_resp(cmd->seq, ft_recv_seq, cmd);
        /*
         * Use a single se_cmd->cmd_kref as we expect to release se_cmd
@@ -601,7 +593,7 @@ static void ft_send_work(struct work_struct *work)
         */
        target_submit_cmd(&cmd->se_cmd, cmd->sess->se_sess, cmd->cdb,
                        &cmd->ft_sense_buffer[0], scsilun_to_int(&fcp->fc_lun),
-                       data_len, task_attr, data_dir, 0);
+                       ntohl(fcp->fc_dl), task_attr, data_dir, 0);
        pr_debug("r_ctl %x alloc target_submit_cmd\n", fh->fh_r_ctl);
        return;