|
@@ -684,6 +684,20 @@ static void tcm_qla2xxx_queue_tm_rsp(struct se_cmd *se_cmd)
|
|
|
qlt_xmit_tm_rsp(mcmd);
|
|
|
}
|
|
|
|
|
|
+static void tcm_qla2xxx_aborted_task(struct se_cmd *se_cmd)
|
|
|
+{
|
|
|
+ struct qla_tgt_cmd *cmd = container_of(se_cmd,
|
|
|
+ struct qla_tgt_cmd, se_cmd);
|
|
|
+ struct scsi_qla_host *vha = cmd->vha;
|
|
|
+ struct qla_hw_data *ha = vha->hw;
|
|
|
+
|
|
|
+ if (!cmd->sg_mapped)
|
|
|
+ return;
|
|
|
+
|
|
|
+ pci_unmap_sg(ha->pdev, cmd->sg, cmd->sg_cnt, cmd->dma_data_direction);
|
|
|
+ cmd->sg_mapped = 0;
|
|
|
+}
|
|
|
+
|
|
|
/* Local pointer to allocated TCM configfs fabric module */
|
|
|
struct target_fabric_configfs *tcm_qla2xxx_fabric_configfs;
|
|
|
struct target_fabric_configfs *tcm_qla2xxx_npiv_fabric_configfs;
|
|
@@ -1877,6 +1891,7 @@ static struct target_core_fabric_ops tcm_qla2xxx_ops = {
|
|
|
.queue_data_in = tcm_qla2xxx_queue_data_in,
|
|
|
.queue_status = tcm_qla2xxx_queue_status,
|
|
|
.queue_tm_rsp = tcm_qla2xxx_queue_tm_rsp,
|
|
|
+ .aborted_task = tcm_qla2xxx_aborted_task,
|
|
|
/*
|
|
|
* Setup function pointers for generic logic in
|
|
|
* target_core_fabric_configfs.c
|
|
@@ -1926,6 +1941,7 @@ static struct target_core_fabric_ops tcm_qla2xxx_npiv_ops = {
|
|
|
.queue_data_in = tcm_qla2xxx_queue_data_in,
|
|
|
.queue_status = tcm_qla2xxx_queue_status,
|
|
|
.queue_tm_rsp = tcm_qla2xxx_queue_tm_rsp,
|
|
|
+ .aborted_task = tcm_qla2xxx_aborted_task,
|
|
|
/*
|
|
|
* Setup function pointers for generic logic in
|
|
|
* target_core_fabric_configfs.c
|