The bonding network device is being created with device type ARPHDR_ETHER.
Although the device type changes with first slave we want to be able to change
it when it has zero slaves. The reason is to make the kernel choose the right
function for multicast address translation (ib_xxx_mc_map) which is determined by
device type even when no slaves are enslaved. If not so, the kernel picks a wrong
translation function and wrong HW addresses will be passed to slaves when the
bonding device tries to set their multicast lists.
Signed-off-by: Moni Shoua <monis@voltaire.com>
---
drivers/net/bonding/bond_sysfs.c | 48 +++++++++++++++++++++++++++++++++++++++
1 files changed, 48 insertions(+)
diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c
index 90a1f31..86fec7e 100644
--- a/drivers/net/bonding/bond_sysfs.c
+++ b/drivers/net/bonding/bond_sysfs.c
@@ -950,6 +950,7 @@ out:
}
static DEVICE_ATTR(lacp_rate, S_IRUGO | S_IWUSR, bonding_show_lacp, bonding_store_lacp);
+
/*
* Show and set the MII monitor interval. There are two tricky bits
* here. First, if MII monitoring is activated, then we must disable
@@ -1039,6 +1040,52 @@ out:
static DEVICE_ATTR(miimon, S_IRUGO | S_IWUSR, bonding_show_miimon, bonding_store_miimon);
/*
+ * Show and set the device type of the bonding device
+ */
+static ssize_t bonding_show_devtype(struct device *d,
+ struct device_attribute *attr,
+ char *buf)
+{
+ struct bonding *bond = to_bond(d);
+
+ return sprintf(buf, "%d\n", bond->dev->type);
+}
+
+static ssize_t bonding_store_devtype(struct device *d,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ int new_value, ret = count;
+ struct bonding *bond = to_bond(d);
+
+ if (sscanf(buf, "%d", &new_value) != 1) {
+ printk(KERN_ERR DRV_NAME
+ ": %s: no device type value specified.\n",
+ bond->dev->name);
+ ret = -EINVAL;
+ goto out;
+ }
+ if (bond->slave_cnt > ...Does this mean that the automatic selection on first enslavement is no longer needed, and all setting of the type for IB devices must occur prior to first enslavement? Or is this more of a special case for some devices, and the automatic selection is still correct for most cases? -J --- -Jay Vosburgh, IBM Linux Technology Center, fubar@us.ibm.com --
I think that the later is closer to the truth. The goal is to modify the bonding module to work with IPoIB slaves but with as small as possible changes to what already exists. In details, the bonding net device device gets its type by ether_setup(), which runs for all types of slaves and I don't see a way to change that. However, bonding master for IPoIB slaves requires a different device type setting before it comes up for some OSs (redhat 4 for instance). On other OSs I don't see the problem and I guess that this is because master becomes up only after it has slaves. --
If I'm reading the above correctly, then this type selection is only needed for Red Hat 4 (or, really, versions of bonding prior to when the bonding master started to set its carrier state based upon the state of the slaves), correct? If that's the case, then is this patch is fixing a problem that doesn't exist in the mainline? If this isn't a problem with the current driver (where "current" here seems to be bonding 3.0.3 and later, which is about two years old), I don't see why it should go into the mainline. Am I misunderstanding something? -J --- -Jay Vosburgh, IBM Linux Technology Center, fubar@us.ibm.com --
The problem was seen under RedHat 4 with a bonding driver from 2.6.24 with backports. We deliver this module to customers who use IPoIB. However, the bug is not only for RedHat necessarily. Anywhere that will do 1. ifup bond0 2. Enslave ib0,ib1 to bond0 will end up the same problem described above. --
| Karl Meyer | PROBLEM: 2.6.23-rc "NETDEV WATCHDOG: eth0: transmit timed out" |
| David Miller | Slow DOWN, please!!! |
| Mark Fasheh | [PATCH 0/39] Ocfs2 updates for 2.6.28 |
| Bart Van Assche | Integration of SCST in the mainstream Linux kernel |
git: | |
| Shawn O. Pearce | Re: pack operation is thrashing my server |
| Pierre Habouzit | git send-email improvements |
| Matthieu Moy | git push to a non-bare repository |
| Shawn O. Pearce | libgit2 - a true git library |
| Elad Efrat | Integrating securelevel and kauth(9) |
| Hubert Feyrer | Re: Compressed vnd handling tested successfully |
| Lord Isildur | Re: Fork bomb protection patch |
| Matt Thomas | Re: FFS journal |
| Will Maier | cron doesn't run commands in /etc/crontab? |
| Richard Stallman | Real men don't attack straw men |
| Harald Dunkel | Re: Packet Filter: how to keep device names on hardware failure? |
| Jordi Espasa Clofent | Resolving dependencies with pkg_add |
| Question on swap as ramdisk partition | 1 hour ago | Linux kernel |
| Netfilter kernel module | 11 hours ago | Linux kernel |
| serial driver xmit problem | 14 hours ago | Linux kernel |
| Why Windows is better than Linux | 14 hours ago | Linux general |
| How can I see my kernel messages in vt12? | 21 hours ago | Linux kernel |
| Grub | 1 day ago | Linux general |
| vmalloc_fault handling in x86_64 | 1 day ago | Linux kernel |
| epoll_wait()ing on epoll FD | 1 day ago | Linux kernel |
| Framebuffer in x86_64 causes problems to multiseat | 1 day ago | Linux kernel |
| Difference between 2.4 and 2.6 regarding thread creation | 2 days ago | Linux general |
