FAILED: patch "[PATCH] scsi: qla2xxx: Fix losing target when it reappears during" failed to apply to 5.10-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.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 <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 118b0c863c8f5629cc5271fc24d72d926e0715d9 Mon Sep 17 00:00:00 2001
From: Arun Easi <[email protected]>
Date: Wed, 15 Jun 2022 22:35:04 -0700
Subject: [PATCH] scsi: qla2xxx: Fix losing target when it reappears during
delete
FC target disappeared during port perturbation tests due to a race that tramples target state. Fix the issue by adding state checks before proceeding.
Fixes 44c57f205876 ("scsi: qla2xxx: Changes to support FCP2 Target")
Signed-off-by Arun Easi <[email protected]>
Signed-off-by Nilesh Javali <[email protected]>
Signed-off-by Martin K. Petersen <[email protected]>
drivers/scsi/qla2xxx/qla_attr.c +17 -7
@@ -2714,17 +2714,24 @@ qla2x00_dev_loss_tmo_callbk(struct fc_rport *rport)if (!fcport)return ; -/* Now that the rport has been deleted, set the fcport state to -FCS_DEVICE_DEAD */ -qla2x00_set_fcport_state (fcport,FCS_DEVICE_DEAD ); + +/* +* Now that the rport has been deleted, set the fcport state to +* FCS_DEVICE_DEAD, if the fcport is still lost. +*/ +if (fcport->scan_state !=QLA_FCPORT_FOUND ) +qla2x00_set_fcport_state (fcport,FCS_DEVICE_DEAD );/* * Transport has effectively 'deleted' the rport, clear * all local references. */ spin_lock_irqsave (host->host_lock, flags); - fcport->rport = fcport->drport =NULL ; - *((fc_port_t **)rport->dd_data) =NULL ; +/* Confirm port has not reappeared before clearing pointers. */ +if (rport->port_state !=FC_PORTSTATE_ONLINE ) { + fcport->rport = fcport->drport =NULL ; + *((fc_port_t **)rport->dd_data) =NULL ; + }spin_unlock_irqrestore (host->host_lock, flags);if (test_bit (ABORT_ISP_ACTIVE , &fcport->vha->dpc_flags))
@@ -2757,9 +2764,12 @@ qla2x00_terminate_rport_io(struct fc_rport *rport)/* * At this point all fcport's software-states are cleared. Perform any * final cleanup of firmware resources (PCBs and XCBs). +* +* Attempt to cleanup only lost devices. */ if (fcport->loop_id !=FC_NO_LOOP_ID ) { -if (IS_FWI2_CAPABLE (fcport->vha->hw)) { +if (IS_FWI2_CAPABLE (fcport->vha->hw) && + fcport->scan_state !=QLA_FCPORT_FOUND ) {if (fcport->loop_id !=FC_NO_LOOP_ID ) fcport->logout_on_delete =1 ;
@@ -2769,7 +2779,7 @@ qla2x00_terminate_rport_io(struct fc_rport *rport) __LINE__);qlt_schedule_sess_for_deletion (fcport); } - }else { + }else if (!IS_FWI2_CAPABLE (fcport->vha->hw)) {qla2x00_port_logout (fcport->vha, fcport); } }