Until now, only if joinning a multicast group failed there was a retry
mechanism.
This patch will add a mechanism that will retry to leave a multicast
group before giving up.

Signed-off-by: Ron Livne <[EMAIL PROTECTED]>

diff --git a/drivers/infiniband/core/multicast.c 
b/drivers/infiniband/core/multicast.c
index 107f170..9aba771 100644
--- a/drivers/infiniband/core/multicast.c
+++ b/drivers/infiniband/core/multicast.c
@@ -106,6 +106,7 @@ struct mcast_group {
        struct ib_sa_query      *query;
        int                     query_id;
        u16                     pkey_index;
+       int                     retries;
 };

 struct mcast_member {
@@ -540,9 +541,16 @@ static void join_handler(int status, struct 
ib_sa_mcmember_rec *rec,
 static void leave_handler(int status, struct ib_sa_mcmember_rec *rec,
                          void *context)
 {
+       __u8 leave_state;
        struct mcast_group *group = context;

-       mcast_work_handler(&group->work);
+       leave_state = get_leave_state(group);
+       if (status && (group->retries > 0)) {
+               send_leave(group, leave_state);
+               group->retries--;
+       }
+       if (!status || (group->retries == 0))
+               mcast_work_handler(&group->work);
 }

 static struct mcast_group *acquire_group(struct mcast_port *port,
@@ -565,6 +573,7 @@ static struct mcast_group *acquire_group(struct mcast_port 
*port,
        if (!group)
                return NULL;

+       group->retries = 3;
        group->port = port;
        group->rec.mgid = *mgid;
        group->pkey_index = MCAST_INVALID_PKEY_INDEX;
_______________________________________________
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