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