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>
 extern int ql2xplogiabsentdevice;
 extern int ql2xloginretrycount;
 extern int ql2xfdmienable;
+extern int ql2xprocessrscn;
 
 extern void qla2x00_sp_compl(scsi_qla_host_t *, srb_t *);
 
 
 
                switch (format) {
                case 0:
-                       if (!IS_QLA2100(ha) && !IS_QLA2200(ha) &&
+                       if (ql2xprocessrscn &&
+                           !IS_QLA2100(ha) && !IS_QLA2200(ha) &&
                            !IS_QLA6312(ha) && !IS_QLA6322(ha) &&
                            !IS_QLA24XX(ha) && !IS_QLA25XX(ha) &&
                            ha->flags.init_done) {
 
                 * us, create a new entry in our rscn fcports list and handle
                 * the event like an RSCN.
                 */
-               if (!IS_QLA2100(ha) && !IS_QLA2200(ha) && !IS_QLA6312(ha) &&
+               if (ql2xprocessrscn &&
+                   !IS_QLA2100(ha) && !IS_QLA2200(ha) && !IS_QLA6312(ha) &&
                    !IS_QLA6322(ha) && !IS_QLA24XX(ha) && !IS_QLA25XX(ha) &&
                    ha->flags.init_done && mb[1] != 0xffff &&
                    ((ha->operating_mode == P2P && mb[1] != 0) ||
 
                "Enables FDMI registratons "
                "Default is 0 - no FDMI. 1 - perfom FDMI.");
 
+int ql2xprocessrscn;
+module_param(ql2xprocessrscn, int, S_IRUGO|S_IRUSR);
+MODULE_PARM_DESC(ql2xprocessrscn,
+               "Option to enable port RSCN handling via a series of less"
+               "fabric intrusive ADISCs and PLOGIs.");
+
 /*
  * SCSI host template entry points
  */