Am Dienstag, den 18.07.2006, 06:59 -0700 schrieb Roland Dreier:
>  > +          cm_destroy_id(&cm_id_priv->id, (ret == -ENOMEM) ? 0 : 1);
> 
> This is rather obfuscated.  How about just
> 
>               cm_destroy_id(&cm_id_priv->id, ret != -ENOMEM);
> 
>  - R.

Sure. Fixed below for your convenience.
Would you consider pushing these to 2.6.18? If so, I'd happily provide
patches against rc1 or your git tree.

Thanks,
Arne
--

In its current incarnation, cm_destroy_id() will not send a REJ if fed a
magic number (err = -ENOMEM). This patch replaces this magic number with
a more generic "reject" parameter.

Signed-off-by: Arne Redlich <[EMAIL PROTECTED]> 

Index: infiniband/core/cm.c
===================================================================
--- infiniband/core/cm.c        (revision 8565)
+++ infiniband/core/cm.c        (working copy)
@@ -702,7 +702,7 @@ static void cm_reset_to_idle(struct cm_i
        }
 }
 
-static void cm_destroy_id(struct ib_cm_id *cm_id, int err)
+static void cm_destroy_id(struct ib_cm_id *cm_id, int reject)
 {
        struct cm_id_private *cm_id_priv;
        struct cm_work *work;
@@ -737,14 +737,15 @@ retest:
                               NULL, 0);
                break;
        case IB_CM_REQ_RCVD:
-               if (err == -ENOMEM) {
+               if (reject) {
+                       spin_unlock_irqrestore(&cm_id_priv->lock, flags);
+                       ib_send_cm_rej(cm_id, IB_CM_REJ_CONSUMER_DEFINED,
+                                      NULL, 0, NULL, 0);
+               } else {
                        /* Do not reject to allow future retries. */
                        cm_reset_to_idle(cm_id_priv);
                        spin_unlock_irqrestore(&cm_id_priv->lock, flags);
                } else {
-                       spin_unlock_irqrestore(&cm_id_priv->lock, flags);
-                       ib_send_cm_rej(cm_id, IB_CM_REJ_CONSUMER_DEFINED,
-                                      NULL, 0, NULL, 0);
                }
                break;
        case IB_CM_MRA_REQ_RCVD:
@@ -789,7 +790,7 @@ retest:
 
 void ib_destroy_cm_id(struct ib_cm_id *cm_id)
 {
-       cm_destroy_id(cm_id, 0);
+       cm_destroy_id(cm_id, 1);
 }
 EXPORT_SYMBOL(ib_destroy_cm_id);
 
@@ -1179,7 +1180,7 @@ static void cm_process_work(struct cm_id
        }
        cm_deref_id(cm_id_priv);
        if (ret)
-               cm_destroy_id(&cm_id_priv->id, ret);
+               cm_destroy_id(&cm_id_priv->id, ret != -ENOMEM);
 }
 
 static void cm_format_mra(struct cm_mra_msg *mra_msg,



_______________________________________________
openib-general mailing list
openib-general@openib.org
http://openib.org/mailman/listinfo/openib-general

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

Reply via email to