rpms/kernel/FC-3 jwltest-bonding-2_6_12-rc2.patch, NONE, 1.1.2.1 jwltest-bonding-sysfs.patch, NONE, 1.1.2.1 kernel-2.6.spec, 1.804.2.1, 1.804.2.2
fedora-cvs-commits at redhat.com
fedora-cvs-commits at redhat.com
Fri Apr 8 15:36:05 UTC 2005
Update of /cvs/dist/rpms/kernel/FC-3
In directory cvs.devel.redhat.com:/tmp/cvs-serv21470
Modified Files:
Tag: private-linville-fc3-jwltest-5-branch
kernel-2.6.spec
Added Files:
Tag: private-linville-fc3-jwltest-5-branch
jwltest-bonding-2_6_12-rc2.patch jwltest-bonding-sysfs.patch
Log Message:
jwltest-bonding-2_6_12-rc2.patch:
bond_3ad.c | 2 +-
bond_3ad.h | 1 -
bond_alb.c | 16 +++++++++-------
bond_main.c | 54 ++++++++++++++++++++----------------------------------
bonding.h | 1 +
bonding_compat.h | 7 +++++++
6 files changed, 38 insertions(+), 43 deletions(-)
--- NEW FILE jwltest-bonding-2_6_12-rc2.patch ---
--- linux-2.6.11/drivers/net/bonding/bond_3ad.h.orig 2005-04-08 10:48:26.717400547 -0400
+++ linux-2.6.11/drivers/net/bonding/bond_3ad.h 2005-04-08 10:48:44.236065061 -0400
@@ -290,7 +290,6 @@ void bond_3ad_initialize(struct bonding
int bond_3ad_bind_slave(struct slave *slave);
void bond_3ad_unbind_slave(struct slave *slave);
void bond_3ad_state_machine_handler(struct bonding *bond);
-void bond_3ad_rx_indication(struct lacpdu *lacpdu, struct slave *slave, u16 length);
void bond_3ad_adapter_speed_changed(struct slave *slave);
void bond_3ad_adapter_duplex_changed(struct slave *slave);
void bond_3ad_handle_link_change(struct slave *slave, char link);
--- linux-2.6.11/drivers/net/bonding/bonding.h.orig 2005-04-08 10:48:26.724399614 -0400
+++ linux-2.6.11/drivers/net/bonding/bonding.h 2005-04-08 11:05:22.161032308 -0400
@@ -33,6 +33,7 @@
#include <linux/timer.h>
#include <linux/proc_fs.h>
#include <linux/if_bonding.h>
+#include "bonding_compat.h"
#include "bond_3ad.h"
#include "bond_alb.h"
--- linux-2.6.11/drivers/net/bonding/bonding_compat.h.orig 2005-04-08 11:03:31.727754295 -0400
+++ linux-2.6.11/drivers/net/bonding/bonding_compat.h 2005-04-08 11:05:02.030715962 -0400
@@ -0,0 +1,7 @@
+#ifndef __BONDING_COMPAT_H__
+#define __BONDING_COMPAT_H__
+
+#define dev_set_mac_address(dev, sa) \
+ (dev)->set_mac_address((dev), (sa))
+
+#endif /* __BONDING_COMPAT_H__ */
--- linux-2.6.11/drivers/net/bonding/bond_3ad.c.orig 2005-04-08 10:48:26.715400814 -0400
+++ linux-2.6.11/drivers/net/bonding/bond_3ad.c 2005-04-08 10:48:44.231065728 -0400
@@ -2175,7 +2175,7 @@ out:
* received frames (loopback). Since only the payload is given to this
* function, it check for loopback.
*/
-void bond_3ad_rx_indication(struct lacpdu *lacpdu, struct slave *slave, u16 length)
+static void bond_3ad_rx_indication(struct lacpdu *lacpdu, struct slave *slave, u16 length)
{
struct port *port;
--- linux-2.6.11/drivers/net/bonding/bond_main.c.orig 2005-04-08 10:48:26.726399348 -0400
+++ linux-2.6.11/drivers/net/bonding/bond_main.c 2005-04-08 10:48:44.257062262 -0400
@@ -793,29 +793,20 @@ struct vlan_entry *bond_next_vlan(struct
* @skb: hw accel VLAN tagged skb to transmit
* @slave_dev: slave that is supposed to xmit this skbuff
*
- * When the bond gets an skb to tarnsmit that is
+ * When the bond gets an skb to transmit that is
* already hardware accelerated VLAN tagged, and it
* needs to relay this skb to a slave that is not
* hw accel capable, the skb needs to be "unaccelerated",
* i.e. strip the hwaccel tag and re-insert it as part
* of the payload.
- *
- * Assumption - once a VLAN device is created over the bond device, all
- * packets are going to be hardware accelerated VLAN tagged since the IP
- * binding is done over the VLAN device
*/
int bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, struct net_device *slave_dev)
{
unsigned short vlan_id;
- int res;
if (!list_empty(&bond->vlan_list) &&
- !(slave_dev->features & NETIF_F_HW_VLAN_TX)) {
- res = vlan_get_tag(skb, &vlan_id);
- if (res) {
- return -EINVAL;
- }
-
+ !(slave_dev->features & NETIF_F_HW_VLAN_TX) &&
+ vlan_get_tag(skb, &vlan_id) == 0) {
skb->dev = slave_dev;
skb = vlan_put_tag(skb, vlan_id);
if (!skb) {
@@ -1719,7 +1710,7 @@ static int bond_enslave(struct net_devic
*/
memcpy(addr.sa_data, bond_dev->dev_addr, bond_dev->addr_len);
addr.sa_family = slave_dev->type;
- res = slave_dev->set_mac_address(slave_dev, &addr);
+ res = dev_set_mac_address(slave_dev, &addr);
if (res) {
dprintk("Error %d calling set_mac_address\n", res);
goto err_free;
@@ -1849,8 +1840,8 @@ static int bond_enslave(struct net_devic
if (bond_update_speed_duplex(new_slave) &&
(new_slave->link != BOND_LINK_DOWN)) {
printk(KERN_WARNING DRV_NAME
- ": Warning: failed to get speed/duplex from %s, speed "
- "forced to 100Mbps, duplex forced to Full.\n",
+ ": Warning: failed to get speed and duplex from %s, "
+ "assumed to be 100Mb/sec and Full.\n",
new_slave->dev->name);
if (bond->params.mode == BOND_MODE_8023AD) {
@@ -1991,7 +1982,7 @@ err_close:
err_restore_mac:
memcpy(addr.sa_data, new_slave->perm_hwaddr, ETH_ALEN);
addr.sa_family = slave_dev->type;
- slave_dev->set_mac_address(slave_dev, &addr);
+ dev_set_mac_address(slave_dev, &addr);
err_free:
kfree(new_slave);
@@ -2171,7 +2162,7 @@ static int bond_release(struct net_devic
/* restore original ("permanent") mac address */
memcpy(addr.sa_data, slave->perm_hwaddr, ETH_ALEN);
addr.sa_family = slave_dev->type;
- slave_dev->set_mac_address(slave_dev, &addr);
+ dev_set_mac_address(slave_dev, &addr);
}
/* restore the original state of the
@@ -2262,7 +2253,7 @@ static int bond_release_all(struct net_d
/* restore original ("permanent") mac address*/
memcpy(addr.sa_data, slave->perm_hwaddr, ETH_ALEN);
addr.sa_family = slave_dev->type;
- slave_dev->set_mac_address(slave_dev, &addr);
+ dev_set_mac_address(slave_dev, &addr);
}
/* restore the original state of the IFF_NOARP flag that might have
@@ -3898,12 +3889,7 @@ static int bond_change_mtu(struct net_de
bond_for_each_slave(bond, slave, i) {
dprintk("s %p s->p %p c_m %p\n", slave,
slave->prev, slave->dev->change_mtu);
- if (slave->dev->change_mtu) {
- res = slave->dev->change_mtu(slave->dev, new_mtu);
- } else {
- slave->dev->mtu = new_mtu;
- res = 0;
- }
+ res = dev_set_mtu(slave->dev, new_mtu);
if (res) {
/* If we failed to set the slave's mtu to the new value
@@ -3929,14 +3915,10 @@ unwind:
bond_for_each_slave_from_to(bond, slave, i, bond->first_slave, stop_at) {
int tmp_res;
- if (slave->dev->change_mtu) {
- tmp_res = slave->dev->change_mtu(slave->dev, bond_dev->mtu);
- if (tmp_res) {
- dprintk("unwind err %d dev %s\n", tmp_res,
- slave->dev->name);
- }
- } else {
- slave->dev->mtu = bond_dev->mtu;
+ tmp_res = dev_set_mtu(slave->dev, bond_dev->mtu);
+ if (tmp_res) {
+ dprintk("unwind err %d dev %s\n", tmp_res,
+ slave->dev->name);
}
}
@@ -3988,7 +3970,7 @@ static int bond_set_mac_address(struct n
goto unwind;
}
- res = slave->dev->set_mac_address(slave->dev, addr);
+ res = dev_set_mac_address(slave->dev, addr);
if (res) {
/* TODO: consider downing the slave
* and retry ?
@@ -4014,7 +3996,7 @@ unwind:
bond_for_each_slave_from_to(bond, slave, i, bond->first_slave, stop_at) {
int tmp_res;
- tmp_res = slave->dev->set_mac_address(slave->dev, &tmp_sa);
+ tmp_res = dev_set_mac_address(slave->dev, &tmp_sa);
if (tmp_res) {
dprintk("unwind err %d dev %s\n", tmp_res,
slave->dev->name);
@@ -4306,6 +4288,10 @@ static int __init bond_init(struct net_d
*/
bond_dev->features |= NETIF_F_VLAN_CHALLENGED;
+ /* don't acquire bond device's xmit_lock when
+ * transmitting */
+ bond_dev->features |= NETIF_F_LLTX;
+
/* By default, we declare the bond to be fully
* VLAN hardware accelerated capable. Special
* care is taken in the various xmit functions
--- linux-2.6.11/drivers/net/bonding/bond_alb.c.orig 2005-04-08 10:48:26.719400281 -0400
+++ linux-2.6.11/drivers/net/bonding/bond_alb.c 2005-04-08 10:48:44.241064395 -0400
@@ -54,6 +54,7 @@
#include <linux/if_ether.h>
#include <linux/if_bonding.h>
#include <linux/if_vlan.h>
+#include <linux/in.h>
#include <net/ipx.h>
#include <net/arp.h>
#include <asm/byteorder.h>
@@ -275,7 +276,7 @@ static struct slave *tlb_get_least_loade
}
/* Caller must hold bond lock for read */
-struct slave *tlb_choose_channel(struct bonding *bond, u32 hash_index, u32 skb_len)
+static struct slave *tlb_choose_channel(struct bonding *bond, u32 hash_index, u32 skb_len)
{
struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond));
struct tlb_client_info *hash_table;
@@ -627,7 +628,7 @@ static void rlb_req_update_subnet_client
}
/* Caller must hold both bond and ptr locks for read */
-struct slave *rlb_choose_channel(struct sk_buff *skb, struct bonding *bond)
+static struct slave *rlb_choose_channel(struct sk_buff *skb, struct bonding *bond)
{
struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond));
struct arp_pkt *arp = (struct arp_pkt *)skb->nh.raw;
@@ -954,9 +955,9 @@ static int alb_set_slave_mac_addr(struct
/* each slave will receive packets destined to a different mac */
memcpy(s_addr.sa_data, addr, dev->addr_len);
s_addr.sa_family = dev->type;
- if (dev->set_mac_address(dev, &s_addr)) {
+ if (dev_set_mac_address(dev, &s_addr)) {
printk(KERN_ERR DRV_NAME
- ": Error: dev->set_mac_address of dev %s failed! ALB "
+ ": Error: dev_set_mac_address of dev %s failed! ALB "
"mode requires that the base driver support setting "
"the hw address also when the network device's "
"interface is open\n",
@@ -1209,7 +1210,7 @@ static int alb_set_mac_address(struct bo
/* save net_device's current hw address */
memcpy(tmp_addr, slave->dev->dev_addr, ETH_ALEN);
- res = slave->dev->set_mac_address(slave->dev, addr);
+ res = dev_set_mac_address(slave->dev, addr);
/* restore net_device's hw address */
memcpy(slave->dev->dev_addr, tmp_addr, ETH_ALEN);
@@ -1229,7 +1230,7 @@ unwind:
stop_at = slave;
bond_for_each_slave_from_to(bond, slave, i, bond->first_slave, stop_at) {
memcpy(tmp_addr, slave->dev->dev_addr, ETH_ALEN);
- slave->dev->set_mac_address(slave->dev, &sa);
+ dev_set_mac_address(slave->dev, &sa);
memcpy(slave->dev->dev_addr, tmp_addr, ETH_ALEN);
}
@@ -1300,7 +1301,8 @@ int bond_alb_xmit(struct sk_buff *skb, s
switch (ntohs(skb->protocol)) {
case ETH_P_IP:
if ((memcmp(eth_data->h_dest, mac_bcast, ETH_ALEN) == 0) ||
- (skb->nh.iph->daddr == ip_bcast)) {
+ (skb->nh.iph->daddr == ip_bcast) ||
+ (skb->nh.iph->protocol == IPPROTO_IGMP)) {
do_tx_balance = 0;
break;
}
jwltest-bonding-sysfs.patch:
Makefile | 2
bond_3ad.c | 74 +--
bond_alb.c | 61 +-
bond_main.c | 406 +++++++++++------
bond_sysfs.c | 1395 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
bonding.h | 35 +
6 files changed, 1778 insertions(+), 195 deletions(-)
--- NEW FILE jwltest-bonding-sysfs.patch ---
--- linux-2.6.11/drivers/net/bonding/bonding.h.orig 2005-04-08 11:24:42.757315832 -0400
+++ linux-2.6.11/drivers/net/bonding/bonding.h 2005-04-08 11:23:38.493882304 -0400
@@ -33,12 +33,13 @@
#include <linux/timer.h>
#include <linux/proc_fs.h>
#include <linux/if_bonding.h>
+#include <linux/kobject.h>
#include "bonding_compat.h"
#include "bond_3ad.h"
#include "bond_alb.h"
-#define DRV_VERSION "2.6.1"
-#define DRV_RELDATE "October 29, 2004"
+#define DRV_VERSION "3.1.5"
+#define DRV_RELDATE "April 6, 2005"
#define DRV_NAME "bonding"
#define DRV_DESCRIPTION "Ethernet Channel Bonding Driver"
@@ -148,13 +149,18 @@ struct bond_params {
u32 arp_targets[BOND_MAX_ARP_TARGETS];
};
+struct bond_parm_tbl {
+ char *modename;
+ int mode;
+};
+
struct vlan_entry {
struct list_head vlan_list;
unsigned short vlan_id;
};
struct slave {
- struct net_device *dev; /* first - usefull for panic debug */
+ struct net_device *dev; /* first - useful for panic debug */
struct slave *next;
struct slave *prev;
s16 delay;
@@ -180,7 +186,7 @@ struct slave {
* beforehand.
*/
struct bonding {
- struct net_device *dev; /* first - usefull for panic debug */
+ struct net_device *dev; /* first - useful for panic debug */
struct slave *first_slave;
struct slave *curr_active_slave;
struct slave *current_arp_slave;
@@ -204,6 +210,7 @@ struct bonding {
struct bond_params params;
struct list_head vlan_list;
struct vlan_group *vlgrp;
+ u32 my_ip;
};
/**
@@ -248,6 +255,26 @@ extern inline void bond_set_slave_active
struct vlan_entry *bond_next_vlan(struct bonding *bond, struct vlan_entry *curr);
int bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, struct net_device *slave_dev);
+int bond_create(char *name, struct bond_params *params, struct bonding **newbond);
+void bond_deinit(struct net_device *bond_dev);
+int bond_create_sysfs(void);
+void bond_destroy_sysfs(void);
+void bond_destroy_sysfs_entry(struct bonding *bond);
+int bond_create_sysfs_entry(struct bonding *bond);
+int bond_create_slave_symlinks(struct net_device *master, struct net_device *slave);
+void bond_destroy_slave_symlinks(struct net_device *master, struct net_device *slave);
+int bond_check_abi_ver(void);
+int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev, struct slave **vassal);
+int bond_release(struct net_device *bond_dev, struct net_device *slave_dev);
+int bond_sethwaddr(struct net_device *bond_dev, struct net_device *slave_dev);
+void bond_mii_monitor(struct net_device *bond_dev);
+void bond_loadbalance_arp_mon(struct net_device *bond_dev);
+void bond_activebackup_arp_mon(struct net_device *bond_dev);
+void bond_set_mode_ops(struct net_device *bond_dev, int mode);
+int bond_parse_parm(char *mode_arg, struct bond_parm_tbl *tbl);
+const char *bond_mode_name(int mode);
+void bond_select_active_slave(struct bonding *bond);
+void bond_change_active_slave(struct bonding *bond, struct slave *new_active);
#endif /* _LINUX_BONDING_H */
--- linux-2.6.11/drivers/net/bonding/bond_sysfs.c.orig 2005-04-08 11:26:18.520550423 -0400
+++ linux-2.6.11/drivers/net/bonding/bond_sysfs.c 2005-04-08 11:22:24.297772870 -0400
@@ -0,0 +1,1395 @@
+
+/*
+ * Copyright(c) 2004 Intel Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ *
+ * Changes:
+ *
+ * 2004/12/12 - Mitch Williams <mitch.a.williams at intel dot com>
+ * - Initial creation of sysfs interface.
+ *
+ */
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/sched.h>
+#include <linux/device.h>
+#include <linux/sysdev.h>
+#include <linux/fs.h>
+#include <linux/types.h>
+#include <linux/string.h>
+#include <linux/netdevice.h>
+#include <linux/inetdevice.h>
+#include <linux/in.h>
+#include <linux/sysfs.h>
+#include <linux/string.h>
+#include <linux/ctype.h>
+#include <linux/inet.h>
+#include <linux/rtnetlink.h>
+
+/* #define BONDING_DEBUG 1 */
+#include "bonding.h"
+#define to_class_dev(obj) container_of(obj,struct class_device,kobj)
+#define to_net_dev(class) container_of(class, struct net_device, class_dev)
+#define to_bond(cd) ((struct bonding *)(to_net_dev(cd)->priv))
+
+/*---------------------------- Declarations -------------------------------*/
+
+/* Macros for real simple parsing of text. */
+#define eat_nonalnum(str,whence,max) \
+ while (whence < max) {if (!isalnum(str[whence])) whence++; else break;};
+#define find_next_nonalpha(str,whence,max) \
+ while (whence < max) {if (isalnum(str[whence])) whence++; else break;};
+
+extern struct list_head bond_dev_list;
+extern struct bond_params bonding_defaults;
+extern struct bond_parm_tbl bond_mode_tbl[];
+extern struct bond_parm_tbl bond_lacp_tbl[];
+
+static struct class *netdev_class;
+/*--------------------------- Data Structures -----------------------------*/
+
+/* Bonding sysfs lock. Why can't we just use the subsytem lock?
+ * Because kobject_register tries to acquire the subsystem lock. If
+ * we already hold the lock (which we would if the user was creating
+ * a new bond through the sysfs interface), we deadlock.
+ */
+
+struct rw_semaphore bonding_rwsem;
+
+
+
+
+/*------------------------------ Functions --------------------------------*/
+
+/*
+ * "show" function for the bond_masters attribute.
+ * The class parameter is ignored.
+ */
+static ssize_t bonding_show_bonds(struct class *cls, char *buffer)
+{
+ int res = 0;
+ struct bonding *bond;
+
+ down_read(&(bonding_rwsem));
+
+ list_for_each_entry(bond, &bond_dev_list, bond_list) {
+ res += sprintf(buffer + res, "%s ",
+ bond->dev->name);
+ if (res > (PAGE_SIZE - IFNAMSIZ)) {
+ dprintk("eek! too many bonds!\n");
+ break;
+ }
+ }
+ res += sprintf(buffer + res, "\n");
+ res++;
+ up_read(&(bonding_rwsem));
+ return res;
+}
+
+/*
+ * "store" function for the bond_masters attribute. This is what
+ * creates and deletes entire bonds.
+ *
+ * The class parameter is ignored.
+ *
+ * This function uses the eat_nonalnum and eat_alnum macros, define
+ * above. Why not use sscanf()? Scanf can get strings, but can't filter
[...2392 lines suppressed...]
+err:
+ rtnl_lock();
bond_free_all();
-
+ bond_destroy_sysfs();
rtnl_unlock();
-
+out:
return res;
+
}
static void __exit bonding_exit(void)
{
unregister_netdevice_notifier(&bond_netdev_notifier);
-
rtnl_lock();
bond_free_all();
+ bond_destroy_sysfs();
rtnl_unlock();
}
--- linux-2.6.11/drivers/net/bonding/Makefile.orig 2005-04-08 11:26:27.817311152 -0400
+++ linux-2.6.11/drivers/net/bonding/Makefile 2005-04-08 11:22:24.297772870 -0400
@@ -4,5 +4,5 @@
obj-$(CONFIG_BONDING) += bonding.o
-bonding-objs := bond_main.o bond_3ad.o bond_alb.o
+bonding-objs := bond_main.o bond_3ad.o bond_alb.o bond_sysfs.o
--- linux-2.6.11/drivers/net/bonding/bond_alb.c.orig 2005-04-08 11:24:30.619933771 -0400
+++ linux-2.6.11/drivers/net/bonding/bond_alb.c 2005-04-08 11:23:38.481883903 -0400
@@ -198,20 +198,21 @@ static int tlb_initialize(struct bonding
{
struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond));
int size = TLB_HASH_TABLE_SIZE * sizeof(struct tlb_client_info);
+ struct tlb_client_info *new_hashtbl;
int i;
spin_lock_init(&(bond_info->tx_hashtbl_lock));
- _lock_tx_hashtbl(bond);
-
- bond_info->tx_hashtbl = kmalloc(size, GFP_KERNEL);
- if (!bond_info->tx_hashtbl) {
+ new_hashtbl = kmalloc(size, GFP_KERNEL);
+ if (!new_hashtbl) {
printk(KERN_ERR DRV_NAME
- ": Error: %s: Failed to allocate TLB hash table\n",
+ ": %s: Error: Failed to allocate TLB hash table\n",
bond->dev->name);
- _unlock_tx_hashtbl(bond);
return -1;
}
+ _lock_tx_hashtbl(bond);
+
+ bond_info->tx_hashtbl = new_hashtbl;
memset(bond_info->tx_hashtbl, 0, size);
@@ -514,7 +515,8 @@ static void rlb_update_client(struct rlb
client_info->mac_dst);
if (!skb) {
printk(KERN_ERR DRV_NAME
- ": Error: failed to create an ARP packet\n");
+ ": %s: Error: failed to create an ARP packet\n",
+ client_info->slave->dev->master->name);
continue;
}
@@ -524,7 +526,8 @@ static void rlb_update_client(struct rlb
skb = vlan_put_tag(skb, client_info->vlan_id);
if (!skb) {
printk(KERN_ERR DRV_NAME
- ": Error: failed to insert VLAN tag\n");
+ ": %s: Error: failed to insert VLAN tag\n",
+ client_info->slave->dev->master->name);
continue;
}
}
@@ -607,8 +610,9 @@ static void rlb_req_update_subnet_client
if (!client_info->slave) {
printk(KERN_ERR DRV_NAME
- ": Error: found a client with no channel in "
- "the client's hash table\n");
+ ": %s: Error: found a client with no channel in "
+ "the client's hash table\n",
+ bond->dev->name);
continue;
}
/*update all clients using this src_ip, that are not assigned
@@ -798,21 +802,22 @@ static int rlb_initialize(struct bonding
{
struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond));
struct packet_type *pk_type = &(BOND_ALB_INFO(bond).rlb_pkt_type);
+ struct rlb_client_info *new_hashtbl;
int size = RLB_HASH_TABLE_SIZE * sizeof(struct rlb_client_info);
int i;
spin_lock_init(&(bond_info->rx_hashtbl_lock));
- _lock_rx_hashtbl(bond);
-
- bond_info->rx_hashtbl = kmalloc(size, GFP_KERNEL);
- if (!bond_info->rx_hashtbl) {
+ new_hashtbl = kmalloc(size, GFP_KERNEL);
+ if (!new_hashtbl) {
printk(KERN_ERR DRV_NAME
- ": Error: %s: Failed to allocate RLB hash table\n",
+ ": %s: Error: Failed to allocate RLB hash table\n",
bond->dev->name);
- _unlock_rx_hashtbl(bond);
return -1;
}
+ _lock_rx_hashtbl(bond);
+
+ bond_info->rx_hashtbl = new_hashtbl;
bond_info->rx_hashtbl_head = RLB_NULL_INDEX;
@@ -928,7 +933,8 @@ static void alb_send_learning_packets(st
skb = vlan_put_tag(skb, vlan->vlan_id);
if (!skb) {
printk(KERN_ERR DRV_NAME
- ": Error: failed to insert VLAN tag\n");
+ ": %s: Error: failed to insert VLAN tag\n",
+ bond->dev->name);
continue;
}
}
@@ -957,11 +963,11 @@ static int alb_set_slave_mac_addr(struct
s_addr.sa_family = dev->type;
if (dev_set_mac_address(dev, &s_addr)) {
printk(KERN_ERR DRV_NAME
- ": Error: dev_set_mac_address of dev %s failed! ALB "
+ ": %s: Error: dev_set_mac_address of dev %s failed! ALB "
"mode requires that the base driver support setting "
"the hw address also when the network device's "
"interface is open\n",
- dev->name);
+ dev->master->name, dev->name);
return -EOPNOTSUPP;
}
return 0;
@@ -1111,9 +1117,9 @@ static int alb_handle_addr_collision_on_
* of the new slave
*/
printk(KERN_ERR DRV_NAME
- ": Error: the hw address of slave %s is not "
+ ": %s: Error: the hw address of slave %s is not "
"unique - cannot enslave it!",
- slave->dev->name);
+ bond->dev->name, slave->dev->name);
return -EINVAL;
}
@@ -1159,16 +1165,16 @@ static int alb_handle_addr_collision_on_
bond->alb_info.rlb_enabled);
printk(KERN_WARNING DRV_NAME
- ": Warning: the hw address of slave %s is in use by "
+ ": %s: Warning: the hw address of slave %s is in use by "
"the bond; giving it the hw address of %s\n",
- slave->dev->name, free_mac_slave->dev->name);
+ bond->dev->name, slave->dev->name, free_mac_slave->dev->name);
} else if (has_bond_addr) {
printk(KERN_ERR DRV_NAME
- ": Error: the hw address of slave %s is in use by the "
+ ": %s: Error: the hw address of slave %s is in use by the "
"bond; couldn't find a slave with a free hw address to "
"give it (this should not have happened)\n",
- slave->dev->name);
+ bond->dev->name, slave->dev->name);
return -EFAULT;
}
@@ -1256,8 +1262,11 @@ int bond_alb_initialize(struct bonding *
tlb_deinitialize(bond);
return res;
}
+ } else {
+ bond->alb_info.rlb_enabled = 0;
}
+
return 0;
}
@@ -1415,7 +1424,7 @@ void bond_alb_monitor(struct bonding *bo
read_lock(&bond->curr_slave_lock);
bond_for_each_slave(bond, slave, i) {
- alb_send_learning_packets(slave,slave->dev->dev_addr);
+ alb_send_learning_packets(slave, slave->dev->dev_addr);
}
read_unlock(&bond->curr_slave_lock);
Index: kernel-2.6.spec
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-3/kernel-2.6.spec,v
retrieving revision 1.804.2.1
retrieving revision 1.804.2.2
diff -u -r1.804.2.1 -r1.804.2.2
--- kernel-2.6.spec 8 Apr 2005 14:45:00 -0000 1.804.2.1
+++ kernel-2.6.spec 8 Apr 2005 15:36:02 -0000 1.804.2.2
@@ -286,6 +286,8 @@
Patch1364: jwltest-e1000-update-5_7_6-k2.patch
Patch1365: jwltest-e1000-watchdog.patch
Patch1366: jwltest-e1000-workqueue-flush.patch
+Patch1367: jwltest-bonding-2_6_12-rc2.patch
+Patch1368: jwltest-bonding-sysfs.patch
# USB bits
Patch1400: linux-2.6.10-usb-use_both_schemes.patch
@@ -568,6 +570,10 @@
%patch1365 -p1
# E1000 flush workqueues at remove
%patch1366 -p1
+# Bonding backport from 2.6.12-rc2
+%patch1367 -p1
+# Bonding sysfs support
+%patch1368 -p1
# USB Bits.
# Enable both old and new style USB initialisation.
More information about the fedora-cvs-commits
mailing list