[SCSI] qla2xxx: Disable port-type RSCN handling via driver state-machine.

Given the semantic changes in both the device-model and
fc-transport APIs, the driver's handling of port-type RSCNs
via a series of ADISCs and PLOGIs can cause series of
badness ranging from unexpectedly device loss to devices not
being discovered.

In the interim, disable (via a module-parameter) this
feature and allow RSCN management to continue to occur
within the driver's DPC thread.

Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>

authored by andrew.vasquez@qlogic.com and committed by James Bottomley 79f89a42 fdd52dfa

+11 -2
+1
drivers/scsi/qla2xxx/qla_gbl.h
··· 62 extern int ql2xplogiabsentdevice; 63 extern int ql2xloginretrycount; 64 extern int ql2xfdmienable; 65 66 extern void qla2x00_sp_compl(scsi_qla_host_t *, srb_t *); 67
··· 62 extern int ql2xplogiabsentdevice; 63 extern int ql2xloginretrycount; 64 extern int ql2xfdmienable; 65 + extern int ql2xprocessrscn; 66 67 extern void qla2x00_sp_compl(scsi_qla_host_t *, srb_t *); 68
+2 -1
drivers/scsi/qla2xxx/qla_init.c
··· 2653 2654 switch (format) { 2655 case 0: 2656 - if (!IS_QLA2100(ha) && !IS_QLA2200(ha) && 2657 !IS_QLA6312(ha) && !IS_QLA6322(ha) && 2658 !IS_QLA24XX(ha) && !IS_QLA25XX(ha) && 2659 ha->flags.init_done) {
··· 2653 2654 switch (format) { 2655 case 0: 2656 + if (ql2xprocessrscn && 2657 + !IS_QLA2100(ha) && !IS_QLA2200(ha) && 2658 !IS_QLA6312(ha) && !IS_QLA6322(ha) && 2659 !IS_QLA24XX(ha) && !IS_QLA25XX(ha) && 2660 ha->flags.init_done) {
+2 -1
drivers/scsi/qla2xxx/qla_isr.c
··· 519 * us, create a new entry in our rscn fcports list and handle 520 * the event like an RSCN. 521 */ 522 - if (!IS_QLA2100(ha) && !IS_QLA2200(ha) && !IS_QLA6312(ha) && 523 !IS_QLA6322(ha) && !IS_QLA24XX(ha) && !IS_QLA25XX(ha) && 524 ha->flags.init_done && mb[1] != 0xffff && 525 ((ha->operating_mode == P2P && mb[1] != 0) ||
··· 519 * us, create a new entry in our rscn fcports list and handle 520 * the event like an RSCN. 521 */ 522 + if (ql2xprocessrscn && 523 + !IS_QLA2100(ha) && !IS_QLA2200(ha) && !IS_QLA6312(ha) && 524 !IS_QLA6322(ha) && !IS_QLA24XX(ha) && !IS_QLA25XX(ha) && 525 ha->flags.init_done && mb[1] != 0xffff && 526 ((ha->operating_mode == P2P && mb[1] != 0) ||
+6
drivers/scsi/qla2xxx/qla_os.c
··· 71 "Enables FDMI registratons " 72 "Default is 0 - no FDMI. 1 - perfom FDMI."); 73 74 /* 75 * SCSI host template entry points 76 */
··· 71 "Enables FDMI registratons " 72 "Default is 0 - no FDMI. 1 - perfom FDMI."); 73 74 + int ql2xprocessrscn; 75 + module_param(ql2xprocessrscn, int, S_IRUGO|S_IRUSR); 76 + MODULE_PARM_DESC(ql2xprocessrscn, 77 + "Option to enable port RSCN handling via a series of less" 78 + "fabric intrusive ADISCs and PLOGIs."); 79 + 80 /* 81 * SCSI host template entry points 82 */