@@ -1062,13 +1062,18 @@ static void do_sweep(osm_sm_t * sm)
* Otherwise, this is probably our first discovery pass
* or we are connected in loopback. In both cases do a
* heavy sweep.
- * Note: If we are connected in loopback we want a heavy
- * sweep, since we will not be getting any traps if there is
- * a lost connection.
+ * Note the following:
+ * 1. If we are connected in loopback we want a heavy sweep, since we
+ * will not be getting any traps if there is a lost connection.
+ * 2. If we are in DISCOVERING state - this means it is either in
+ * initializing or wake up from STANDBY - run the heavy sweep.
+ * 3. If there is only one node in the fabric, and this node is a
+ * switch, and OSM runs on top of it, there might be a race when
+ * OSM starts running before the external ports are up - run the
+ * heavy sweep.
*/
- /* if we are in DISCOVERING state - this means it is either in
- * initializing or wake up from STANDBY - run the heavy sweep */
if (cl_qmap_count(&sm->p_subn->sw_guid_tbl)
+ && cl_qmap_count(&sm->p_subn->node_guid_tbl) != 1
&& sm->p_subn->sm_state != IB_SMINFO_STATE_DISCOVERING
&& sm->p_subn->opt.force_heavy_sweep == FALSE
&& sm->p_subn->force_heavy_sweep == FALSE