Exit from the loop after peer ref count has been incremented
to avoid wrong ref count.
The code makes sure that a peer is queued for discovery at most
once if discovery is disabled. This is done to use discovery
as a standard ping for gateways which do not have discovery feature
or discovery is disabled.
Signed-off-by: Amir Shehata <ashehata@whamcloud.com>
Change-Id: I2cc4c8f9d780f5c438d9b51bb2d1106fec553f39
Reviewed-on: https://review.whamcloud.com/35446
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Olaf Weber <olaf.weber@hpe.com>
Reviewed-by: Chris Horn <hornc@cray.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
DEFINE_WAIT(wait);
struct lnet_peer *lp;
int rc = 0;
DEFINE_WAIT(wait);
struct lnet_peer *lp;
int rc = 0;
again:
lnet_net_unlock(cpt);
again:
lnet_net_unlock(cpt);
break;
if (the_lnet.ln_dc_state != LNET_DC_STATE_RUNNING)
break;
break;
if (the_lnet.ln_dc_state != LNET_DC_STATE_RUNNING)
break;
+ /*
+ * Don't repeat discovery if discovery is disabled. This is
+ * done to ensure we can use discovery as a standard ping as
+ * well for backwards compatibility with routers which do not
+ * have discovery or have discovery disabled
+ */
+ if (lnet_is_discovery_disabled(lp) && count > 0)
+ break;
if (lp->lp_dc_error)
break;
if (lnet_peer_is_uptodate(lp))
break;
lnet_peer_queue_for_discovery(lp);
if (lp->lp_dc_error)
break;
if (lnet_peer_is_uptodate(lp))
break;
lnet_peer_queue_for_discovery(lp);
+ count++;
+ CDEBUG(D_NET, "Discovery attempt # %d\n", count);
/*
* If caller requested a non-blocking operation then
/*
* If caller requested a non-blocking operation then
lnet_peer_decref_locked(lp);
/* Peer may have changed */
lp = lpni->lpni_peer_net->lpn_peer;
lnet_peer_decref_locked(lp);
/* Peer may have changed */
lp = lpni->lpni_peer_net->lpn_peer;
-
- /*
- * Wait for discovery to complete, but don't repeat if
- * discovery is disabled. This is done to ensure we can
- * use discovery as a standard ping as well for backwards
- * compatibility with routers which do not have discovery
- * or have discovery disabled
- */
- if (lnet_is_discovery_disabled(lp))
- break;
}
finish_wait(&lp->lp_dc_waitq, &wait);
}
finish_wait(&lp->lp_dc_waitq, &wait);