LNetPeerDiscovered is added to allow lustre check
whether the peer has been successfully discovered by LNet
before attempting to open a connection to it.
For example, given a mount command with a list of NIDs,
Lustre can use LNetAddPeer API to initiate discovery on
every candidate first, and later use LNetPeerDiscovered
to select a reachable peer to connect to.
Lustre-change: https://review.whamcloud.com/53926
Lustre-commit:
dba41355565397228f587f13a901b5d762521ed0
Test-Parameters: trivial testlist=sanity-lnet
Signed-off-by: Serguei Smirnov <ssmirnov@whamcloud.com>
Change-Id: I7c9964148a5a2a24d7889b8b4c2e488a433ca258
Reviewed-by: Frank Sehr <fsehr@whamcloud.com>
Reviewed-by: Mikhail Pershin <mpershin@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/c/ex/lustre-release/+/54950
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
int LNetDist(lnet_nid_t nid, lnet_nid_t *srcnid, __u32 *order);
lnet_nid_t LNetPrimaryNID(lnet_nid_t nid);
bool LNetIsPeerLocal(lnet_nid_t nid);
+bool LNetPeerDiscovered(lnet_nid_t nid);
/** @} lnet_addr */
}
EXPORT_SYMBOL(LNetPrimaryNID);
+bool
+LNetPeerDiscovered(lnet_nid_t nid)
+{
+ int cpt, disc = false;
+ struct lnet_peer *lp;
+
+ lp = lnet_find_peer(nid);
+ if (!lp)
+ goto out;
+
+ cpt = lnet_net_lock_current();
+ spin_lock(&lp->lp_lock);
+ if (((lp->lp_state & LNET_PEER_DISCOVERED) &&
+ (lp->lp_state & LNET_PEER_NIDS_UPTODATE)) ||
+ (lp->lp_state & LNET_PEER_NO_DISCOVERY))
+ disc = true;
+ spin_unlock(&lp->lp_lock);
+
+ /* Drop refcount from lookup */
+ lnet_peer_decref_locked(lp);
+ lnet_net_unlock(cpt);
+out:
+ CDEBUG(D_NET, "Peer NID %s discovered: %d\n", libcfs_nid2str(nid),
+ disc);
+ return disc;
+}
+EXPORT_SYMBOL(LNetPeerDiscovered);
+
struct lnet_peer_net *
lnet_peer_get_net_locked(struct lnet_peer *peer, __u32 net_id)
{