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.he...@intel.com>
---
 src/acm.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/acm.c b/src/acm.c
index 404d2b5..77194ff 100644
--- 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;


--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to