Decrease outstanding MADs counter before calling process_smp_queue()
and smp receive callback, so that there will be room available for
sending more MADs. This fixes 'ibnetdiscover -o 1' (max outstanding
SMPs on a wire = 1) bug.

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

diff --git a/infiniband-diags/libibnetdisc/src/query_smp.c 
b/infiniband-diags/libibnetdisc/src/query_smp.c
index 08e3ef7..3d10977 100644
--- a/infiniband-diags/libibnetdisc/src/query_smp.c
+++ b/infiniband-diags/libibnetdisc/src/query_smp.c
@@ -160,8 +160,6 @@ static int process_one_recv(smp_engine_t * engine)
                return -1;
        }
 
-       rc = process_smp_queue(engine);
-
        mad = umad_get_mad(umad);
        trid = (uint32_t) mad_get_field64(mad, 0, IB_MAD_TRID_F);
 
@@ -171,6 +169,8 @@ static int process_one_recv(smp_engine_t * engine)
                return -1;
        }
 
+       engine->num_smps_outstanding--;
+       rc = process_smp_queue(engine);
        if (rc)
                goto error;
 
@@ -187,7 +187,6 @@ static int process_one_recv(smp_engine_t * engine)
 
 error:
        free(smp);
-       engine->num_smps_outstanding--;
        return rc;
 }
 
-- 
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