Nicholas Bellinger 5f572526a1 qla2xxx: Fix incorrect tcm_qla2xxx_free_cmd use during TMR ABORT
This patch drops two incorrect usages of tcm_qla2xxx_free_cmd()
during TMR ABORT within tcm_qla2xxx_handle_data_work() and
tcm_qla2xxx_aborted_task(), which where attempting to dispatch
into workqueue context to do tcm_qla2xxx_complete_free() and
subsequently invoke transport_generic_free_cmd().

This is incorrect because during TMR ABORT target-core will
drop the outstanding se_cmd->cmd_kref references once it has
quiesced the se_cmd via transport_wait_for_tasks(), and in
the case of qla2xxx it should not attempt to do it's own
transport_generic_free_cmd() once the abort has occured.

As reported by Pascal, this was originally manifesting as a
BUG_ON(cmd->cmd_in_wq) in qlt_free_cmd() during TMR ABORT,
with a LIO backend that had sufficently high enough WRITE
latency to trigger a host side TMR ABORT_TASK.

In addition, for the case in tcm_qla2xxx_write_pending_status()
and tcm_qla2xxx_handle_data_work() that waits for outstanding
FCP WRITE data transfer to complete before preceeding with a
TMR ABORT, avoid se_cmd->t_transport_stop_comp that is already
used by transport_wait_for_tasks() and use a qla2xxx internal
struct completion instead.

Reported-by: Pascal de Bruijn <p.debruijn@unilogic.nl>
Tested-by: Pascal de Bruijn <p.debruijn@unilogic.nl>
Acked-by: Himanshu Madhani <himanshu.madhani@cavium.com>
Cc: Quinn Tran <quinn.tran@cavium.com>
Cc: <stable@vger.kernel.org> # 3.10+
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
2017-07-06 23:11:35 -07:00
..
2017-05-04 12:19:44 -07:00
2017-05-04 12:19:44 -07:00
2017-05-04 12:19:44 -07:00
2017-05-04 12:19:44 -07:00
2017-05-04 19:15:35 -07:00
2017-05-04 12:19:44 -07:00
2017-05-04 12:19:44 -07:00
2017-05-04 12:19:44 -07:00
2017-05-04 12:19:44 -07:00
2015-04-17 10:13:56 -07:00
2015-11-25 22:08:55 -05:00
2016-05-10 22:01:07 -04:00
2015-11-09 17:11:57 -08:00
2015-11-09 16:32:14 -08:00
2017-05-04 12:19:44 -07:00
2017-03-15 13:37:10 -04:00
2016-02-25 21:10:53 -05:00
2017-05-04 12:19:44 -07:00
2017-03-23 12:04:05 -04:00
2016-01-27 20:36:10 +08:00
2016-01-27 20:36:10 +08:00
2017-05-04 12:19:44 -07:00
2017-05-04 12:19:44 -07:00
2017-04-26 15:09:04 -06:00
2016-02-23 21:27:02 -05:00
2016-11-28 15:51:31 -05:00
2017-05-04 12:19:44 -07:00
2017-04-13 13:58:20 -04:00
2017-05-04 12:19:44 -07:00
2017-05-04 12:19:44 -07:00
2017-01-31 14:00:34 -07:00
2017-05-04 12:19:44 -07:00
2017-05-04 12:19:44 -07:00
2017-05-04 12:19:44 -07:00
2017-05-04 12:19:44 -07:00
2016-02-23 21:27:02 -05:00
2017-04-07 17:07:14 -04:00
2015-11-18 11:59:09 -05:00
2017-04-26 18:32:29 -04:00
2017-05-04 12:19:44 -07:00
2017-02-21 11:51:42 -08:00
2017-03-15 19:27:46 -04:00