mad: After calling process_mad, handle MAD being consumed

Index: mad.c
===================================================================
--- mad.c       (revision 1199)
+++ mad.c       (working copy)
@@ -400,16 +400,22 @@
                                            smp->dr_slid, /* ? */
                                            (struct ib_mad *)smp,
                                            (struct ib_mad *)&mad_priv->mad);
-                       if ((ret & IB_MAD_RESULT_SUCCESS) &&
-                           (ret & IB_MAD_RESULT_REPLY)) {
-                               if (!smi_handle_dr_smp_recv(
+                       if (ret & IB_MAD_RESULT_SUCCESS) {
+                               if (ret & IB_MAD_RESULT_CONSUMED) {
+                                       ret = 1;
+                                       goto error1;
+                               }
+                               if (ret & IB_MAD_RESULT_REPLY) {
+                                       if (!smi_handle_dr_smp_recv(
                                            (struct ib_smp *)&mad_priv->mad,
                                            mad_agent->device->node_type,
                                            mad_agent->port_num,
                                            mad_agent->device->phys_port_cnt)) {
-                                       ret = -EINVAL;
-                                       kmem_cache_free(ib_mad_cache, mad_priv);
-                                       goto error1;
+                                               ret = -EINVAL;
+                                               kmem_cache_free(ib_mad_cache,
+                                                               mad_priv);
+                                               goto error1;
+                                       }
                                }
                        }
                }
@@ -1147,6 +1153,8 @@
                                                     recv->header.recv_buf.mad,
                                                     &response->mad.mad);
                if (ret & IB_MAD_RESULT_SUCCESS) {
+                       if (ret & IB_MAD_RESULT_CONSUMED)
+                               goto out;
                        if (ret & IB_MAD_RESULT_REPLY) {
                                /* Send response */
                                if (!agent_send(response, &recv->grh, wc,



_______________________________________________
openib-general mailing list
[EMAIL PROTECTED]
http://openib.org/mailman/listinfo/openib-general

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

Reply via email to