From: Sebastien Buisson Date: Tue, 2 Feb 2016 17:06:39 +0000 (+0100) Subject: LU-7845 lnet: check if address is visible X-Git-Tag: 2.8.56~73 X-Git-Url: https://git.whamcloud.com/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F82%2F18782%2F14;p=fs%2Flustre-release.git LU-7845 lnet: check if address is visible In LNetDist(), check if ni's address is currently visible. If not visible, assign order above 0xffff0000, to make this ni not a priority. Signed-off-by: Sebastien Buisson Change-Id: I56735aa25ba632020858507939e12c4565c33d49 Reviewed-on: http://review.whamcloud.com/18782 Tested-by: Jenkins Reviewed-by: Doug Oucharek Tested-by: Maloo Reviewed-by: Li Xi Reviewed-by: Oleg Drokin --- diff --git a/lnet/lnet/lib-move.c b/lnet/lnet/lib-move.c index cd7c0e9..0eade04 100644 --- a/lnet/lnet/lib-move.c +++ b/lnet/lnet/lib-move.c @@ -2497,11 +2497,36 @@ LNetDist(lnet_nid_t dstnid, lnet_nid_t *srcnidp, __u32 *orderp) return local_nid_dist_zero ? 0 : 1; } - if (LNET_NIDNET(ni->ni_nid) == dstnet) { - if (srcnidp != NULL) - *srcnidp = ni->ni_nid; - if (orderp != NULL) - *orderp = order; + if (LNET_NIDNET(ni->ni_nid) == dstnet) { + if (ni->ni_interfaces[0] != NULL) { + /* Check if ni's address is the one visible in + * current namespace. + * If not, assign order above 0xffff0000, + * to make this ni not a priority. */ + int i, up, rc; + __u32 mask, addr; + char *name; + for (i = 0; i < ARRAY_SIZE(ni->ni_interfaces); + i++) { + if (ni->ni_interfaces[i] == NULL) + continue; + name = ni->ni_interfaces[i]; + rc = lnet_ipif_query(name, &up, &addr, + &mask); + if ((rc != 0) || (rc == 0 && + (!up || + LNET_NIDADDR(ni->ni_nid) != + addr))) { + order += 0xffff0000; + break; + } + } + } + + if (srcnidp != NULL) + *srcnidp = ni->ni_nid; + if (orderp != NULL) + *orderp = order; lnet_net_unlock(cpt); return 1; }