Hi Nic, > On Mar 31, 2017, at 12:45 AM, Nicholas A. Bellinger <nab@xxxxxxxxxxxxxxx> wrote: > > Hi Quinn & Himanshu, > > On Fri, 2017-03-24 at 08:51 +0100, gregkh@xxxxxxxxxxxxxxxxxxx wrote: >> The patch below does not apply to the 4.10-stable tree. >> If someone wants it applied there, or to any other stable or longterm >> tree, then please email the backport, including the original git commit >> id to <stable@xxxxxxxxxxxxxxx>. >> >> thanks, >> >> greg k-h > > This looks like a pretty somple backport to v4.10.y stable code. > > Can someone send out an updated version to Greg-KH + stable team so it > can be picked up for v4.10.y and earlier stable releases..? > I had sent back port to Greg, but the patch which introduced issue https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/scsi/qla2xxx?id=41dc529a4602ac737020f423f84686a81de38e6d was not present in 4.10.x stable yet. So we do not need to back port this patch to stable. > Thank you, > >> >> ------------------ original commit in Linus's tree ------------------ >> >> From 8f6fc8d4e7ae2347d6261d11a7eb2b247d2954d8 Mon Sep 17 00:00:00 2001 >> From: Quinn Tran <quinn.tran@xxxxxxxxxx> >> Date: Wed, 15 Mar 2017 09:48:46 -0700 >> Subject: [PATCH] qla2xxx: Fix inadequate lock protection for ABTS. >> >> Normally, ABTS is sent to Target Core as Task MGMT command. >> In the case of error, qla2xxx needs to send response, hardware_lock >> is required to prevent request queue corruption. >> >> Cc: <stable@xxxxxxxxxxxxxxx> >> Signed-off-by: Quinn Tran <quinn.tran@xxxxxxxxxx> >> Signed-off-by: Himanshu Madhani <himanshu.madhani@xxxxxxxxxx> >> Signed-off-by: Nicholas Bellinger <nab@xxxxxxxxxxxxxxx> >> >> diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c >> index a463bcc57902..a78c3e9bcb57 100644 >> --- a/drivers/scsi/qla2xxx/qla_target.c >> +++ b/drivers/scsi/qla2xxx/qla_target.c >> @@ -130,6 +130,9 @@ static void qlt_send_term_imm_notif(struct scsi_qla_host *vha, >> static struct fc_port *qlt_create_sess(struct scsi_qla_host *vha, >> fc_port_t *fcport, bool local); >> void qlt_unreg_sess(struct fc_port *sess); >> +static void qlt_24xx_handle_abts(struct scsi_qla_host *, >> + struct abts_recv_from_24xx *); >> + >> /* >> * Global Variables >> */ >> @@ -389,6 +392,8 @@ static bool qlt_24xx_atio_pkt_all_vps(struct scsi_qla_host *vha, >> (struct abts_recv_from_24xx *)atio; >> struct scsi_qla_host *host = qlt_find_host_by_vp_idx(vha, >> entry->vp_index); >> + unsigned long flags; >> + >> if (unlikely(!host)) { >> ql_dbg(ql_dbg_tgt, vha, 0xffff, >> "qla_target(%d): Response pkt (ABTS_RECV_24XX) " >> @@ -396,9 +401,12 @@ static bool qlt_24xx_atio_pkt_all_vps(struct scsi_qla_host *vha, >> vha->vp_idx, entry->vp_index); >> break; >> } >> - qlt_response_pkt(host, (response_t *)atio); >> + if (!ha_locked) >> + spin_lock_irqsave(&host->hw->hardware_lock, flags); >> + qlt_24xx_handle_abts(host, (struct abts_recv_from_24xx *)atio); >> + if (!ha_locked) >> + spin_unlock_irqrestore(&host->hw->hardware_lock, flags); >> break; >> - >> } >> >> /* case PUREX_IOCB_TYPE: ql2xmvasynctoatio */ >> > > Thanks, - Himanshu