Message ID | 20230724145156.3920244-1-maier@linux.ibm.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | zfcp: defer fc_rport blocking until after ADISC response | expand |
On Mon, 24 Jul 2023 16:51:56 +0200, Steffen Maier wrote: > Storages are free to send RSCNs, e.g. for internal state changes. If this > happens on all connected paths, zfcp risks temporarily losing all paths at > the same time. This has strong requirements on multipath configuration such > as "no_path_retry queue". > > Avoid such situations by deferring fc_rport blocking until after the ADISC > response, when any actual state change of the remote port became clear. > The already existing port recovery triggers explicitly block the fc_rport. > The triggers are: on ADISC reject or timeout (typical cable pull case), and > on ADISC indicating that the remote port has changed its WWPN or > the port is meanwhile no longer open. > > [...] Applied to 6.5/scsi-fixes, thanks! [1/1] zfcp: defer fc_rport blocking until after ADISC response https://git.kernel.org/mkp/scsi/c/e65851989001
diff --git a/drivers/s390/scsi/zfcp_fc.c b/drivers/s390/scsi/zfcp_fc.c index f21307537829..4f0d0e55f0d4 100644 --- a/drivers/s390/scsi/zfcp_fc.c +++ b/drivers/s390/scsi/zfcp_fc.c @@ -534,8 +534,7 @@ static void zfcp_fc_adisc_handler(void *data) /* re-init to undo drop from zfcp_fc_adisc() */ port->d_id = ntoh24(adisc_resp->adisc_port_id); - /* port is good, unblock rport without going through erp */ - zfcp_scsi_schedule_rport_register(port); + /* port is still good, nothing to do */ out: atomic_andnot(ZFCP_STATUS_PORT_LINK_TEST, &port->status); put_device(&port->dev); @@ -595,9 +594,6 @@ void zfcp_fc_link_test_work(struct work_struct *work) int retval; set_worker_desc("zadisc%16llx", port->wwpn); /* < WORKER_DESC_LEN=24 */ - get_device(&port->dev); - port->rport_task = RPORT_DEL; - zfcp_scsi_rport_work(&port->rport_work); /* only issue one test command at one time per port */ if (atomic_read(&port->status) & ZFCP_STATUS_PORT_LINK_TEST)