]> git.openfabrics.org - ~shefty/ibacm.git/commitdiff
ibacm: fix issuing SA query after recording address
authorSean Hefty <sean.hefty@intel.com>
Mon, 15 Nov 2010 20:08:46 +0000 (12:08 -0800)
committerSean Hefty <sean.hefty@intel.com>
Wed, 17 Nov 2010 00:05:46 +0000 (16:05 -0800)
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>
src/acm.c

index 404d2b54da898fe3378a53a40493b08eea1a11b8..77194ffcb254793156ba286cb0fde17ae8b04ed1 100644 (file)
--- a/src/acm.c
+++ b/src/acm.c
@@ -1027,7 +1027,7 @@ acm_process_addr_req(struct acm_ep *ep, struct ibv_wc *wc, struct acm_mad *mad)
                        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;