|
@@ -898,59 +898,45 @@ mptfc_rescan_devices(void *arg)
|
|
|
{
|
|
|
MPT_ADAPTER *ioc = (MPT_ADAPTER *)arg;
|
|
|
int ii;
|
|
|
- int work_to_do;
|
|
|
u64 pn;
|
|
|
- unsigned long flags;
|
|
|
struct mptfc_rport_info *ri;
|
|
|
|
|
|
- do {
|
|
|
- /* start by tagging all ports as missing */
|
|
|
- list_for_each_entry(ri, &ioc->fc_rports, list) {
|
|
|
- if (ri->flags & MPT_RPORT_INFO_FLAGS_REGISTERED) {
|
|
|
- ri->flags |= MPT_RPORT_INFO_FLAGS_MISSING;
|
|
|
- }
|
|
|
+ /* start by tagging all ports as missing */
|
|
|
+ list_for_each_entry(ri, &ioc->fc_rports, list) {
|
|
|
+ if (ri->flags & MPT_RPORT_INFO_FLAGS_REGISTERED) {
|
|
|
+ ri->flags |= MPT_RPORT_INFO_FLAGS_MISSING;
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- /*
|
|
|
- * now rescan devices known to adapter,
|
|
|
- * will reregister existing rports
|
|
|
- */
|
|
|
- for (ii=0; ii < ioc->facts.NumberOfPorts; ii++) {
|
|
|
- (void) mptfc_GetFcPortPage0(ioc, ii);
|
|
|
- mptfc_init_host_attr(ioc,ii); /* refresh */
|
|
|
- mptfc_GetFcDevPage0(ioc,ii,mptfc_register_dev);
|
|
|
- }
|
|
|
+ /*
|
|
|
+ * now rescan devices known to adapter,
|
|
|
+ * will reregister existing rports
|
|
|
+ */
|
|
|
+ for (ii=0; ii < ioc->facts.NumberOfPorts; ii++) {
|
|
|
+ (void) mptfc_GetFcPortPage0(ioc, ii);
|
|
|
+ mptfc_init_host_attr(ioc, ii); /* refresh */
|
|
|
+ mptfc_GetFcDevPage0(ioc, ii, mptfc_register_dev);
|
|
|
+ }
|
|
|
|
|
|
- /* delete devices still missing */
|
|
|
- list_for_each_entry(ri, &ioc->fc_rports, list) {
|
|
|
- /* if newly missing, delete it */
|
|
|
- if (ri->flags & MPT_RPORT_INFO_FLAGS_MISSING) {
|
|
|
+ /* delete devices still missing */
|
|
|
+ list_for_each_entry(ri, &ioc->fc_rports, list) {
|
|
|
+ /* if newly missing, delete it */
|
|
|
+ if (ri->flags & MPT_RPORT_INFO_FLAGS_MISSING) {
|
|
|
|
|
|
- ri->flags &= ~(MPT_RPORT_INFO_FLAGS_REGISTERED|
|
|
|
- MPT_RPORT_INFO_FLAGS_MISSING);
|
|
|
- fc_remote_port_delete(ri->rport); /* won't sleep */
|
|
|
- ri->rport = NULL;
|
|
|
+ ri->flags &= ~(MPT_RPORT_INFO_FLAGS_REGISTERED|
|
|
|
+ MPT_RPORT_INFO_FLAGS_MISSING);
|
|
|
+ fc_remote_port_delete(ri->rport); /* won't sleep */
|
|
|
+ ri->rport = NULL;
|
|
|
|
|
|
- pn = (u64)ri->pg0.WWPN.High << 32 |
|
|
|
- (u64)ri->pg0.WWPN.Low;
|
|
|
- dfcprintk ((MYIOC_s_INFO_FMT
|
|
|
- "mptfc_rescan.%d: %llx deleted\n",
|
|
|
- ioc->name,
|
|
|
- ioc->sh->host_no,
|
|
|
- (unsigned long long)pn));
|
|
|
- }
|
|
|
+ pn = (u64)ri->pg0.WWPN.High << 32 |
|
|
|
+ (u64)ri->pg0.WWPN.Low;
|
|
|
+ dfcprintk ((MYIOC_s_INFO_FMT
|
|
|
+ "mptfc_rescan.%d: %llx deleted\n",
|
|
|
+ ioc->name,
|
|
|
+ ioc->sh->host_no,
|
|
|
+ (unsigned long long)pn));
|
|
|
}
|
|
|
-
|
|
|
- /*
|
|
|
- * allow multiple passes as target state
|
|
|
- * might have changed during scan
|
|
|
- */
|
|
|
- spin_lock_irqsave(&ioc->fc_rescan_work_lock, flags);
|
|
|
- if (ioc->fc_rescan_work_count > 2) /* only need one more */
|
|
|
- ioc->fc_rescan_work_count = 2;
|
|
|
- work_to_do = --ioc->fc_rescan_work_count;
|
|
|
- spin_unlock_irqrestore(&ioc->fc_rescan_work_lock, flags);
|
|
|
- } while (work_to_do);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static int
|
|
@@ -1162,7 +1148,6 @@ mptfc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|
|
* by doing it via the workqueue, some locking is eliminated
|
|
|
*/
|
|
|
|
|
|
- ioc->fc_rescan_work_count = 1;
|
|
|
queue_work(ioc->fc_rescan_work_q, &ioc->fc_rescan_work);
|
|
|
flush_workqueue(ioc->fc_rescan_work_q);
|
|
|
|
|
@@ -1205,10 +1190,8 @@ mptfc_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply)
|
|
|
case MPI_EVENT_RESCAN:
|
|
|
spin_lock_irqsave(&ioc->fc_rescan_work_lock, flags);
|
|
|
if (ioc->fc_rescan_work_q) {
|
|
|
- if (ioc->fc_rescan_work_count++ == 0) {
|
|
|
- queue_work(ioc->fc_rescan_work_q,
|
|
|
- &ioc->fc_rescan_work);
|
|
|
- }
|
|
|
+ queue_work(ioc->fc_rescan_work_q,
|
|
|
+ &ioc->fc_rescan_work);
|
|
|
}
|
|
|
spin_unlock_irqrestore(&ioc->fc_rescan_work_lock, flags);
|
|
|
break;
|
|
@@ -1251,10 +1234,8 @@ mptfc_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
|
|
|
mptfc_SetFcPortPage1_defaults(ioc);
|
|
|
spin_lock_irqsave(&ioc->fc_rescan_work_lock, flags);
|
|
|
if (ioc->fc_rescan_work_q) {
|
|
|
- if (ioc->fc_rescan_work_count++ == 0) {
|
|
|
- queue_work(ioc->fc_rescan_work_q,
|
|
|
- &ioc->fc_rescan_work);
|
|
|
- }
|
|
|
+ queue_work(ioc->fc_rescan_work_q,
|
|
|
+ &ioc->fc_rescan_work);
|
|
|
}
|
|
|
spin_unlock_irqrestore(&ioc->fc_rescan_work_lock, flags);
|
|
|
}
|