Re: [PATCH v2 01/13] qla2xxx: relogin during fabric disturbance

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> On Oct 21, 2021, at 2:31 AM, Nilesh Javali <njavali@xxxxxxxxxxx> wrote:
> 
> From: Quinn Tran <qutran@xxxxxxxxxxx>
> 
> For RSCN of type "Area, Domain, or Fabric", which indicate
> a portion or entire fabric was disturbed. Current driver
> does not set the scan_need flag to indicate a session was
> affected by the disturbance. This in turn, can lead to
> IO timeout and delay of relogin. Hence initiate relogin
> in the event of fabric disturbance.
> 
> Fixes: 1560bafdff9e ("scsi: qla2xxx: Use complete switch scan for RSCN events")
> Signed-off-by: Quinn Tran <qutran@xxxxxxxxxxx>
> Signed-off-by: Nilesh Javali <njavali@xxxxxxxxxxx>
> ---
> drivers/scsi/qla2xxx/qla_init.c | 54 +++++++++++++++++++++++++++------
> 1 file changed, 45 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
> index a9a4243cb15a..339aa3b2737a 100644
> --- a/drivers/scsi/qla2xxx/qla_init.c
> +++ b/drivers/scsi/qla2xxx/qla_init.c
> @@ -1786,16 +1786,52 @@ void qla2x00_handle_rscn(scsi_qla_host_t *vha, struct event_arg *ea)
> 	fc_port_t *fcport;
> 	unsigned long flags;
> 
> -	fcport = qla2x00_find_fcport_by_nportid(vha, &ea->id, 1);
> -	if (fcport) {
> -		if (fcport->flags & FCF_FCP2_DEVICE) {
> -			ql_dbg(ql_dbg_disc, vha, 0x2115,
> -			       "Delaying session delete for FCP2 portid=%06x %8phC ",
> -			       fcport->d_id.b24, fcport->port_name);
> -			return;
> +	switch (ea->id.b.rsvd_1) {
> +	case RSCN_PORT_ADDR:
> +		fcport = qla2x00_find_fcport_by_nportid(vha, &ea->id, 1);
> +		if (fcport) {
> +			if (fcport->flags & FCF_FCP2_DEVICE) {
> +				ql_dbg(ql_dbg_disc, vha, 0x2115,
> +				       "Delaying session delete for FCP2 portid=%06x %8phC ",
> +					fcport->d_id.b24, fcport->port_name);
> +				return;
> +			}
> +			fcport->scan_needed = 1;
> +			fcport->rscn_gen++;
> +		}
> +		break;
> +	case RSCN_AREA_ADDR:
> +		list_for_each_entry(fcport, &vha->vp_fcports, list) {
> +			if (fcport->flags & FCF_FCP2_DEVICE)
> +				continue;
> +
> +			if ((ea->id.b24 & 0xffff00) == (fcport->d_id.b24 & 0xffff00)) {
> +				fcport->scan_needed = 1;
> +				fcport->rscn_gen++;
> +			}
> 		}
> -		fcport->scan_needed = 1;
> -		fcport->rscn_gen++;
> +		break;
> +	case RSCN_DOM_ADDR:
> +		list_for_each_entry(fcport, &vha->vp_fcports, list) {
> +			if (fcport->flags & FCF_FCP2_DEVICE)
> +				continue;
> +
> +			if ((ea->id.b24 & 0xff0000) == (fcport->d_id.b24 & 0xff0000)) {
> +				fcport->scan_needed = 1;
> +				fcport->rscn_gen++;
> +			}
> +		}
> +		break;
> +	case RSCN_FAB_ADDR:
> +	default:
> +		list_for_each_entry(fcport, &vha->vp_fcports, list) {
> +			if (fcport->flags & FCF_FCP2_DEVICE)
> +				continue;
> +
> +			fcport->scan_needed = 1;
> +			fcport->rscn_gen++;
> +		}
> +		break;
> 	}
> 
> 	spin_lock_irqsave(&vha->work_lock, flags);
> -- 
> 2.19.0.rc0
> 

Reviewed-by: Himanshu Madhani <himanshu.madhani@xxxxxxxxxx>

--
Himanshu Madhani	 Oracle Linux Engineering





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux