if (hdr->flags & ISCSI_FLAG_CMD_FINAL)
                                iscsit_stop_dataout_timer(cmd);
 
-                       transport_check_aborted_status(se_cmd,
-                                       (hdr->flags & ISCSI_FLAG_CMD_FINAL));
                        return iscsit_dump_data_payload(conn, payload_length, 1);
                }
        } else {
                 * TASK_ABORTED status.
                 */
                if (se_cmd->transport_state & CMD_T_ABORTED) {
-                       if (hdr->flags & ISCSI_FLAG_CMD_FINAL)
-                               if (--cmd->outstanding_r2ts < 1) {
-                                       iscsit_stop_dataout_timer(cmd);
-                                       transport_check_aborted_status(
-                                                       se_cmd, 1);
-                               }
+                       if (hdr->flags & ISCSI_FLAG_CMD_FINAL &&
+                           --cmd->outstanding_r2ts < 1)
+                               iscsit_stop_dataout_timer(cmd);
 
                        return iscsit_dump_data_payload(conn, payload_length, 1);
                }
 
                                return 0;
                        }
                        spin_unlock_bh(&cmd->istate_lock);
-                       /*
-                        * Determine if delayed TASK_ABORTED status for WRITEs
-                        * should be sent now if no unsolicited data out
-                        * payloads are expected, or if the delayed status
-                        * should be sent after unsolicited data out with
-                        * ISCSI_FLAG_CMD_FINAL set in iscsi_handle_data_out()
-                        */
-                       if (transport_check_aborted_status(se_cmd,
-                                       (cmd->unsolicited_data == 0)) != 0)
+                       if (cmd->se_cmd.transport_state & CMD_T_ABORTED)
                                return 0;
-                       /*
-                        * Otherwise send CHECK_CONDITION and sense for
-                        * exception
-                        */
                        return transport_send_check_condition_and_sense(se_cmd,
                                        cmd->sense_reason, 0);
                }
 
                        if (!(cmd->cmd_flags &
                                        ICF_NON_IMMEDIATE_UNSOLICITED_DATA)) {
-                               /*
-                                * Send the delayed TASK_ABORTED status for
-                                * WRITEs if no more unsolicitied data is
-                                * expected.
-                                */
-                               if (transport_check_aborted_status(se_cmd, 1)
-                                               != 0)
+                               if (cmd->se_cmd.transport_state & CMD_T_ABORTED)
                                        return 0;
 
                                iscsit_set_dataout_sequence_values(cmd);
 
                if ((cmd->data_direction == DMA_TO_DEVICE) &&
                    !(cmd->cmd_flags & ICF_NON_IMMEDIATE_UNSOLICITED_DATA)) {
-                       /*
-                        * Send the delayed TASK_ABORTED status for WRITEs if
-                        * no more nsolicitied data is expected.
-                        */
-                       if (transport_check_aborted_status(se_cmd, 1) != 0)
+                       if (cmd->se_cmd.transport_state & CMD_T_ABORTED)
                                return 0;
 
                        iscsit_set_unsoliticed_dataout(cmd);
 
                printk("ABORT_TASK: Found referenced %s task_tag: %llu\n",
                        se_cmd->se_tfo->fabric_name, ref_tag);
 
-               if (!__target_check_io_state(se_cmd, se_sess, 0))
+               if (!__target_check_io_state(se_cmd, se_sess,
+                                            dev->dev_attrib.emulate_tas))
                        continue;
 
                spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
 
        if (cmd->transport_complete_callback)
                cmd->transport_complete_callback(cmd, false, NULL);
 
-       if (transport_check_aborted_status(cmd, 1))
+       if (cmd->transport_state & CMD_T_ABORTED)
                return;
 
        switch (sense_reason) {
        return true;
 }
 
-static int __transport_check_aborted_status(struct se_cmd *, int);
-
 void target_execute_cmd(struct se_cmd *cmd)
 {
        /*
         * If the received CDB has already been aborted stop processing it here.
         */
        spin_lock_irq(&cmd->t_state_lock);
-       if (__transport_check_aborted_status(cmd, 1)) {
+       if (cmd->transport_state & CMD_T_ABORTED) {
                spin_unlock_irq(&cmd->t_state_lock);
                return;
        }
 }
 EXPORT_SYMBOL(transport_send_check_condition_and_sense);
 
-static int __transport_check_aborted_status(struct se_cmd *cmd, int send_status)
-       __releases(&cmd->t_state_lock)
-       __acquires(&cmd->t_state_lock)
-{
-       int ret;
-
-       assert_spin_locked(&cmd->t_state_lock);
-       WARN_ON_ONCE(!irqs_disabled());
-
-       if (!(cmd->transport_state & CMD_T_ABORTED))
-               return 0;
-       /*
-        * If cmd has been aborted but either no status is to be sent or it has
-        * already been sent, just return
-        */
-       if (!send_status || !(cmd->se_cmd_flags & SCF_SEND_DELAYED_TAS)) {
-               if (send_status)
-                       cmd->se_cmd_flags |= SCF_SEND_DELAYED_TAS;
-               return 1;
-       }
-
-       pr_debug("Sending delayed SAM_STAT_TASK_ABORTED status for CDB:"
-               " 0x%02x ITT: 0x%08llx\n", cmd->t_task_cdb[0], cmd->tag);
-
-       cmd->se_cmd_flags &= ~SCF_SEND_DELAYED_TAS;
-       cmd->scsi_status = SAM_STAT_TASK_ABORTED;
-       trace_target_cmd_complete(cmd);
-
-       spin_unlock_irq(&cmd->t_state_lock);
-       ret = cmd->se_tfo->queue_status(cmd);
-       if (ret)
-               transport_handle_queue_full(cmd, cmd->se_dev, ret, false);
-       spin_lock_irq(&cmd->t_state_lock);
-
-       return 1;
-}
-
-int transport_check_aborted_status(struct se_cmd *cmd, int send_status)
-{
-       int ret;
-
-       spin_lock_irq(&cmd->t_state_lock);
-       ret = __transport_check_aborted_status(cmd, send_status);
-       spin_unlock_irq(&cmd->t_state_lock);
-
-       return ret;
-}
-EXPORT_SYMBOL(transport_check_aborted_status);
-
 void transport_send_task_abort(struct se_cmd *cmd)
 {
        unsigned long flags;
 
        SCF_SENT_CHECK_CONDITION        = 0x00000800,
        SCF_OVERFLOW_BIT                = 0x00001000,
        SCF_UNDERFLOW_BIT               = 0x00002000,
-       SCF_SEND_DELAYED_TAS            = 0x00004000,
        SCF_ALUA_NON_OPTIMIZED          = 0x00008000,
        SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC = 0x00020000,
        SCF_COMPARE_AND_WRITE           = 0x00080000,
 
 int    transport_generic_free_cmd(struct se_cmd *, int);
 
 bool   transport_wait_for_tasks(struct se_cmd *);
-int    transport_check_aborted_status(struct se_cmd *, int);
 int    transport_send_check_condition_and_sense(struct se_cmd *,
                sense_reason_t, int);
 int    target_get_sess_cmd(struct se_cmd *, bool);