In osm_vendor_send() when sending fails call send error callback only
MADs where response is expected. So outstanding mad counters are updated
properly.

Pointed out and
Acked-by: Hal Rosenstock <[EMAIL PROTECTED]>

Signed-off-by: Sasha Khapyorsky <[EMAIL PROTECTED]>
---
 opensm/libvendor/osm_vendor_ibumad.c |   14 ++++++++------
 1 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/opensm/libvendor/osm_vendor_ibumad.c 
b/opensm/libvendor/osm_vendor_ibumad.c
index 4618574..461c8bc 100644
--- a/opensm/libvendor/osm_vendor_ibumad.c
+++ b/opensm/libvendor/osm_vendor_ibumad.c
@@ -1120,16 +1120,18 @@ osm_vendor_send(IN osm_bind_handle_t h_bind,
                             sent_mad_size,
                             resp_expected ? p_vend->timeout : 0,
                             p_vend->max_retries)) < 0) {
-               if (resp_expected)
-                       get_madw(p_vend, &p_mad->trans_id);     /* remove from 
aging table */
                osm_log(p_vend->p_log, OSM_LOG_ERROR,
                        "osm_vendor_send: ERR 5430: "
                        "Send p_madw = %p of size %d failed %d (%m)\n",
                        p_madw, sent_mad_size, ret);
-               p_madw->status = IB_ERROR;
-               pthread_mutex_lock(&p_vend->cb_mutex);
-               (*p_bind->send_err_callback) (p_bind->client_context, p_madw);  
/* cb frees madw */
-               pthread_mutex_unlock(&p_vend->cb_mutex);
+               if (resp_expected) {
+                       get_madw(p_vend, &p_mad->trans_id);     /* remove from 
aging table */
+                       p_madw->status = IB_ERROR;
+                       pthread_mutex_lock(&p_vend->cb_mutex);
+                       (*p_bind->send_err_callback) (p_bind->client_context, 
p_madw);  /* cb frees madw */
+                       pthread_mutex_unlock(&p_vend->cb_mutex);
+               } else
+                       osm_mad_pool_put(p_bind->p_mad_pool, p_madw);
                goto Exit;
        }
 
-- 
1.5.3.rc2.38.g11308

_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to