Commit d8158e53 authored by Andrew Morton's avatar Andrew Morton Committed by Jeff Garzik

[PATCH] Fix for 802.3ad shutdown issue

The patch below fixes a problem with shutting down 802.3ad bonds on the 2.6
kernel.  Taking the interface down or removing the module causes a stack
dump if spinlock debugging is enabled.  This patch was generated from the
2.6.9 kernel.

This patch has been peer reviewed by our Linux software engineering team,
and the fix has been verified by our test labs.
Signed-off-by: default avatarMitch Williams <mitch.a.williams@intel.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
parent f5c830f6
...@@ -469,6 +469,13 @@ ...@@ -469,6 +469,13 @@
* * Add support for VLAN hardware acceleration capable slaves. * * Add support for VLAN hardware acceleration capable slaves.
* * Add capability to tag self generated packets in ALB/TLB modes. * * Add capability to tag self generated packets in ALB/TLB modes.
* Set version to 2.6.0. * Set version to 2.6.0.
* 2004/10/29 - Mitch Williams <mitch.a.williams at intel dot com>
* - Fixed bug when unloading module while using 802.3ad. If
* spinlock debugging is turned on, this causes a stack dump.
* Solution is to move call to dev_remove_pack outside of the
* spinlock.
* Set version to 2.6.1.
*
*/ */
//#define BONDING_DEBUG 1 //#define BONDING_DEBUG 1
...@@ -3566,15 +3573,15 @@ static int bond_close(struct net_device *bond_dev) ...@@ -3566,15 +3573,15 @@ static int bond_close(struct net_device *bond_dev)
{ {
struct bonding *bond = bond_dev->priv; struct bonding *bond = bond_dev->priv;
write_lock_bh(&bond->lock);
bond_mc_list_destroy(bond);
if (bond->params.mode == BOND_MODE_8023AD) { if (bond->params.mode == BOND_MODE_8023AD) {
/* Unregister the receive of LACPDUs */ /* Unregister the receive of LACPDUs */
bond_unregister_lacpdu(bond); bond_unregister_lacpdu(bond);
} }
write_lock_bh(&bond->lock);
bond_mc_list_destroy(bond);
/* signal timers not to re-arm */ /* signal timers not to re-arm */
bond->kill_timers = 1; bond->kill_timers = 1;
......
...@@ -36,8 +36,8 @@ ...@@ -36,8 +36,8 @@
#include "bond_3ad.h" #include "bond_3ad.h"
#include "bond_alb.h" #include "bond_alb.h"
#define DRV_VERSION "2.6.0" #define DRV_VERSION "2.6.1"
#define DRV_RELDATE "January 14, 2004" #define DRV_RELDATE "October 29, 2004"
#define DRV_NAME "bonding" #define DRV_NAME "bonding"
#define DRV_DESCRIPTION "Ethernet Channel Bonding Driver" #define DRV_DESCRIPTION "Ethernet Channel Bonding Driver"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment