send_smp() failure blocks whole discovery execution (it never returns).
Fix this by updating all outstanding SMPs related counters only after
successful MAD sending.

Signed-off-by: Sasha Khapyorsky <sas...@voltaire.com>
---
 infiniband-diags/libibnetdisc/src/query_smp.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/infiniband-diags/libibnetdisc/src/query_smp.c 
b/infiniband-diags/libibnetdisc/src/query_smp.c
index b4322bc..08e3ef7 100644
--- a/infiniband-diags/libibnetdisc/src/query_smp.c
+++ b/infiniband-diags/libibnetdisc/src/query_smp.c
@@ -96,10 +96,12 @@ static int process_smp_queue(smp_engine_t * engine)
                if (!smp)
                        return 0;
 
-               cl_qmap_insert(&engine->smps_on_wire, (uint32_t) smp->rpc.trid,
-                              (cl_map_item_t *) smp);
                if ((rc = send_smp(smp, engine->ibmad_port)) != 0)
                        return rc;
+               engine->num_smps_outstanding++;
+               cl_qmap_insert(&engine->smps_on_wire, (uint32_t) smp->rpc.trid,
+                              (cl_map_item_t *) smp);
+               engine->total_smps++;
        }
        return 0;
 }
@@ -133,8 +135,6 @@ int issue_smp(smp_engine_t * engine, ib_portid_t * portid,
        portid->sl = 0;
        portid->qp = 0;
 
-       engine->total_smps++;
-       engine->num_smps_outstanding++;
        queue_smp(engine, smp);
        return process_smp_queue(engine);
 }
-- 
1.7.0.4

--
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