ACM has two ways that it can complete address resolution. The
first is to receive a response to an address resolution query.
The second is to receive a multicast message carrying an address
resolution request. In the second case, the address request
may be between two other nodes.
When this occurs, ACM will record the address information of
the source of the multicast message. However, it's possible
for ACM to be in the process of trying to resolve that address.
After it records the address, it must see if there's an
outstanding request against that address, so that it can kick
off route resolution.
This fixes an issue where ACM will hang resolving addresses
found during scale-up testing.
Signed-off-by: Sean Hefty <sean.hefty@intel.com>
status = acm_record_acm_route(ep, dest);
break;
}
- if (addr_index >= 0) {
+ if (addr_index >= 0 || !DListEmpty(&dest->req_queue)) {
status = acm_resolve_path(ep, dest, acm_resolve_sa_resp);
if (status)
break;