[PATCH]:Ethernet Bonding Driver-2.4.17

From: Rajasekhar Inguva (irajasek@in.ibm.com)
Date: Sat Feb 16 2002 - 06:44:45 EST


Hi all,

The patch is WRT a problem with the Ethernet Bonding Driver when
compiled as a module. Tested on 2.4.17
and the patch is also against 2.4.17.

# insmod bonding max_bonds=2
Using /lib/modules/2.4.17/kernel/drivers/net/bonding.o
Warning: /lib/modules/2.4.17/kernel/drivers/net/bonding.o parameter
max_bonds
has max < min!
/lib/modules/2.4.17/kernel/drivers/net/bonding.o: unknown parameter type
'(' for
max_bonds

and the module fails to load.

The problem seems to be with the way MODULE_PARM was written for
max_bonds.

MODULE_PARM(max_bonds,"1-" __MODULE_STRING(INT_MAX) "i");

INT_MAX is defined to be ((int)(~0U>>1)) and 'insmod' gets the string
"1-((int)(~0U>>1))i" which it is failing to understand.

As max_bonds is an integer and not an array, i feel omitting the min-max
range would be a better option.

And if a negative or zero value is supplied to max_bonds while loading,
it can be taken care of in bonding_init() by setting it back to
MAX_BONDS.

Thx,
Rajasekhar Inguva

--- /usr/src/linux/drivers/net/bonding.c Fri Dec 21 23:11:54 2001
+++ /usr/src/linux/drivers/fixed/bonding.c Sat Feb 16 17:03:48 2002
@@ -226,7 +226,7 @@
 static struct bonding *these_bonds = NULL;
 static struct net_device *dev_bonds = NULL;
 
-MODULE_PARM(max_bonds, "1-" __MODULE_STRING(INT_MAX) "i");
+MODULE_PARM(max_bonds,"i");
 MODULE_PARM_DESC(max_bonds, "Max number of bonded devices");
 MODULE_PARM(miimon, "i");
 MODULE_PARM_DESC(miimon, "Link check interval in milliseconds");
@@ -1981,6 +1981,10 @@
 
         /* Find a name for this unit */
         static struct net_device *dev_bond = NULL;
+
+ /* If max_bonds <=0, set it to MAX_BONDS */
+ if(max_bonds <=0)
+ max_bonds = MAX_BONDS;
 
         dev_bond = dev_bonds = kmalloc(max_bonds*sizeof(struct net_device),
                                         GFP_KERNEL);

--- /usr/src/linux/drivers/net/bonding.c Fri Dec 21 23:11:54 2001
+++ /usr/src/linux/drivers/fixed/bonding.c Sat Feb 16 17:03:48 2002
@@ -226,7 +226,7 @@
 static struct bonding *these_bonds = NULL;
 static struct net_device *dev_bonds = NULL;
 
-MODULE_PARM(max_bonds, "1-" __MODULE_STRING(INT_MAX) "i");
+MODULE_PARM(max_bonds,"i");
 MODULE_PARM_DESC(max_bonds, "Max number of bonded devices");
 MODULE_PARM(miimon, "i");
 MODULE_PARM_DESC(miimon, "Link check interval in milliseconds");
@@ -1981,6 +1981,10 @@
 
         /* Find a name for this unit */
         static struct net_device *dev_bond = NULL;
+
+ /* If max_bonds <=0, set it to MAX_BONDS */
+ if(max_bonds <=0)
+ max_bonds = MAX_BONDS;
 
         dev_bond = dev_bonds = kmalloc(max_bonds*sizeof(struct net_device),
                                         GFP_KERNEL);

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sat Feb 23 2002 - 21:00:11 EST