]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
IB/core: Control number of retries for SA to leave an MCG
authorDotan Barak <dotanb@dev.mellanox.co.il>
Wed, 16 May 2012 07:56:29 +0000 (10:56 +0300)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Tue, 7 Jul 2015 21:38:09 +0000 (14:38 -0700)
Add a multicast leave maximum retry setting in:
   sys/module/ib_sa/parameters/mcast_leave_retries.
Add a debug print when the maximum retry count is reached.

Signed-off-by: Nir Muchtar <nirm@voltaire.com>
Reviewed-by: Moni Shoua <monis@voltaire.com>
Signed-off-by: Vladimir Sokolovsky <vlad@mellanox.com>
Fixup by adding modifications to changed file from following
commit from Mellanox OFED-2.4 to account for kernel API change
so there are no compiler warnings:
19b33d488938e1667bcc16562a2405d632428db0
(core, srp, mlx4_en: Adjustments to patch set which rebased to kernel 3.7)

Signed-off-by: Ajaykumar Hotchandani <ajaykumar.hotchandani@oracle.com>
(Ported from Mellanox OFED 2.4)

Signed-off-by: Mukesh Kacker <mukesh.kacker@oracle.com>
drivers/infiniband/core/multicast.c

index fa17b552ff78bc16b1547215682f26649f5af7ac..63fff6588d360b41f19136f6ff1e433e532a89c3 100644 (file)
 #include <linux/slab.h>
 #include <linux/bitops.h>
 #include <linux/random.h>
+#include <linux/moduleparam.h>
 
 #include <rdma/ib_cache.h>
 #include "sa.h"
 
+static int mcast_leave_retries = 3;
+
+static const struct kernel_param_ops retry_ops = {
+       .set = param_set_int,
+       .get = param_get_int,
+};
+
+module_param_cb(mcast_leave_retries, &retry_ops, &mcast_leave_retries, 0644);
+MODULE_PARM_DESC(mcast_leave_retries, "Number of retries for multicast leave "
+                                     "requests before giving up (default: 3)");
+
 static void mcast_add_one(struct ib_device *device);
 static void mcast_remove_one(struct ib_device *device);
 
@@ -555,8 +567,12 @@ static void leave_handler(int status, struct ib_sa_mcmember_rec *rec,
        if (status && group->retries > 0 &&
            !send_leave(group, group->leave_state))
                group->retries--;
-       else
+       else {
+               if (status && group->retries <= 0)
+                       printk(KERN_WARNING "reached max retry count. "
+                              "status=%d. Giving up\n", status);
                mcast_work_handler(&group->work);
+       }
 }
 
 static struct mcast_group *acquire_group(struct mcast_port *port,
@@ -579,7 +595,7 @@ static struct mcast_group *acquire_group(struct mcast_port *port,
        if (!group)
                return NULL;
 
-       group->retries = 3;
+       group->retries = mcast_leave_retries;
        group->port = port;
        group->rec.mgid = *mgid;
        group->pkey_index = MCAST_INVALID_PKEY_INDEX;