Details
-
Bug
-
Resolution: Fixed
-
Minor
-
None
-
None
-
3
-
9223372036854775807
Description
In lnet_parse():
if (lnet_drop_asym_route && for_me && LNET_NIDNET(src_nid) != LNET_NIDNET(from_nid)) { struct lnet_net *net; struct lnet_remotenet *rnet; bool found = true; ... rnet = lnet_find_rnet_locked(LNET_NIDNET(src_nid)); if (rnet) { ... } lnet_net_unlock(cpt); if (!found) { ... goto drop;
Failure to lookup the remote net for LNET_NIDNET(src_nid) indicates an asymmetric route, but we do not drop the message in this case.
another problem with this code: there's no guarantee that we'll have a route->lr_lnet that matches the net of ni->ni_nid.
It would be better to move this check to after we have looked up the lpni of from_nid. Then, we can look at just the routes associated with the gateway that owns the lpni. If one of those routes has lr_net == LNET_NIDNET(src_nid), then the route is symmetrical