return 1;
 }
 
-static void tcm_loop_new_cmd_failure(struct se_cmd *se_cmd)
-{
-       /*
-        * Since TCM_loop is already passing struct scatterlist data from
-        * struct scsi_cmnd, no more Linux/SCSI failure dependent state need
-        * to be handled here.
-        */
-       return;
-}
-
 static int tcm_loop_is_state_remove(struct se_cmd *se_cmd)
 {
        /*
                                        &tcm_loop_set_default_node_attributes;
        fabric->tf_ops.get_task_tag = &tcm_loop_get_task_tag;
        fabric->tf_ops.get_cmd_state = &tcm_loop_get_cmd_state;
-       fabric->tf_ops.new_cmd_failure = &tcm_loop_new_cmd_failure;
        fabric->tf_ops.queue_data_in = &tcm_loop_queue_data_in;
        fabric->tf_ops.queue_status = &tcm_loop_queue_status;
        fabric->tf_ops.queue_tm_rsp = &tcm_loop_queue_tm_rsp;
 
                printk(KERN_ERR "Missing tfo->get_cmd_state()\n");
                return -EINVAL;
        }
-       if (!(tfo->new_cmd_failure)) {
-               printk(KERN_ERR "Missing tfo->new_cmd_failure()\n");
-               return -EINVAL;
-       }
        if (!(tfo->queue_data_in)) {
                printk(KERN_ERR "Missing tfo->queue_data_in()\n");
                return -EINVAL;
 
                        atomic_read(&cmd->t_fe_count));
                /*
                 * Signal that the command has failed via cmd->se_cmd_flags,
-                * and call TFO->new_cmd_failure() to wakeup any fabric
-                * dependent code used to wait for unsolicited data out
-                * allocation to complete.  The fabric module is expected
-                * to dump any remaining unsolicited data out for the aborted
-                * command at this point.
                 */
                transport_new_cmd_failure(cmd);
 
 
        se_cmd->se_cmd_flags |= SCF_SE_CMD_FAILED;
        se_cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION;
        spin_unlock_irqrestore(&se_cmd->t_state_lock, flags);
-
-       se_cmd->se_tfo->new_cmd_failure(se_cmd);
 }
 
 static void transport_nop_wait_for_tasks(struct se_cmd *, int, int);
 
 int ft_write_pending_status(struct se_cmd *);
 u32 ft_get_task_tag(struct se_cmd *);
 int ft_get_cmd_state(struct se_cmd *);
-void ft_new_cmd_failure(struct se_cmd *);
 int ft_queue_tm_resp(struct se_cmd *);
 int ft_is_state_remove(struct se_cmd *);
 
 
        return 0;       /* XXX TBD */
 }
 
-void ft_new_cmd_failure(struct se_cmd *se_cmd)
-{
-       /* XXX TBD */
-       printk(KERN_INFO "%s: se_cmd %p\n", __func__, se_cmd);
-}
-
 /*
  * FC sequence response handler for follow-on sequences (data) and aborts.
  */
 
        .set_default_node_attributes =  ft_set_default_node_attr,
        .get_task_tag =                 ft_get_task_tag,
        .get_cmd_state =                ft_get_cmd_state,
-       .new_cmd_failure =              ft_new_cmd_failure,
        .queue_data_in =                ft_queue_data_in,
        .queue_status =                 ft_queue_status,
        .queue_tm_rsp =                 ft_queue_tm_resp,
 
        void (*set_default_node_attributes)(struct se_node_acl *);
        u32 (*get_task_tag)(struct se_cmd *);
        int (*get_cmd_state)(struct se_cmd *);
-       void (*new_cmd_failure)(struct se_cmd *);
        int (*queue_data_in)(struct se_cmd *);
        int (*queue_status)(struct se_cmd *);
        int (*queue_tm_rsp)(struct se_cmd *);