* Re: [PATCH 001/001] ipv4: enable use of 240/4 address space
From: Jan Engelhardt @ 2008-01-17 23:04 UTC (permalink / raw)
To: Vince Fuller; +Cc: netdev, linux-kernel
In-Reply-To: <20080108011057.GA21168@cisco.com>
On Jan 7 2008 17:10, Vince Fuller wrote:
>--- net/ipv4/devinet.c.orig 2007-04-12 10:16:23.000000000 -0700
>+++ net/ipv4/devinet.c 2008-01-07 16:55:59.000000000 -0800
>@@ -594,6 +594,8 @@ static __inline__ int inet_abc_len(__be3
> rc = 16;
> else if (IN_CLASSC(haddr))
> rc = 24;
>+ else if (IN_CLASSE(haddr))
>+ rc = 24;
> }
>
> return rc;
Any particular reason why 24?
^ permalink raw reply
* Re: [RFT] sky2: wake-on-lan configuration issues
From: Andrew Morton @ 2008-01-17 23:22 UTC (permalink / raw)
To: supersud501; +Cc: shemminger, rjw, netdev, linux-acpi, bugme-daemon
In-Reply-To: <478BCE98.5030709@yahoo.de>
On Mon, 14 Jan 2008 22:05:28 +0100
supersud501 <supersud501@yahoo.de> wrote:
>
>
> Stephen Hemminger wrote:
> > Please test this patch against Linus's current (approx 2.6.24-rc7-git5).
> > Ignore Andrew's premature reversion attempt...
> >
> > This patch disables config mode access after clearing PCI settings.
> >
>
> ...
>
> yes, that did it! just tested it (current linus git tree with patched
> sky with above patch), everything is clean now (dmesg output) and wol
> works even with the commit ac93a3946b676025fa55356180e8321639744b31
>
> so it the bug is fixed without the need to revert
> ac93a3946b676025fa55356180e8321639744b31.
Are we putting this into 2.6.24?
^ permalink raw reply
* Re: [patch for 2.6.24? 1/1] bonding: locking fix
From: Andrew Morton @ 2008-01-17 23:42 UTC (permalink / raw)
To: Jay Vosburgh; +Cc: olel, davem, jeff, shemminger, netdev
In-Reply-To: <16796.1200351673@death>
On Mon, 14 Jan 2008 15:01:13 -0800
Jay Vosburgh <fubar@us.ibm.com> wrote:
> Andrew Morton <akpm@linux-foundation.org> wrote:
> [...]
> >That's bond_lock.
> >
> >This patch (below) addresses what appears to me to be an obvious
> >imbalance in rtnl_lock.
> >
> >I don't care how it's fixed, really. Someone please fix it?
>
> I posted a correct patch for this a few days ago:
>
> http://marc.info/?l=linux-netdev&m=119975746803886&w=2
>
> The correct fix requires more than simply removing the rtnl calls.
>
> I've got a few other patches in the pipeline, so I'm planning to
> repost the set the above patch was a part of plus a few others, most
> likely tomorrow.
Can we get this bug fixed please? Today? It has been known about for more
than two months.
I can only assume that people don't use this feature much because this bug
will kill your kernel, every time.
Applying this:
--- a/drivers/net/bonding/bond_sysfs.c~bonding-locking-fix
+++ a/drivers/net/bonding/bond_sysfs.c
@@ -1111,8 +1111,6 @@ static ssize_t bonding_store_primary(str
out:
write_unlock_bh(&bond->lock);
- rtnl_unlock();
-
return count;
}
static DEVICE_ATTR(primary, S_IRUGO | S_IWUSR, bonding_show_primary, bonding_store_primary);
is better than doing nothing.
^ permalink raw reply
* [PATCH] [IrDA] af_irda memory leak fixes
From: Samuel Ortiz @ 2008-01-18 7:53 UTC (permalink / raw)
To: David S. Miller; +Cc: irda-users, netdev, Jesper Juhl
Hi Dave,
Here goes an IrDA patch against your latest net-2.6 tree.
This patch fixes some af_irda memory leaks.
It also checks for irias_new_obect() return value.
Signed-off-by: Jesper Juhl <jesper.juhl@gmail.com>
Signed-off-by: Samuel Ortiz <samuel@sortiz.org>
---
net/irda/af_irda.c | 30 +++++++++++++++++++++++++++---
1 file changed, 27 insertions(+), 3 deletions(-)
Index: net-2.6-davem/net/irda/af_irda.c
===================================================================
--- net-2.6-davem.orig/net/irda/af_irda.c 2008-01-17 06:00:10.000000000 +0100
+++ net-2.6-davem/net/irda/af_irda.c 2008-01-18 08:37:36.000000000 +0100
@@ -802,12 +802,18 @@
}
#endif /* CONFIG_IRDA_ULTRA */
+ self->ias_obj = irias_new_object(addr->sir_name, jiffies);
+ if (self->ias_obj == NULL)
+ return -ENOMEM;
+
err = irda_open_tsap(self, addr->sir_lsap_sel, addr->sir_name);
- if (err < 0)
+ if (err < 0) {
+ kfree(self->ias_obj->name);
+ kfree(self->ias_obj);
return err;
+ }
/* Register with LM-IAS */
- self->ias_obj = irias_new_object(addr->sir_name, jiffies);
irias_add_integer_attrib(self->ias_obj, "IrDA:TinyTP:LsapSel",
self->stsap_sel, IAS_KERNEL_ATTR);
irias_insert_object(self->ias_obj);
@@ -1825,7 +1831,7 @@
struct irda_ias_set *ias_opt;
struct ias_object *ias_obj;
struct ias_attrib * ias_attr; /* Attribute in IAS object */
- int opt;
+ int opt, free_ias = 0;
IRDA_DEBUG(2, "%s(%p)\n", __FUNCTION__, self);
@@ -1881,11 +1887,20 @@
/* Create a new object */
ias_obj = irias_new_object(ias_opt->irda_class_name,
jiffies);
+ if (ias_obj == NULL) {
+ kfree(ias_opt);
+ return -ENOMEM;
+ }
+ free_ias = 1;
}
/* Do we have the attribute already ? */
if(irias_find_attrib(ias_obj, ias_opt->irda_attrib_name)) {
kfree(ias_opt);
+ if (free_ias) {
+ kfree(ias_obj->name);
+ kfree(ias_obj);
+ }
return -EINVAL;
}
@@ -1904,6 +1919,11 @@
if(ias_opt->attribute.irda_attrib_octet_seq.len >
IAS_MAX_OCTET_STRING) {
kfree(ias_opt);
+ if (free_ias) {
+ kfree(ias_obj->name);
+ kfree(ias_obj);
+ }
+
return -EINVAL;
}
/* Add an octet sequence attribute */
@@ -1932,6 +1952,10 @@
break;
default :
kfree(ias_opt);
+ if (free_ias) {
+ kfree(ias_obj->name);
+ kfree(ias_obj);
+ }
return -EINVAL;
}
irias_insert_object(ias_obj);
^ permalink raw reply
* [PATCH 3/7] bonding: fix locking during alb failover and slave removal
From: Jay Vosburgh @ 2008-01-18 0:24 UTC (permalink / raw)
To: netdev
Cc: Jeff Garzik, David Miller, Andy Gospodarek, Andrew Morton,
Jay Vosburgh
In-Reply-To: <12006159071917-git-send-email-fubar@us.ibm.com>
alb_fasten_mac_swap (actually rlb_teach_disabled_mac_on_primary)
requries RTNL and no other locks. This could cause dev_set_promiscuity
and/or dev_set_mac_address to be called with improper locking.
Changed callers to hold only RTNL during calls to alb_fasten_mac_swap
or functions calling it. Updated header comments in affected functions to
reflect proper reality of locking requirements.
Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
---
drivers/net/bonding/bond_alb.c | 18 ++++++++++++------
drivers/net/bonding/bond_main.c | 14 ++++++++------
2 files changed, 20 insertions(+), 12 deletions(-)
diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
index 9b55a12..b57bc94 100644
--- a/drivers/net/bonding/bond_alb.c
+++ b/drivers/net/bonding/bond_alb.c
@@ -979,7 +979,7 @@ static void alb_swap_mac_addr(struct bonding *bond, struct slave *slave1, struct
/*
* Send learning packets after MAC address swap.
*
- * Called with RTNL and bond->lock held for read.
+ * Called with RTNL and no other locks
*/
static void alb_fasten_mac_swap(struct bonding *bond, struct slave *slave1,
struct slave *slave2)
@@ -987,6 +987,8 @@ static void alb_fasten_mac_swap(struct bonding *bond, struct slave *slave1,
int slaves_state_differ = (SLAVE_IS_OK(slave1) != SLAVE_IS_OK(slave2));
struct slave *disabled_slave = NULL;
+ ASSERT_RTNL();
+
/* fasten the change in the switch */
if (SLAVE_IS_OK(slave1)) {
alb_send_learning_packets(slave1, slave1->dev->dev_addr);
@@ -1031,7 +1033,7 @@ static void alb_fasten_mac_swap(struct bonding *bond, struct slave *slave1,
* a slave that has @slave's permanet address as its current address.
* We'll make sure that that slave no longer uses @slave's permanent address.
*
- * Caller must hold bond lock
+ * Caller must hold RTNL and no other locks
*/
static void alb_change_hw_addr_on_detach(struct bonding *bond, struct slave *slave)
{
@@ -1542,7 +1544,12 @@ int bond_alb_init_slave(struct bonding *bond, struct slave *slave)
return 0;
}
-/* Caller must hold bond lock for write */
+/*
+ * Remove slave from tlb and rlb hash tables, and fix up MAC addresses
+ * if necessary.
+ *
+ * Caller must hold RTNL and no other locks
+ */
void bond_alb_deinit_slave(struct bonding *bond, struct slave *slave)
{
if (bond->slave_cnt > 1) {
@@ -1658,12 +1665,11 @@ void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave
bond->alb_info.rlb_enabled);
}
- read_lock(&bond->lock);
-
if (swap_slave) {
alb_fasten_mac_swap(bond, swap_slave, new_slave);
+ read_lock(&bond->lock);
} else {
- /* fasten bond mac on new current slave */
+ read_lock(&bond->lock);
alb_send_learning_packets(new_slave, bond->dev->dev_addr);
}
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index b0b2603..77d004d 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -1746,7 +1746,9 @@ int bond_release(struct net_device *bond_dev, struct net_device *slave_dev)
* has been cleared (if our_slave == old_current),
* but before a new active slave is selected.
*/
+ write_unlock_bh(&bond->lock);
bond_alb_deinit_slave(bond, slave);
+ write_lock_bh(&bond->lock);
}
if (oldcurrent == slave) {
@@ -1905,6 +1907,12 @@ static int bond_release_all(struct net_device *bond_dev)
slave_dev = slave->dev;
bond_detach_slave(bond, slave);
+ /* now that the slave is detached, unlock and perform
+ * all the undo steps that should not be called from
+ * within a lock.
+ */
+ write_unlock_bh(&bond->lock);
+
if ((bond->params.mode == BOND_MODE_TLB) ||
(bond->params.mode == BOND_MODE_ALB)) {
/* must be called only after the slave
@@ -1915,12 +1923,6 @@ static int bond_release_all(struct net_device *bond_dev)
bond_compute_features(bond);
- /* now that the slave is detached, unlock and perform
- * all the undo steps that should not be called from
- * within a lock.
- */
- write_unlock_bh(&bond->lock);
-
bond_destroy_slave_symlinks(bond_dev, slave_dev);
bond_del_vlans_from_slave(bond, slave_dev);
--
1.5.3.4.206.g58ba4-dirty
^ permalink raw reply related
* [PATCH 2/7] bonding: fix ASSERT_RTNL that produces spurious warnings
From: Jay Vosburgh @ 2008-01-18 0:24 UTC (permalink / raw)
To: netdev
Cc: Jeff Garzik, David Miller, Andy Gospodarek, Andrew Morton,
Jay Vosburgh
In-Reply-To: <12006159063217-git-send-email-fubar@us.ibm.com>
Move an ASSERT_RTNL down to where we should hold only RTNL;
the existing check produces spurious warnings because we hold additional
locks at _bh, tripping a debug warning in spin_lock_mutex().
Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
---
drivers/net/bonding/bond_alb.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
index 25b8dbf..9b55a12 100644
--- a/drivers/net/bonding/bond_alb.c
+++ b/drivers/net/bonding/bond_alb.c
@@ -1601,9 +1601,6 @@ void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave
struct slave *swap_slave;
int i;
- if (new_slave)
- ASSERT_RTNL();
-
if (bond->curr_active_slave == new_slave) {
return;
}
@@ -1649,6 +1646,8 @@ void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave
write_unlock_bh(&bond->curr_slave_lock);
read_unlock(&bond->lock);
+ ASSERT_RTNL();
+
/* curr_active_slave must be set before calling alb_swap_mac_addr */
if (swap_slave) {
/* swap mac address */
--
1.5.3.4.206.g58ba4-dirty
^ permalink raw reply related
* [PATCH 0/7] bonding: 7 fixes for 2.6.24
From: Jay Vosburgh @ 2008-01-18 0:24 UTC (permalink / raw)
To: netdev; +Cc: Jeff Garzik, David Miller, Andy Gospodarek, Andrew Morton
Following are seven patches to fix locking problems,
silence locking-related warnings and resolve one recent regression
in the current 2.6.24-rc.
The first three patches are reposts, the rest are new.
patch 1: fix locking in sysfs primary/active selection
Call core network functions with expected locks to
eliminate potential deadlock and silence warnings.
patch 2: fix ASSERT_RTNL that produces spurious warnings
Relocate ASSERT_RTNL to remove a false warning; after patch,
ASSERT is located in code that holds only RTNL (additional locks were
causing the ASSERT to trip)
patch 3: fix locking during alb failover and slave removal
Fix all call paths into alb_fasten_mac_swap to hold only RTNL.
Eliminates potential deadlock and silences warnings.
patch 4: release slaves when master removed via sysfs
Insure that all slaves are removed when bond is destroyed via
sysfs.
patch 5: Fix up parameter parsing
Recent changes broke parameter parsing; this fixes things.
patch 6: Fix lock ordering for rtnl and bonding_rwsem
Resolves some lockdep warnings related to ordering between
rtnl and bonding_rwsem.
patch 7: Don't hold lock when calling rtnl_unlock
Since rtnl_unlock can sleep, don't hold any other locks when
calling it.
Patches are against the current netdev-2.6#upstream branch.
Please apply for 2.6.24.
-J
---
-Jay Vosburgh, IBM Linux Technology Center, fubar@us.ibm.com
^ permalink raw reply
* [PATCH 4/7] bonding: release slaves when master removed via sysfs
From: Jay Vosburgh @ 2008-01-18 0:25 UTC (permalink / raw)
To: netdev
Cc: Jeff Garzik, David Miller, Andy Gospodarek, Andrew Morton,
Jay Vosburgh
In-Reply-To: <12006159081875-git-send-email-fubar@us.ibm.com>
Add a call to bond_release_all in the bonding netdev event
handler for the master. This releases the slaves for the case of, e.g.,
"echo -bond0 > /sys/class/net/bonding_masters", which otherwise will spin
forever waiting for references to be released.
Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
---
drivers/net/bonding/bond_main.c | 4 +---
1 files changed, 1 insertions(+), 3 deletions(-)
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 77d004d..3ede0a2 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -3401,9 +3401,7 @@ static int bond_master_netdev_event(unsigned long event, struct net_device *bond
case NETDEV_CHANGENAME:
return bond_event_changename(event_bond);
case NETDEV_UNREGISTER:
- /*
- * TODO: remove a bond from the list?
- */
+ bond_release_all(event_bond->dev);
break;
default:
break;
--
1.5.3.4.206.g58ba4-dirty
^ permalink raw reply related
* [PATCH 1/7] bonding: fix locking in sysfs primary/active selection
From: Jay Vosburgh @ 2008-01-18 0:24 UTC (permalink / raw)
To: netdev
Cc: Jeff Garzik, David Miller, Andy Gospodarek, Andrew Morton,
Jay Vosburgh
In-Reply-To: <12006159033257-git-send-email-fubar@us.ibm.com>
Fix the functions that store the primary and active slave
options via sysfs to hold the correct locks in the correct order.
The bond_change_active_slave and bond_select_active_slave
functions both require rtnl, bond->lock for read and curr_slave_lock for
write_bh, and no other locks. This is so that the lower level
mode-specific functions (notably for balance-alb mode) can release locks
down to just rtnl in order to call, e.g., dev_set_mac_address with the
locks it expects (rtnl only).
Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
Signed-off-by: Andy Gospodarek <andy@greyhouse.net>
---
drivers/net/bonding/bond_sysfs.c | 15 ++++++++++-----
1 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c
index 11b76b3..28a2d80 100644
--- a/drivers/net/bonding/bond_sysfs.c
+++ b/drivers/net/bonding/bond_sysfs.c
@@ -1075,7 +1075,10 @@ static ssize_t bonding_store_primary(struct device *d,
struct slave *slave;
struct bonding *bond = to_bond(d);
- write_lock_bh(&bond->lock);
+ rtnl_lock();
+ read_lock(&bond->lock);
+ write_lock_bh(&bond->curr_slave_lock);
+
if (!USES_PRIMARY(bond->params.mode)) {
printk(KERN_INFO DRV_NAME
": %s: Unable to set primary slave; %s is in mode %d\n",
@@ -1109,8 +1112,8 @@ static ssize_t bonding_store_primary(struct device *d,
}
}
out:
- write_unlock_bh(&bond->lock);
-
+ write_unlock_bh(&bond->curr_slave_lock);
+ read_unlock(&bond->lock);
rtnl_unlock();
return count;
@@ -1190,7 +1193,8 @@ static ssize_t bonding_store_active_slave(struct device *d,
struct bonding *bond = to_bond(d);
rtnl_lock();
- write_lock_bh(&bond->lock);
+ read_lock(&bond->lock);
+ write_lock_bh(&bond->curr_slave_lock);
if (!USES_PRIMARY(bond->params.mode)) {
printk(KERN_INFO DRV_NAME
@@ -1247,7 +1251,8 @@ static ssize_t bonding_store_active_slave(struct device *d,
}
}
out:
- write_unlock_bh(&bond->lock);
+ write_unlock_bh(&bond->curr_slave_lock);
+ read_unlock(&bond->lock);
rtnl_unlock();
return count;
--
1.5.3.4.206.g58ba4-dirty
^ permalink raw reply related
* [PATCH 5/7] bonding: Fix up parameter parsing
From: Jay Vosburgh @ 2008-01-18 0:25 UTC (permalink / raw)
To: netdev
Cc: Jeff Garzik, David Miller, Andy Gospodarek, Andrew Morton,
Jay Vosburgh
In-Reply-To: <12006159102124-git-send-email-fubar@us.ibm.com>
A recent change to add an additional hash policy modified
bond_parse_parm, but it now does not correctly match parameters passed in
via sysfs.
Rewrote bond_parse_parm to handle (a) parameter matches that
are substrings of one another and (b) user input with whitespace (e.g.,
sysfs input often has a trailing newline).
Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
---
drivers/net/bonding/bond_main.c | 23 ++++++++++++++++-------
drivers/net/bonding/bond_sysfs.c | 8 ++++----
drivers/net/bonding/bonding.h | 4 +++-
3 files changed, 23 insertions(+), 12 deletions(-)
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 3ede0a2..379c5d8 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -4540,18 +4540,27 @@ static void bond_free_all(void)
/*
* Convert string input module parms. Accept either the
- * number of the mode or its string name.
+ * number of the mode or its string name. A bit complicated because
+ * some mode names are substrings of other names, and calls from sysfs
+ * may have whitespace in the name (trailing newlines, for example).
*/
-int bond_parse_parm(char *mode_arg, struct bond_parm_tbl *tbl)
+int bond_parse_parm(const char *buf, struct bond_parm_tbl *tbl)
{
- int i;
+ int mode = -1, i, rv;
+ char modestr[BOND_MAX_MODENAME_LEN + 1] = { 0, };
+
+ rv = sscanf(buf, "%d", &mode);
+ if (!rv) {
+ rv = sscanf(buf, "%20s", modestr);
+ if (!rv)
+ return -1;
+ }
for (i = 0; tbl[i].modename; i++) {
- if ((isdigit(*mode_arg) &&
- tbl[i].mode == simple_strtol(mode_arg, NULL, 0)) ||
- (strcmp(mode_arg, tbl[i].modename) == 0)) {
+ if (mode == tbl[i].mode)
+ return tbl[i].mode;
+ if (strcmp(modestr, tbl[i].modename) == 0)
return tbl[i].mode;
- }
}
return -1;
diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c
index 28a2d80..bff4f2b 100644
--- a/drivers/net/bonding/bond_sysfs.c
+++ b/drivers/net/bonding/bond_sysfs.c
@@ -423,7 +423,7 @@ static ssize_t bonding_store_mode(struct device *d,
goto out;
}
- new_value = bond_parse_parm((char *)buf, bond_mode_tbl);
+ new_value = bond_parse_parm(buf, bond_mode_tbl);
if (new_value < 0) {
printk(KERN_ERR DRV_NAME
": %s: Ignoring invalid mode value %.*s.\n",
@@ -478,7 +478,7 @@ static ssize_t bonding_store_xmit_hash(struct device *d,
goto out;
}
- new_value = bond_parse_parm((char *)buf, xmit_hashtype_tbl);
+ new_value = bond_parse_parm(buf, xmit_hashtype_tbl);
if (new_value < 0) {
printk(KERN_ERR DRV_NAME
": %s: Ignoring invalid xmit hash policy value %.*s.\n",
@@ -518,7 +518,7 @@ static ssize_t bonding_store_arp_validate(struct device *d,
int new_value;
struct bonding *bond = to_bond(d);
- new_value = bond_parse_parm((char *)buf, arp_validate_tbl);
+ new_value = bond_parse_parm(buf, arp_validate_tbl);
if (new_value < 0) {
printk(KERN_ERR DRV_NAME
": %s: Ignoring invalid arp_validate value %s\n",
@@ -941,7 +941,7 @@ static ssize_t bonding_store_lacp(struct device *d,
goto out;
}
- new_value = bond_parse_parm((char *)buf, bond_lacp_tbl);
+ new_value = bond_parse_parm(buf, bond_lacp_tbl);
if ((new_value == 1) || (new_value == 0)) {
bond->params.lacp_fast = new_value;
diff --git a/drivers/net/bonding/bonding.h b/drivers/net/bonding/bonding.h
index e1e4734..6d83be4 100644
--- a/drivers/net/bonding/bonding.h
+++ b/drivers/net/bonding/bonding.h
@@ -141,6 +141,8 @@ struct bond_parm_tbl {
int mode;
};
+#define BOND_MAX_MODENAME_LEN 20
+
struct vlan_entry {
struct list_head vlan_list;
__be32 vlan_ip;
@@ -314,7 +316,7 @@ void bond_mii_monitor(struct work_struct *);
void bond_loadbalance_arp_mon(struct work_struct *);
void bond_activebackup_arp_mon(struct work_struct *);
void bond_set_mode_ops(struct bonding *bond, int mode);
-int bond_parse_parm(char *mode_arg, struct bond_parm_tbl *tbl);
+int bond_parse_parm(const char *mode_arg, struct bond_parm_tbl *tbl);
void bond_select_active_slave(struct bonding *bond);
void bond_change_active_slave(struct bonding *bond, struct slave *new_active);
void bond_register_arp(struct bonding *);
--
1.5.3.4.206.g58ba4-dirty
^ permalink raw reply related
* [PATCH 7/7] bonding: Don't hold lock when calling rtnl_unlock
From: Jay Vosburgh @ 2008-01-18 0:25 UTC (permalink / raw)
To: netdev
Cc: Jeff Garzik, David Miller, Andy Gospodarek, Andrew Morton,
Jay Vosburgh
In-Reply-To: <12006159123054-git-send-email-fubar@us.ibm.com>
Change bond_mii_monitor to not hold any locks when calling rtnl_unlock,
as rtnl_unlock can sleep (when acquring another mutex in netdev_run_todo).
Bug reported by Makito SHIOKAWA <mshiokawa@miraclelinux.com>, who
included a different patch.
Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
---
drivers/net/bonding/bond_main.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 2c6da49..49a1982 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -2386,7 +2386,9 @@ void bond_mii_monitor(struct work_struct *work)
rtnl_lock();
read_lock(&bond->lock);
__bond_mii_monitor(bond, 1);
- rtnl_unlock();
+ read_unlock(&bond->lock);
+ rtnl_unlock(); /* might sleep, hold no other locks */
+ read_lock(&bond->lock);
}
delay = ((bond->params.miimon * HZ) / 1000) ? : 1;
--
1.5.3.4.206.g58ba4-dirty
^ permalink raw reply related
* [PATCH 6/7] bonding: fix lock ordering for rtnl and bonding_rwsem
From: Jay Vosburgh @ 2008-01-18 0:25 UTC (permalink / raw)
To: netdev
Cc: Jeff Garzik, David Miller, Andy Gospodarek, Andrew Morton,
Jay Vosburgh
In-Reply-To: <12006159111680-git-send-email-fubar@us.ibm.com>
Fix the handling of rtnl and the bonding_rwsem to always be acquired
in a consistent order (rtnl, then bonding_rwsem).
The existing code sometimes acquired them in this order, and sometimes
in the opposite order, which opens a window for deadlock between ifenslave
and sysfs.
Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
---
drivers/net/bonding/bond_main.c | 19 ++++++++++++++++
drivers/net/bonding/bond_sysfs.c | 43 ++++++++++++++-----------------------
2 files changed, 35 insertions(+), 27 deletions(-)
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 379c5d8..2c6da49 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -4874,9 +4874,22 @@ static struct lock_class_key bonding_netdev_xmit_lock_key;
int bond_create(char *name, struct bond_params *params, struct bonding **newbond)
{
struct net_device *bond_dev;
+ struct bonding *bond, *nxt;
int res;
rtnl_lock();
+ down_write(&bonding_rwsem);
+
+ /* Check to see if the bond already exists. */
+ list_for_each_entry_safe(bond, nxt, &bond_dev_list, bond_list)
+ if (strnicmp(bond->dev->name, name, IFNAMSIZ) == 0) {
+ printk(KERN_ERR DRV_NAME
+ ": cannot add bond %s; it already exists\n",
+ name);
+ res = -EPERM;
+ goto out_rtnl;
+ }
+
bond_dev = alloc_netdev(sizeof(struct bonding), name ? name : "",
ether_setup);
if (!bond_dev) {
@@ -4915,10 +4928,12 @@ int bond_create(char *name, struct bond_params *params, struct bonding **newbond
netif_carrier_off(bond_dev);
+ up_write(&bonding_rwsem);
rtnl_unlock(); /* allows sysfs registration of net device */
res = bond_create_sysfs_entry(bond_dev->priv);
if (res < 0) {
rtnl_lock();
+ down_write(&bonding_rwsem);
goto out_bond;
}
@@ -4929,6 +4944,7 @@ out_bond:
out_netdev:
free_netdev(bond_dev);
out_rtnl:
+ up_write(&bonding_rwsem);
rtnl_unlock();
return res;
}
@@ -4949,6 +4965,9 @@ static int __init bonding_init(void)
#ifdef CONFIG_PROC_FS
bond_create_proc_dir();
#endif
+
+ init_rwsem(&bonding_rwsem);
+
for (i = 0; i < max_bonds; i++) {
res = bond_create(NULL, &bonding_defaults, NULL);
if (res)
diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c
index bff4f2b..90a1f31 100644
--- a/drivers/net/bonding/bond_sysfs.c
+++ b/drivers/net/bonding/bond_sysfs.c
@@ -109,11 +109,10 @@ static ssize_t bonding_store_bonds(struct class *cls, const char *buffer, size_t
{
char command[IFNAMSIZ + 1] = {0, };
char *ifname;
- int res = count;
+ int rv, res = count;
struct bonding *bond;
struct bonding *nxt;
- down_write(&(bonding_rwsem));
sscanf(buffer, "%16s", command); /* IFNAMSIZ*/
ifname = command + 1;
if ((strlen(command) <= 1) ||
@@ -121,39 +120,28 @@ static ssize_t bonding_store_bonds(struct class *cls, const char *buffer, size_t
goto err_no_cmd;
if (command[0] == '+') {
-
- /* Check to see if the bond already exists. */
- list_for_each_entry_safe(bond, nxt, &bond_dev_list, bond_list)
- if (strnicmp(bond->dev->name, ifname, IFNAMSIZ) == 0) {
- printk(KERN_ERR DRV_NAME
- ": cannot add bond %s; it already exists\n",
- ifname);
- res = -EPERM;
- goto out;
- }
-
printk(KERN_INFO DRV_NAME
": %s is being created...\n", ifname);
- if (bond_create(ifname, &bonding_defaults, &bond)) {
- printk(KERN_INFO DRV_NAME
- ": %s interface already exists. Bond creation failed.\n",
- ifname);
- res = -EPERM;
+ rv = bond_create(ifname, &bonding_defaults, &bond);
+ if (rv) {
+ printk(KERN_INFO DRV_NAME ": Bond creation failed.\n");
+ res = rv;
}
goto out;
}
if (command[0] == '-') {
+ rtnl_lock();
+ down_write(&bonding_rwsem);
+
list_for_each_entry_safe(bond, nxt, &bond_dev_list, bond_list)
if (strnicmp(bond->dev->name, ifname, IFNAMSIZ) == 0) {
- rtnl_lock();
/* check the ref count on the bond's kobject.
* If it's > expected, then there's a file open,
* and we have to fail.
*/
if (atomic_read(&bond->dev->dev.kobj.kref.refcount)
> expected_refcount){
- rtnl_unlock();
printk(KERN_INFO DRV_NAME
": Unable remove bond %s due to open references.\n",
ifname);
@@ -164,6 +152,7 @@ static ssize_t bonding_store_bonds(struct class *cls, const char *buffer, size_t
": %s is being deleted...\n",
bond->dev->name);
bond_destroy(bond);
+ up_write(&bonding_rwsem);
rtnl_unlock();
goto out;
}
@@ -171,6 +160,8 @@ static ssize_t bonding_store_bonds(struct class *cls, const char *buffer, size_t
printk(KERN_ERR DRV_NAME
": unable to delete non-existent bond %s\n", ifname);
res = -ENODEV;
+ up_write(&bonding_rwsem);
+ rtnl_unlock();
goto out;
}
@@ -183,7 +174,6 @@ err_no_cmd:
* get called forever, which is bad.
*/
out:
- up_write(&(bonding_rwsem));
return res;
}
/* class attribute for bond_masters file. This ends up in /sys/class/net */
@@ -271,6 +261,9 @@ static ssize_t bonding_store_slaves(struct device *d,
/* Note: We can't hold bond->lock here, as bond_create grabs it. */
+ rtnl_lock();
+ down_write(&(bonding_rwsem));
+
sscanf(buffer, "%16s", command); /* IFNAMSIZ*/
ifname = command + 1;
if ((strlen(command) <= 1) ||
@@ -336,12 +329,10 @@ static ssize_t bonding_store_slaves(struct device *d,
dev->mtu = bond->dev->mtu;
}
}
- rtnl_lock();
res = bond_enslave(bond->dev, dev);
bond_for_each_slave(bond, slave, i)
if (strnicmp(slave->dev->name, ifname, IFNAMSIZ) == 0)
slave->original_mtu = original_mtu;
- rtnl_unlock();
if (res) {
ret = res;
}
@@ -359,12 +350,10 @@ static ssize_t bonding_store_slaves(struct device *d,
if (dev) {
printk(KERN_INFO DRV_NAME ": %s: Removing slave %s\n",
bond->dev->name, dev->name);
- rtnl_lock();
if (bond->setup_by_slave)
res = bond_release_and_destroy(bond->dev, dev);
else
res = bond_release(bond->dev, dev);
- rtnl_unlock();
if (res) {
ret = res;
goto out;
@@ -389,6 +378,8 @@ err_no_cmd:
ret = -EPERM;
out:
+ up_write(&(bonding_rwsem));
+ rtnl_unlock();
return ret;
}
@@ -1423,8 +1414,6 @@ int bond_create_sysfs(void)
int ret = 0;
struct bonding *firstbond;
- init_rwsem(&bonding_rwsem);
-
/* get the netdev class pointer */
firstbond = container_of(bond_dev_list.next, struct bonding, bond_list);
if (!firstbond)
--
1.5.3.4.206.g58ba4-dirty
^ permalink raw reply related
* Re: [patch for 2.6.24? 1/1] bonding: locking fix
From: Jay Vosburgh @ 2008-01-18 0:26 UTC (permalink / raw)
To: Andrew Morton; +Cc: olel, davem, jeff, shemminger, netdev
In-Reply-To: <20080117154243.9ee4265c.akpm@linux-foundation.org>
Andrew Morton <akpm@linux-foundation.org> wrote:
[...]
>Can we get this bug fixed please? Today? It has been known about for more
>than two months.
I just reposted the complete fix; it's #1 of the series of 7.
-J
---
-Jay Vosburgh, IBM Linux Technology Center, fubar@us.ibm.com
^ permalink raw reply
* Re: [PATCH 6/7] bonding: fix lock ordering for rtnl and bonding_rwsem
From: Andrew Morton @ 2008-01-18 0:38 UTC (permalink / raw)
To: Jay Vosburgh; +Cc: netdev, jgarzik, davem, andy, fubar
In-Reply-To: <12006159123054-git-send-email-fubar@us.ibm.com>
On Thu, 17 Jan 2008 16:25:02 -0800
Jay Vosburgh <fubar@us.ibm.com> wrote:
> Fix the handling of rtnl and the bonding_rwsem to always be acquired
> in a consistent order (rtnl, then bonding_rwsem).
>
> The existing code sometimes acquired them in this order, and sometimes
> in the opposite order, which opens a window for deadlock between ifenslave
> and sysfs.
>
> ...
>
> int bond_create(char *name, struct bond_params *params, struct bonding **newbond)
> {
> struct net_device *bond_dev;
> + struct bonding *bond, *nxt;
> int res;
>
> rtnl_lock();
> + down_write(&bonding_rwsem);
> +
> + /* Check to see if the bond already exists. */
> + list_for_each_entry_safe(bond, nxt, &bond_dev_list, bond_list)
this could (should) use list_for_each_entry().
> + if (strnicmp(bond->dev->name, name, IFNAMSIZ) == 0) {
> + printk(KERN_ERR DRV_NAME
> + ": cannot add bond %s; it already exists\n",
> + name);
> + res = -EPERM;
> + goto out_rtnl;
> + }
> +
> bond_dev = alloc_netdev(sizeof(struct bonding), name ? name : "",
> ether_setup);
> if (!bond_dev) {
> @@ -4915,10 +4928,12 @@ int bond_create(char *name, struct bond_params *params, struct bonding **newbond
>
> netif_carrier_off(bond_dev);
>
> + up_write(&bonding_rwsem);
> rtnl_unlock(); /* allows sysfs registration of net device */
> res = bond_create_sysfs_entry(bond_dev->priv);
> if (res < 0) {
> rtnl_lock();
> + down_write(&bonding_rwsem);
> goto out_bond;
> }
>
> @@ -4929,6 +4944,7 @@ out_bond:
> out_netdev:
> free_netdev(bond_dev);
> out_rtnl:
> + up_write(&bonding_rwsem);
> rtnl_unlock();
> return res;
> }
> @@ -4949,6 +4965,9 @@ static int __init bonding_init(void)
> #ifdef CONFIG_PROC_FS
> bond_create_proc_dir();
> #endif
> +
> + init_rwsem(&bonding_rwsem);
It would be better to initialise this at compile time with DECLARE_RWSEM().
But neither of those things need to be done for 2.6.24.
^ permalink raw reply
* Re: [PATCH 001/001] ipv4: enable use of 240/4 address space
From: Vince Fuller @ 2008-01-18 0:28 UTC (permalink / raw)
To: Jan Engelhardt; +Cc: Vince Fuller, netdev, linux-kernel
In-Reply-To: <Pine.LNX.4.64.0801180003330.18447@fbirervta.pbzchgretzou.qr>
On Fri, Jan 18, 2008 at 12:04:06AM +0100, Jan Engelhardt wrote:
>
> On Jan 7 2008 17:10, Vince Fuller wrote:
> >--- net/ipv4/devinet.c.orig 2007-04-12 10:16:23.000000000 -0700
> >+++ net/ipv4/devinet.c 2008-01-07 16:55:59.000000000 -0800
> >@@ -594,6 +594,8 @@ static __inline__ int inet_abc_len(__be3
> > rc = 16;
> > else if (IN_CLASSC(haddr))
> > rc = 24;
> >+ else if (IN_CLASSE(haddr))
> >+ rc = 24;
> > }
> >
> > return rc;
>
> Any particular reason why 24?
Using the same default as old-style "class-C" seemed to be the most expedient
thing to do.
In normal practice, the mask should be explicitly configured so this case
should not be frequently encountered.
--Vince
^ permalink raw reply
* Re: [patch for 2.6.24? 1/1] bonding: locking fix
From: Krzysztof Oledzki @ 2008-01-18 0:58 UTC (permalink / raw)
To: Jay Vosburgh; +Cc: Andrew Morton, davem, jeff, shemminger, netdev
In-Reply-To: <24607.1200616005@death>
[-- Attachment #1: Type: TEXT/PLAIN, Size: 65518 bytes --]
On Thu, 17 Jan 2008, Jay Vosburgh wrote:
>
> Andrew Morton <akpm@linux-foundation.org> wrote:
> [...]
>> Can we get this bug fixed please? Today? It has been known about for more
>> than two months.
>
> I just reposted the complete fix; it's #1 of the series of 7.
Bad news. :( 2.6.24-rc7 + patch #1 (bonding: fix locking in sysfs
primary/active selection):
bonding: bond0: setting mode to active-backup (1).
bonding: bond0: Setting MII monitoring interval to 100.
ADDRCONF(NETDEV_UP): bond0: link is not ready
bonding: bond0: Adding slave eth0.
e1000: eth0: e1000_watchdog: NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX
bonding: bond0: making interface eth0 the new active one.
bonding: bond0: first active interface up!
bonding: bond0: enslaving eth0 as an active interface with an up link.
bonding: bond0: Adding slave eth1.
ADDRCONF(NETDEV_CHANGE): bond0: link becomes ready
=========================================================
[ INFO: possible irq lock inversion dependency detected ]
2.6.24-rc7 #1
---------------------------------------------------------
events/0/9 just changed the state of lock:
(&mc->mca_lock){-+..}, at: [<c041255a>] mld_ifc_timer_expire+0x130/0x1fb
but this lock took another, soft-read-irq-unsafe lock in the past:
(&bond->lock){-.--}
and interrupts could create inverse lock ordering between them.
other info that might help us debug this:
4 locks held by events/0/9:
#0: (events){--..}, at: [<c0133d33>] run_workqueue+0x87/0x1b6
#1: ((linkwatch_work).work){--..}, at: [<c0133d33>] run_workqueue+0x87/0x1b6
#2: (rtnl_mutex){--..}, at: [<c03ac644>] linkwatch_event+0x5/0x22
#3: (&ndev->lock){-.-+}, at: [<c0412441>] mld_ifc_timer_expire+0x17/0x1fb
the first lock's dependencies:
-> (&mc->mca_lock){-+..} ops: 10 {
initial-use at:
[<c0104ee2>] dump_trace+0x83/0x8d
[<c0142890>] __lock_acquire+0x4ba/0xc07
[<c0109ef2>] save_stack_trace+0x20/0x3a
[<c0142f95>] __lock_acquire+0xbbf/0xc07
[<c0412d32>] ipv6_dev_mc_inc+0x24d/0x31c
[<c0143056>] lock_acquire+0x79/0x93
[<c04129b6>] igmp6_group_added+0x18/0x11d
[<c043a872>] _spin_lock_bh+0x3b/0x64
[<c04129b6>] igmp6_group_added+0x18/0x11d
[<c04129b6>] igmp6_group_added+0x18/0x11d
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c0412d88>] ipv6_dev_mc_inc+0x2a3/0x31c
[<c0412d32>] ipv6_dev_mc_inc+0x24d/0x31c
[<c0412dbd>] ipv6_dev_mc_inc+0x2d8/0x31c
[<c0412ae5>] ipv6_dev_mc_inc+0x0/0x31c
[<c0402134>] ipv6_add_dev+0x21c/0x24b
[<c040b95d>] ndisc_ifinfo_sysctl_change+0x0/0x1ef
[<c05c5ae9>] addrconf_init+0x13/0x193
[<c019a04b>] proc_net_fops_create+0x10/0x21
[<c041a418>] ip6_flowlabel_init+0x1e/0x20
[<c05c59c9>] inet6_init+0x1f0/0x2ad
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
in-softirq-W at:
[<c0142816>] __lock_acquire+0x440/0xc07
[<c013fdfe>] get_lock_stats+0xd/0x2e
[<c013fe29>] put_lock_stats+0xa/0x1e
[<c0143056>] lock_acquire+0x79/0x93
[<c041255a>] mld_ifc_timer_expire+0x130/0x1fb
[<c041242a>] mld_ifc_timer_expire+0x0/0x1fb
[<c043a872>] _spin_lock_bh+0x3b/0x64
[<c041255a>] mld_ifc_timer_expire+0x130/0x1fb
[<c041255a>] mld_ifc_timer_expire+0x130/0x1fb
[<c041242a>] mld_ifc_timer_expire+0x0/0x1fb
[<c0141f7d>] trace_hardirqs_on+0x10c/0x14c
[<c041242a>] mld_ifc_timer_expire+0x0/0x1fb
[<c012e02e>] run_timer_softirq+0xfa/0x15d
[<c012a982>] __do_softirq+0x56/0xdb
[<c0141f7d>] trace_hardirqs_on+0x10c/0x14c
[<c012a994>] __do_softirq+0x68/0xdb
[<c012aa3d>] do_softirq+0x36/0x51
[<c012af26>] local_bh_enable_ip+0xad/0xed
[<c03bfa03>] rt_run_flush+0x64/0x8b
[<c03e9b8a>] fib_netdev_event+0x61/0x65
[<c013ac34>] notifier_call_chain+0x2a/0x52
[<c013ac7e>] raw_notifier_call_chain+0x17/0x1a
[<c03a33d9>] netdev_state_change+0x18/0x29
[<c03ac611>] __linkwatch_run_queue+0x150/0x17e
[<c03ac65c>] linkwatch_event+0x1d/0x22
[<c0133d87>] run_workqueue+0xdb/0x1b6
[<c0133d33>] run_workqueue+0x87/0x1b6
[<c03ac63f>] linkwatch_event+0x0/0x22
[<c01347a7>] worker_thread+0x0/0x85
[<c0134820>] worker_thread+0x79/0x85
[<c0137255>] autoremove_wake_function+0x0/0x35
[<c013719e>] kthread+0x38/0x5e
[<c0137166>] kthread+0x0/0x5e
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
hardirq-on-W at:
[<c01417e2>] find_usage_backwards+0xbb/0xe2
[<c0104ee2>] dump_trace+0x83/0x8d
[<c014285e>] __lock_acquire+0x488/0xc07
[<c0109ef2>] save_stack_trace+0x20/0x3a
[<c0142f95>] __lock_acquire+0xbbf/0xc07
[<c0412d32>] ipv6_dev_mc_inc+0x24d/0x31c
[<c0143056>] lock_acquire+0x79/0x93
[<c04129b6>] igmp6_group_added+0x18/0x11d
[<c043a872>] _spin_lock_bh+0x3b/0x64
[<c04129b6>] igmp6_group_added+0x18/0x11d
[<c04129b6>] igmp6_group_added+0x18/0x11d
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c0412d88>] ipv6_dev_mc_inc+0x2a3/0x31c
[<c0412d32>] ipv6_dev_mc_inc+0x24d/0x31c
[<c0412dbd>] ipv6_dev_mc_inc+0x2d8/0x31c
[<c0412ae5>] ipv6_dev_mc_inc+0x0/0x31c
[<c0402134>] ipv6_add_dev+0x21c/0x24b
[<c040b95d>] ndisc_ifinfo_sysctl_change+0x0/0x1ef
[<c05c5ae9>] addrconf_init+0x13/0x193
[<c019a04b>] proc_net_fops_create+0x10/0x21
[<c041a418>] ip6_flowlabel_init+0x1e/0x20
[<c05c59c9>] inet6_init+0x1f0/0x2ad
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
}
... key at: [<c087e2d8>] __key.30803+0x0/0x8
-> (_xmit_ETHER){-...} ops: 8 {
initial-use at:
[<c0142890>] __lock_acquire+0x4ba/0xc07
[<c0143056>] lock_acquire+0x79/0x93
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c043a872>] _spin_lock_bh+0x3b/0x64
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c04129f4>] igmp6_group_added+0x56/0x11d
[<c0412d88>] ipv6_dev_mc_inc+0x2a3/0x31c
[<c0410100>] icmpv6_rcv+0x6d8/0x828
[<c0412dbd>] ipv6_dev_mc_inc+0x2d8/0x31c
[<c0412ae5>] ipv6_dev_mc_inc+0x0/0x31c
[<c0402134>] ipv6_add_dev+0x21c/0x24b
[<c040b95d>] ndisc_ifinfo_sysctl_change+0x0/0x1ef
[<c0402717>] addrconf_notify+0x60/0x7b7
[<c0142f95>] __lock_acquire+0xbbf/0xc07
[<c0141da0>] mark_held_locks+0x39/0x53
[<c0439946>] mutex_lock_nested+0x286/0x2ac
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c0439964>] mutex_lock_nested+0x2a4/0x2ac
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a487c>] register_netdevice_notifier+0x49/0x126
[<c05c5b83>] addrconf_init+0xad/0x193
[<c05c5af1>] addrconf_init+0x1b/0x193
[<c05c59c9>] inet6_init+0x1f0/0x2ad
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
hardirq-on-W at:
[<c014197a>] mark_lock+0x64/0x451
[<c014285e>] __lock_acquire+0x488/0xc07
[<c0143056>] lock_acquire+0x79/0x93
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c043a872>] _spin_lock_bh+0x3b/0x64
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c04129f4>] igmp6_group_added+0x56/0x11d
[<c0412d88>] ipv6_dev_mc_inc+0x2a3/0x31c
[<c0410100>] icmpv6_rcv+0x6d8/0x828
[<c0412dbd>] ipv6_dev_mc_inc+0x2d8/0x31c
[<c0412ae5>] ipv6_dev_mc_inc+0x0/0x31c
[<c0402134>] ipv6_add_dev+0x21c/0x24b
[<c040b95d>] ndisc_ifinfo_sysctl_change+0x0/0x1ef
[<c0402717>] addrconf_notify+0x60/0x7b7
[<c0142f95>] __lock_acquire+0xbbf/0xc07
[<c0141da0>] mark_held_locks+0x39/0x53
[<c0439946>] mutex_lock_nested+0x286/0x2ac
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c0439964>] mutex_lock_nested+0x2a4/0x2ac
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a487c>] register_netdevice_notifier+0x49/0x126
[<c05c5b83>] addrconf_init+0xad/0x193
[<c05c5af1>] addrconf_init+0x1b/0x193
[<c05c59c9>] inet6_init+0x1f0/0x2ad
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
}
... key at: [<c087adc8>] netdev_xmit_lock_key+0x8/0x1c0
-> (&on_slab_l3_key){....} ops: 859 {
initial-use at:
[<c043aed5>] _spin_unlock_irqrestore+0x40/0x58
[<c0142890>] __lock_acquire+0x4ba/0xc07
[<c013ae98>] __atomic_notifier_call_chain+0x0/0x94
[<c013af43>] atomic_notifier_call_chain+0x17/0x1a
[<c015023d>] get_page_from_freelist+0x25c/0x3e6
[<c0143056>] lock_acquire+0x79/0x93
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c043a80e>] _spin_lock+0x36/0x5f
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c0155ccf>] mod_zone_page_state+0x35/0x3c
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c01659cf>] kmem_cache_alloc+0x38/0x88
[<c0165d3f>] cache_alloc_refill+0x320/0x469
[<c01659cf>] kmem_cache_alloc+0x38/0x88
[<c05b31ca>] pidmap_init+0x15/0x149
[<c05a9872>] start_kernel+0x272/0x2cf
[<c05a90e0>] unknown_bootoption+0x0/0x195
[<ffffffff>] 0xffffffff
}
... key at: [<c086574c>] on_slab_l3_key+0x0/0x8
... acquired at:
[<c0142df3>] __lock_acquire+0xa1d/0xc07
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c0143056>] lock_acquire+0x79/0x93
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c043a80e>] _spin_lock+0x36/0x5f
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c01659cf>] kmem_cache_alloc+0x38/0x88
[<c03a2666>] __dev_addr_add+0x61/0xb4
[<c03a63be>] dev_mc_add+0x43/0x6a
[<c04129f4>] igmp6_group_added+0x56/0x11d
[<c0412d88>] ipv6_dev_mc_inc+0x2a3/0x31c
[<c0410100>] icmpv6_rcv+0x6d8/0x828
[<c0412dbd>] ipv6_dev_mc_inc+0x2d8/0x31c
[<c0412ae5>] ipv6_dev_mc_inc+0x0/0x31c
[<c0402134>] ipv6_add_dev+0x21c/0x24b
[<c040b95d>] ndisc_ifinfo_sysctl_change+0x0/0x1ef
[<c0402717>] addrconf_notify+0x60/0x7b7
[<c0142f95>] __lock_acquire+0xbbf/0xc07
[<c0141da0>] mark_held_locks+0x39/0x53
[<c0439946>] mutex_lock_nested+0x286/0x2ac
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c0439964>] mutex_lock_nested+0x2a4/0x2ac
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a487c>] register_netdevice_notifier+0x49/0x126
[<c05c5b83>] addrconf_init+0xad/0x193
[<c05c5af1>] addrconf_init+0x1b/0x193
[<c05c59c9>] inet6_init+0x1f0/0x2ad
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
... acquired at:
[<c0142df3>] __lock_acquire+0xa1d/0xc07
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c0143056>] lock_acquire+0x79/0x93
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c043a872>] _spin_lock_bh+0x3b/0x64
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c04129f4>] igmp6_group_added+0x56/0x11d
[<c0412d88>] ipv6_dev_mc_inc+0x2a3/0x31c
[<c0410100>] icmpv6_rcv+0x6d8/0x828
[<c0412dbd>] ipv6_dev_mc_inc+0x2d8/0x31c
[<c0412ae5>] ipv6_dev_mc_inc+0x0/0x31c
[<c0402134>] ipv6_add_dev+0x21c/0x24b
[<c040b95d>] ndisc_ifinfo_sysctl_change+0x0/0x1ef
[<c0402717>] addrconf_notify+0x60/0x7b7
[<c0142f95>] __lock_acquire+0xbbf/0xc07
[<c0141da0>] mark_held_locks+0x39/0x53
[<c0439946>] mutex_lock_nested+0x286/0x2ac
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c0439964>] mutex_lock_nested+0x2a4/0x2ac
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a487c>] register_netdevice_notifier+0x49/0x126
[<c05c5b83>] addrconf_init+0xad/0x193
[<c05c5af1>] addrconf_init+0x1b/0x193
[<c05c59c9>] inet6_init+0x1f0/0x2ad
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
-> (&bonding_netdev_xmit_lock_key){-...} ops: 6 {
initial-use at:
[<c0142890>] __lock_acquire+0x4ba/0xc07
[<c0143056>] lock_acquire+0x79/0x93
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c043a872>] _spin_lock_bh+0x3b/0x64
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c04129f4>] igmp6_group_added+0x56/0x11d
[<c0412d88>] ipv6_dev_mc_inc+0x2a3/0x31c
[<c0410100>] icmpv6_rcv+0x6d8/0x828
[<c0412dbd>] ipv6_dev_mc_inc+0x2d8/0x31c
[<c0412ae5>] ipv6_dev_mc_inc+0x0/0x31c
[<c0402134>] ipv6_add_dev+0x21c/0x24b
[<c040b95d>] ndisc_ifinfo_sysctl_change+0x0/0x1ef
[<c0402717>] addrconf_notify+0x60/0x7b7
[<c0142f95>] __lock_acquire+0xbbf/0xc07
[<c0141da0>] mark_held_locks+0x39/0x53
[<c0439946>] mutex_lock_nested+0x286/0x2ac
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c0439964>] mutex_lock_nested+0x2a4/0x2ac
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a487c>] register_netdevice_notifier+0x49/0x126
[<c05c5b83>] addrconf_init+0xad/0x193
[<c05c5af1>] addrconf_init+0x1b/0x193
[<c05c59c9>] inet6_init+0x1f0/0x2ad
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
hardirq-on-W at:
[<c014197a>] mark_lock+0x64/0x451
[<c014285e>] __lock_acquire+0x488/0xc07
[<c0143056>] lock_acquire+0x79/0x93
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c043a872>] _spin_lock_bh+0x3b/0x64
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c04129f4>] igmp6_group_added+0x56/0x11d
[<c0412d88>] ipv6_dev_mc_inc+0x2a3/0x31c
[<c0410100>] icmpv6_rcv+0x6d8/0x828
[<c0412dbd>] ipv6_dev_mc_inc+0x2d8/0x31c
[<c0412ae5>] ipv6_dev_mc_inc+0x0/0x31c
[<c0402134>] ipv6_add_dev+0x21c/0x24b
[<c040b95d>] ndisc_ifinfo_sysctl_change+0x0/0x1ef
[<c0402717>] addrconf_notify+0x60/0x7b7
[<c0142f95>] __lock_acquire+0xbbf/0xc07
[<c0141da0>] mark_held_locks+0x39/0x53
[<c0439946>] mutex_lock_nested+0x286/0x2ac
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c0439964>] mutex_lock_nested+0x2a4/0x2ac
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a487c>] register_netdevice_notifier+0x49/0x126
[<c05c5b83>] addrconf_init+0xad/0x193
[<c05c5af1>] addrconf_init+0x1b/0x193
[<c05c59c9>] inet6_init+0x1f0/0x2ad
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
}
... key at: [<c0877804>] bonding_netdev_xmit_lock_key+0x0/0x8
-> (&bond->lock){-.--} ops: 99 {
initial-use at:
[<c013fe29>] put_lock_stats+0xa/0x1e
[<c0142890>] __lock_acquire+0x4ba/0xc07
[<c0141da0>] mark_held_locks+0x39/0x53
[<c043aed5>] _spin_unlock_irqrestore+0x40/0x58
[<c0143056>] lock_acquire+0x79/0x93
[<c02edca1>] bond_get_stats+0x28/0xd0
[<c043a9fe>] _read_lock_bh+0x3b/0x64
[<c02edca1>] bond_get_stats+0x28/0xd0
[<c02edca1>] bond_get_stats+0x28/0xd0
[<c03aacdb>] rtnl_fill_ifinfo+0x2bf/0x563
[<c03ab259>] rtmsg_ifinfo+0x5d/0xdf
[<c03ab31a>] rtnetlink_event+0x3f/0x42
[<c013ac34>] notifier_call_chain+0x2a/0x52
[<c013ac7e>] raw_notifier_call_chain+0x17/0x1a
[<c03a3ad2>] register_netdevice+0x2a7/0x2e7
[<c02ed842>] bond_create+0x1f2/0x26a
[<c05bed76>] bonding_init+0x761/0x7ea
[<c05be5de>] e1000_init_module+0x45/0x7c
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
hardirq-on-W at:
[<c014285e>] __lock_acquire+0x488/0xc07
[<c01208c9>] try_to_wake_up+0x2ce/0x2d8
[<c0142f95>] __lock_acquire+0xbbf/0xc07
[<c0143056>] lock_acquire+0x79/0x93
[<c02eda55>] bond_set_multicast_list+0x1d/0x241
[<c043a935>] _write_lock_bh+0x3b/0x64
[<c02eda55>] bond_set_multicast_list+0x1d/0x241
[<c02eda55>] bond_set_multicast_list+0x1d/0x241
[<c013fe29>] put_lock_stats+0xa/0x1e
[<c03a1dcf>] __dev_set_rx_mode+0x7b/0x7d
[<c03a1f69>] dev_set_rx_mode+0x23/0x36
[<c03a4644>] dev_open+0x5e/0x77
[<c03a3313>] dev_change_flags+0x9d/0x14b
[<c03a2117>] __dev_get_by_name+0x68/0x73
[<c03e4142>] devinet_ioctl+0x22b/0x536
[<c03a4439>] dev_ioctl+0x46f/0x5b7
[<c039a564>] sock_ioctl+0x167/0x18b
[<c039a3fd>] sock_ioctl+0x0/0x18b
[<c0172677>] do_ioctl+0x1f/0x62
[<c01728e7>] vfs_ioctl+0x22d/0x23f
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c017292c>] sys_ioctl+0x33/0x4b
[<c0103e92>] sysenter_past_esp+0x5f/0xa5
[<ffffffff>] 0xffffffff
softirq-on-R at:
[<c014197a>] mark_lock+0x64/0x451
[<c013583a>] __kernel_text_address+0x5/0xe
[<c0104ee2>] dump_trace+0x83/0x8d
[<c014287d>] __lock_acquire+0x4a7/0xc07
[<c013fc6a>] save_trace+0x37/0x89
[<c0133d33>] run_workqueue+0x87/0x1b6
[<c0143056>] lock_acquire+0x79/0x93
[<c02eee43>] bond_mii_monitor+0x19/0x85
[<c043aa5d>] _read_lock+0x36/0x5f
[<c02eee43>] bond_mii_monitor+0x19/0x85
[<c02eee43>] bond_mii_monitor+0x19/0x85
[<c0133d87>] run_workqueue+0xdb/0x1b6
[<c0133d33>] run_workqueue+0x87/0x1b6
[<c02eee2a>] bond_mii_monitor+0x0/0x85
[<c01347a7>] worker_thread+0x0/0x85
[<c0134820>] worker_thread+0x79/0x85
[<c0137255>] autoremove_wake_function+0x0/0x35
[<c013719e>] kthread+0x38/0x5e
[<c0137166>] kthread+0x0/0x5e
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
hardirq-on-R at:
[<c013fdfe>] get_lock_stats+0xd/0x2e
[<c013fe29>] put_lock_stats+0xa/0x1e
[<c0142838>] __lock_acquire+0x462/0xc07
[<c0141da0>] mark_held_locks+0x39/0x53
[<c043aed5>] _spin_unlock_irqrestore+0x40/0x58
[<c0143056>] lock_acquire+0x79/0x93
[<c02edca1>] bond_get_stats+0x28/0xd0
[<c043a9fe>] _read_lock_bh+0x3b/0x64
[<c02edca1>] bond_get_stats+0x28/0xd0
[<c02edca1>] bond_get_stats+0x28/0xd0
[<c03aacdb>] rtnl_fill_ifinfo+0x2bf/0x563
[<c03ab259>] rtmsg_ifinfo+0x5d/0xdf
[<c03ab31a>] rtnetlink_event+0x3f/0x42
[<c013ac34>] notifier_call_chain+0x2a/0x52
[<c013ac7e>] raw_notifier_call_chain+0x17/0x1a
[<c03a3ad2>] register_netdevice+0x2a7/0x2e7
[<c02ed842>] bond_create+0x1f2/0x26a
[<c05bed76>] bonding_init+0x761/0x7ea
[<c05be5de>] e1000_init_module+0x45/0x7c
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
}
... key at: [<c08777d0>] __key.32976+0x0/0x8
-> (_xmit_ETHER){-...} ops: 8 {
initial-use at:
[<c0142890>] __lock_acquire+0x4ba/0xc07
[<c0143056>] lock_acquire+0x79/0x93
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c043a872>] _spin_lock_bh+0x3b/0x64
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c04129f4>] igmp6_group_added+0x56/0x11d
[<c0412d88>] ipv6_dev_mc_inc+0x2a3/0x31c
[<c0410100>] icmpv6_rcv+0x6d8/0x828
[<c0412dbd>] ipv6_dev_mc_inc+0x2d8/0x31c
[<c0412ae5>] ipv6_dev_mc_inc+0x0/0x31c
[<c0402134>] ipv6_add_dev+0x21c/0x24b
[<c040b95d>] ndisc_ifinfo_sysctl_change+0x0/0x1ef
[<c0402717>] addrconf_notify+0x60/0x7b7
[<c0142f95>] __lock_acquire+0xbbf/0xc07
[<c0141da0>] mark_held_locks+0x39/0x53
[<c0439946>] mutex_lock_nested+0x286/0x2ac
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c0439964>] mutex_lock_nested+0x2a4/0x2ac
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a487c>] register_netdevice_notifier+0x49/0x126
[<c05c5b83>] addrconf_init+0xad/0x193
[<c05c5af1>] addrconf_init+0x1b/0x193
[<c05c59c9>] inet6_init+0x1f0/0x2ad
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
hardirq-on-W at:
[<c014197a>] mark_lock+0x64/0x451
[<c014285e>] __lock_acquire+0x488/0xc07
[<c0143056>] lock_acquire+0x79/0x93
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c043a872>] _spin_lock_bh+0x3b/0x64
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c04129f4>] igmp6_group_added+0x56/0x11d
[<c0412d88>] ipv6_dev_mc_inc+0x2a3/0x31c
[<c0410100>] icmpv6_rcv+0x6d8/0x828
[<c0412dbd>] ipv6_dev_mc_inc+0x2d8/0x31c
[<c0412ae5>] ipv6_dev_mc_inc+0x0/0x31c
[<c0402134>] ipv6_add_dev+0x21c/0x24b
[<c040b95d>] ndisc_ifinfo_sysctl_change+0x0/0x1ef
[<c0402717>] addrconf_notify+0x60/0x7b7
[<c0142f95>] __lock_acquire+0xbbf/0xc07
[<c0141da0>] mark_held_locks+0x39/0x53
[<c0439946>] mutex_lock_nested+0x286/0x2ac
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c0439964>] mutex_lock_nested+0x2a4/0x2ac
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a487c>] register_netdevice_notifier+0x49/0x126
[<c05c5b83>] addrconf_init+0xad/0x193
[<c05c5af1>] addrconf_init+0x1b/0x193
[<c05c59c9>] inet6_init+0x1f0/0x2ad
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
}
... key at: [<c087adc8>] netdev_xmit_lock_key+0x8/0x1c0
-> (&on_slab_l3_key){....} ops: 859 {
initial-use at:
[<c043aed5>] _spin_unlock_irqrestore+0x40/0x58
[<c0142890>] __lock_acquire+0x4ba/0xc07
[<c013ae98>] __atomic_notifier_call_chain+0x0/0x94
[<c013af43>] atomic_notifier_call_chain+0x17/0x1a
[<c015023d>] get_page_from_freelist+0x25c/0x3e6
[<c0143056>] lock_acquire+0x79/0x93
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c043a80e>] _spin_lock+0x36/0x5f
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c0155ccf>] mod_zone_page_state+0x35/0x3c
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c01659cf>] kmem_cache_alloc+0x38/0x88
[<c0165d3f>] cache_alloc_refill+0x320/0x469
[<c01659cf>] kmem_cache_alloc+0x38/0x88
[<c05b31ca>] pidmap_init+0x15/0x149
[<c05a9872>] start_kernel+0x272/0x2cf
[<c05a90e0>] unknown_bootoption+0x0/0x195
[<ffffffff>] 0xffffffff
}
... key at: [<c086574c>] on_slab_l3_key+0x0/0x8
... acquired at:
[<c0142df3>] __lock_acquire+0xa1d/0xc07
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c0143056>] lock_acquire+0x79/0x93
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c043a80e>] _spin_lock+0x36/0x5f
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c01659cf>] kmem_cache_alloc+0x38/0x88
[<c03a2666>] __dev_addr_add+0x61/0xb4
[<c03a63be>] dev_mc_add+0x43/0x6a
[<c04129f4>] igmp6_group_added+0x56/0x11d
[<c0412d88>] ipv6_dev_mc_inc+0x2a3/0x31c
[<c0410100>] icmpv6_rcv+0x6d8/0x828
[<c0412dbd>] ipv6_dev_mc_inc+0x2d8/0x31c
[<c0412ae5>] ipv6_dev_mc_inc+0x0/0x31c
[<c0402134>] ipv6_add_dev+0x21c/0x24b
[<c040b95d>] ndisc_ifinfo_sysctl_change+0x0/0x1ef
[<c0402717>] addrconf_notify+0x60/0x7b7
[<c0142f95>] __lock_acquire+0xbbf/0xc07
[<c0141da0>] mark_held_locks+0x39/0x53
[<c0439946>] mutex_lock_nested+0x286/0x2ac
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c0439964>] mutex_lock_nested+0x2a4/0x2ac
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a487c>] register_netdevice_notifier+0x49/0x126
[<c05c5b83>] addrconf_init+0xad/0x193
[<c05c5af1>] addrconf_init+0x1b/0x193
[<c05c59c9>] inet6_init+0x1f0/0x2ad
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
... acquired at:
[<c0142df3>] __lock_acquire+0xa1d/0xc07
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c043aed5>] _spin_unlock_irqrestore+0x40/0x58
[<c0109ef2>] save_stack_trace+0x20/0x3a
[<c0143056>] lock_acquire+0x79/0x93
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c043a872>] _spin_lock_bh+0x3b/0x64
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c02ee472>] bond_change_active_slave+0x1a9/0x3bf
[<c02ec7a3>] bond_update_speed_duplex+0x26/0x65
[<c02ee991>] bond_select_active_slave+0x97/0xd3
[<c02ed20b>] bond_compute_features+0x45/0x84
[<c02ef9a4>] bond_enslave+0x6a7/0x884
[<c0439964>] mutex_lock_nested+0x2a4/0x2ac
[<c02f617b>] bonding_store_slaves+0x1ae/0x2fb
[<c02f5fcd>] bonding_store_slaves+0x0/0x2fb
[<c02ce8b7>] dev_attr_store+0x27/0x2c
[<c019bda1>] sysfs_write_file+0xad/0xe0
[<c019bcf4>] sysfs_write_file+0x0/0xe0
[<c0168e5c>] vfs_write+0x8a/0x10c
[<c0118562>] do_page_fault+0x0/0x54a
[<c01693e1>] sys_write+0x41/0x67
[<c0103e92>] sysenter_past_esp+0x5f/0xa5
[<ffffffff>] 0xffffffff
-> (lweventlist_lock){.+..} ops: 10 {
initial-use at:
[<c014197a>] mark_lock+0x64/0x451
[<c0142890>] __lock_acquire+0x4ba/0xc07
[<c02e363c>] e1000_read_phy_reg+0x1c7/0x1d3
[<c02e346b>] e1000_write_phy_reg+0xb9/0xc3
[<c024a82e>] delay_tsc+0x25/0x3b
[<c0143056>] lock_acquire+0x79/0x93
[<c03ac3eb>] linkwatch_add_event+0xd/0x2c
[<c043ab8f>] _spin_lock_irqsave+0x3f/0x6c
[<c03ac3eb>] linkwatch_add_event+0xd/0x2c
[<c03ac3eb>] linkwatch_add_event+0xd/0x2c
[<c03ac4af>] linkwatch_fire_event+0x25/0x37
[<c02e1c23>] e1000_probe+0xad1/0xbe8
[<c0257f1b>] pci_device_probe+0x36/0x57
[<c02d0e3f>] driver_probe_device+0xe1/0x15f
[<c043ae09>] _spin_unlock+0x25/0x3b
[<c0437e92>] klist_next+0x58/0x6d
[<c02d0f4f>] __driver_attach+0x0/0x7f
[<c02d0f98>] __driver_attach+0x49/0x7f
[<c02d03e3>] bus_for_each_dev+0x36/0x58
[<c02d0c97>] driver_attach+0x16/0x18
[<c02d0f4f>] __driver_attach+0x0/0x7f
[<c02d06da>] bus_add_driver+0x6d/0x18d
[<c0258065>] __pci_register_driver+0x53/0x7f
[<c05be5de>] e1000_init_module+0x45/0x7c
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
in-softirq-W at:
[<c011d1c0>] __wake_up_common+0x32/0x5c
[<c0142816>] __lock_acquire+0x440/0xc07
[<c043aed5>] _spin_unlock_irqrestore+0x40/0x58
[<c0143056>] lock_acquire+0x79/0x93
[<c03ac3eb>] linkwatch_add_event+0xd/0x2c
[<c02dfee1>] e1000_watchdog+0x0/0x5c9
[<c043ab8f>] _spin_lock_irqsave+0x3f/0x6c
[<c03ac3eb>] linkwatch_add_event+0xd/0x2c
[<c03ac3eb>] linkwatch_add_event+0xd/0x2c
[<c03ac4af>] linkwatch_fire_event+0x25/0x37
[<c03af436>] netif_carrier_on+0x16/0x27
[<c02e0136>] e1000_watchdog+0x255/0x5c9
[<c02dfee1>] e1000_watchdog+0x0/0x5c9
[<c012e02e>] run_timer_softirq+0xfa/0x15d
[<c012a982>] __do_softirq+0x56/0xdb
[<c0141f7d>] trace_hardirqs_on+0x10c/0x14c
[<c012a994>] __do_softirq+0x68/0xdb
[<c012aa3d>] do_softirq+0x36/0x51
[<c012abe3>] irq_exit+0x43/0x4e
[<c0114122>] smp_apic_timer_interrupt+0x74/0x80
[<c0104a01>] apic_timer_interrupt+0x29/0x38
[<c0104a0b>] apic_timer_interrupt+0x33/0x38
[<c01600d8>] sys_swapon+0x254/0x9aa
[<c01021a6>] mwait_idle_with_hints+0x3b/0x3f
[<c0102447>] mwait_idle+0x0/0xf
[<c0102581>] cpu_idle+0x99/0xc6
[<c05a98c7>] start_kernel+0x2c7/0x2cf
[<c05a90e0>] unknown_bootoption+0x0/0x195
[<ffffffff>] 0xffffffff
}
... key at: [<c058a194>] lweventlist_lock+0x14/0x40
... acquired at:
[<c0142df3>] __lock_acquire+0xa1d/0xc07
[<c03ac3eb>] linkwatch_add_event+0xd/0x2c
[<c0142f95>] __lock_acquire+0xbbf/0xc07
[<c0143056>] lock_acquire+0x79/0x93
[<c03ac3eb>] linkwatch_add_event+0xd/0x2c
[<c043ab8f>] _spin_lock_irqsave+0x3f/0x6c
[<c03ac3eb>] linkwatch_add_event+0xd/0x2c
[<c03ac3eb>] linkwatch_add_event+0xd/0x2c
[<c03ac4af>] linkwatch_fire_event+0x25/0x37
[<c03af436>] netif_carrier_on+0x16/0x27
[<c02ede0c>] bond_set_carrier+0x31/0x55
[<c02ee998>] bond_select_active_slave+0x9e/0xd3
[<c02ed20b>] bond_compute_features+0x45/0x84
[<c02ef9a4>] bond_enslave+0x6a7/0x884
[<c0439964>] mutex_lock_nested+0x2a4/0x2ac
[<c02f617b>] bonding_store_slaves+0x1ae/0x2fb
[<c02f5fcd>] bonding_store_slaves+0x0/0x2fb
[<c02ce8b7>] dev_attr_store+0x27/0x2c
[<c019bda1>] sysfs_write_file+0xad/0xe0
[<c019bcf4>] sysfs_write_file+0x0/0xe0
[<c0168e5c>] vfs_write+0x8a/0x10c
[<c0118562>] do_page_fault+0x0/0x54a
[<c01693e1>] sys_write+0x41/0x67
[<c0103e92>] sysenter_past_esp+0x5f/0xa5
[<ffffffff>] 0xffffffff
... acquired at:
[<c0142df3>] __lock_acquire+0xa1d/0xc07
[<c02eda55>] bond_set_multicast_list+0x1d/0x241
[<c0143056>] lock_acquire+0x79/0x93
[<c02eda55>] bond_set_multicast_list+0x1d/0x241
[<c043a935>] _write_lock_bh+0x3b/0x64
[<c02eda55>] bond_set_multicast_list+0x1d/0x241
[<c02eda55>] bond_set_multicast_list+0x1d/0x241
[<c013fe29>] put_lock_stats+0xa/0x1e
[<c03a1dcf>] __dev_set_rx_mode+0x7b/0x7d
[<c03a1f69>] dev_set_rx_mode+0x23/0x36
[<c03a4644>] dev_open+0x5e/0x77
[<c03a3313>] dev_change_flags+0x9d/0x14b
[<c03a2117>] __dev_get_by_name+0x68/0x73
[<c03e4142>] devinet_ioctl+0x22b/0x536
[<c03a4439>] dev_ioctl+0x46f/0x5b7
[<c039a564>] sock_ioctl+0x167/0x18b
[<c039a3fd>] sock_ioctl+0x0/0x18b
[<c0172677>] do_ioctl+0x1f/0x62
[<c01728e7>] vfs_ioctl+0x22d/0x23f
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c017292c>] sys_ioctl+0x33/0x4b
[<c0103e92>] sysenter_past_esp+0x5f/0xa5
[<ffffffff>] 0xffffffff
... acquired at:
[<c0142df3>] __lock_acquire+0xa1d/0xc07
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c0143056>] lock_acquire+0x79/0x93
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c043a872>] _spin_lock_bh+0x3b/0x64
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c04129f4>] igmp6_group_added+0x56/0x11d
[<c0412d88>] ipv6_dev_mc_inc+0x2a3/0x31c
[<c0410100>] icmpv6_rcv+0x6d8/0x828
[<c0412dbd>] ipv6_dev_mc_inc+0x2d8/0x31c
[<c0412ae5>] ipv6_dev_mc_inc+0x0/0x31c
[<c0402134>] ipv6_add_dev+0x21c/0x24b
[<c040b95d>] ndisc_ifinfo_sysctl_change+0x0/0x1ef
[<c0402717>] addrconf_notify+0x60/0x7b7
[<c0142f95>] __lock_acquire+0xbbf/0xc07
[<c0141da0>] mark_held_locks+0x39/0x53
[<c0439946>] mutex_lock_nested+0x286/0x2ac
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c0439964>] mutex_lock_nested+0x2a4/0x2ac
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a487c>] register_netdevice_notifier+0x49/0x126
[<c05c5b83>] addrconf_init+0xad/0x193
[<c05c5af1>] addrconf_init+0x1b/0x193
[<c05c59c9>] inet6_init+0x1f0/0x2ad
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
the second lock's dependencies:
-> (&bond->lock){-.--} ops: 99 {
initial-use at:
[<c013fe29>] put_lock_stats+0xa/0x1e
[<c0142890>] __lock_acquire+0x4ba/0xc07
[<c0141da0>] mark_held_locks+0x39/0x53
[<c043aed5>] _spin_unlock_irqrestore+0x40/0x58
[<c0143056>] lock_acquire+0x79/0x93
[<c02edca1>] bond_get_stats+0x28/0xd0
[<c043a9fe>] _read_lock_bh+0x3b/0x64
[<c02edca1>] bond_get_stats+0x28/0xd0
[<c02edca1>] bond_get_stats+0x28/0xd0
[<c03aacdb>] rtnl_fill_ifinfo+0x2bf/0x563
[<c03ab259>] rtmsg_ifinfo+0x5d/0xdf
[<c03ab31a>] rtnetlink_event+0x3f/0x42
[<c013ac34>] notifier_call_chain+0x2a/0x52
[<c013ac7e>] raw_notifier_call_chain+0x17/0x1a
[<c03a3ad2>] register_netdevice+0x2a7/0x2e7
[<c02ed842>] bond_create+0x1f2/0x26a
[<c05bed76>] bonding_init+0x761/0x7ea
[<c05be5de>] e1000_init_module+0x45/0x7c
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
hardirq-on-W at:
[<c014285e>] __lock_acquire+0x488/0xc07
[<c01208c9>] try_to_wake_up+0x2ce/0x2d8
[<c0142f95>] __lock_acquire+0xbbf/0xc07
[<c0143056>] lock_acquire+0x79/0x93
[<c02eda55>] bond_set_multicast_list+0x1d/0x241
[<c043a935>] _write_lock_bh+0x3b/0x64
[<c02eda55>] bond_set_multicast_list+0x1d/0x241
[<c02eda55>] bond_set_multicast_list+0x1d/0x241
[<c013fe29>] put_lock_stats+0xa/0x1e
[<c03a1dcf>] __dev_set_rx_mode+0x7b/0x7d
[<c03a1f69>] dev_set_rx_mode+0x23/0x36
[<c03a4644>] dev_open+0x5e/0x77
[<c03a3313>] dev_change_flags+0x9d/0x14b
[<c03a2117>] __dev_get_by_name+0x68/0x73
[<c03e4142>] devinet_ioctl+0x22b/0x536
[<c03a4439>] dev_ioctl+0x46f/0x5b7
[<c039a564>] sock_ioctl+0x167/0x18b
[<c039a3fd>] sock_ioctl+0x0/0x18b
[<c0172677>] do_ioctl+0x1f/0x62
[<c01728e7>] vfs_ioctl+0x22d/0x23f
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c017292c>] sys_ioctl+0x33/0x4b
[<c0103e92>] sysenter_past_esp+0x5f/0xa5
[<ffffffff>] 0xffffffff
softirq-on-R at:
[<c014197a>] mark_lock+0x64/0x451
[<c013583a>] __kernel_text_address+0x5/0xe
[<c0104ee2>] dump_trace+0x83/0x8d
[<c014287d>] __lock_acquire+0x4a7/0xc07
[<c013fc6a>] save_trace+0x37/0x89
[<c0133d33>] run_workqueue+0x87/0x1b6
[<c0143056>] lock_acquire+0x79/0x93
[<c02eee43>] bond_mii_monitor+0x19/0x85
[<c043aa5d>] _read_lock+0x36/0x5f
[<c02eee43>] bond_mii_monitor+0x19/0x85
[<c02eee43>] bond_mii_monitor+0x19/0x85
[<c0133d87>] run_workqueue+0xdb/0x1b6
[<c0133d33>] run_workqueue+0x87/0x1b6
[<c02eee2a>] bond_mii_monitor+0x0/0x85
[<c01347a7>] worker_thread+0x0/0x85
[<c0134820>] worker_thread+0x79/0x85
[<c0137255>] autoremove_wake_function+0x0/0x35
[<c013719e>] kthread+0x38/0x5e
[<c0137166>] kthread+0x0/0x5e
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
hardirq-on-R at:
[<c013fdfe>] get_lock_stats+0xd/0x2e
[<c013fe29>] put_lock_stats+0xa/0x1e
[<c0142838>] __lock_acquire+0x462/0xc07
[<c0141da0>] mark_held_locks+0x39/0x53
[<c043aed5>] _spin_unlock_irqrestore+0x40/0x58
[<c0143056>] lock_acquire+0x79/0x93
[<c02edca1>] bond_get_stats+0x28/0xd0
[<c043a9fe>] _read_lock_bh+0x3b/0x64
[<c02edca1>] bond_get_stats+0x28/0xd0
[<c02edca1>] bond_get_stats+0x28/0xd0
[<c03aacdb>] rtnl_fill_ifinfo+0x2bf/0x563
[<c03ab259>] rtmsg_ifinfo+0x5d/0xdf
[<c03ab31a>] rtnetlink_event+0x3f/0x42
[<c013ac34>] notifier_call_chain+0x2a/0x52
[<c013ac7e>] raw_notifier_call_chain+0x17/0x1a
[<c03a3ad2>] register_netdevice+0x2a7/0x2e7
[<c02ed842>] bond_create+0x1f2/0x26a
[<c05bed76>] bonding_init+0x761/0x7ea
[<c05be5de>] e1000_init_module+0x45/0x7c
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
}
... key at: [<c08777d0>] __key.32976+0x0/0x8
-> (_xmit_ETHER){-...} ops: 8 {
initial-use at:
[<c0142890>] __lock_acquire+0x4ba/0xc07
[<c0143056>] lock_acquire+0x79/0x93
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c043a872>] _spin_lock_bh+0x3b/0x64
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c04129f4>] igmp6_group_added+0x56/0x11d
[<c0412d88>] ipv6_dev_mc_inc+0x2a3/0x31c
[<c0410100>] icmpv6_rcv+0x6d8/0x828
[<c0412dbd>] ipv6_dev_mc_inc+0x2d8/0x31c
[<c0412ae5>] ipv6_dev_mc_inc+0x0/0x31c
[<c0402134>] ipv6_add_dev+0x21c/0x24b
[<c040b95d>] ndisc_ifinfo_sysctl_change+0x0/0x1ef
[<c0402717>] addrconf_notify+0x60/0x7b7
[<c0142f95>] __lock_acquire+0xbbf/0xc07
[<c0141da0>] mark_held_locks+0x39/0x53
[<c0439946>] mutex_lock_nested+0x286/0x2ac
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c0439964>] mutex_lock_nested+0x2a4/0x2ac
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a487c>] register_netdevice_notifier+0x49/0x126
[<c05c5b83>] addrconf_init+0xad/0x193
[<c05c5af1>] addrconf_init+0x1b/0x193
[<c05c59c9>] inet6_init+0x1f0/0x2ad
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
hardirq-on-W at:
[<c014197a>] mark_lock+0x64/0x451
[<c014285e>] __lock_acquire+0x488/0xc07
[<c0143056>] lock_acquire+0x79/0x93
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c043a872>] _spin_lock_bh+0x3b/0x64
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c04129f4>] igmp6_group_added+0x56/0x11d
[<c0412d88>] ipv6_dev_mc_inc+0x2a3/0x31c
[<c0410100>] icmpv6_rcv+0x6d8/0x828
[<c0412dbd>] ipv6_dev_mc_inc+0x2d8/0x31c
[<c0412ae5>] ipv6_dev_mc_inc+0x0/0x31c
[<c0402134>] ipv6_add_dev+0x21c/0x24b
[<c040b95d>] ndisc_ifinfo_sysctl_change+0x0/0x1ef
[<c0402717>] addrconf_notify+0x60/0x7b7
[<c0142f95>] __lock_acquire+0xbbf/0xc07
[<c0141da0>] mark_held_locks+0x39/0x53
[<c0439946>] mutex_lock_nested+0x286/0x2ac
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c0439964>] mutex_lock_nested+0x2a4/0x2ac
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a487c>] register_netdevice_notifier+0x49/0x126
[<c05c5b83>] addrconf_init+0xad/0x193
[<c05c5af1>] addrconf_init+0x1b/0x193
[<c05c59c9>] inet6_init+0x1f0/0x2ad
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
}
... key at: [<c087adc8>] netdev_xmit_lock_key+0x8/0x1c0
-> (&on_slab_l3_key){....} ops: 859 {
initial-use at:
[<c043aed5>] _spin_unlock_irqrestore+0x40/0x58
[<c0142890>] __lock_acquire+0x4ba/0xc07
[<c013ae98>] __atomic_notifier_call_chain+0x0/0x94
[<c013af43>] atomic_notifier_call_chain+0x17/0x1a
[<c015023d>] get_page_from_freelist+0x25c/0x3e6
[<c0143056>] lock_acquire+0x79/0x93
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c043a80e>] _spin_lock+0x36/0x5f
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c0155ccf>] mod_zone_page_state+0x35/0x3c
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c01659cf>] kmem_cache_alloc+0x38/0x88
[<c0165d3f>] cache_alloc_refill+0x320/0x469
[<c01659cf>] kmem_cache_alloc+0x38/0x88
[<c05b31ca>] pidmap_init+0x15/0x149
[<c05a9872>] start_kernel+0x272/0x2cf
[<c05a90e0>] unknown_bootoption+0x0/0x195
[<ffffffff>] 0xffffffff
}
... key at: [<c086574c>] on_slab_l3_key+0x0/0x8
... acquired at:
[<c0142df3>] __lock_acquire+0xa1d/0xc07
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c0143056>] lock_acquire+0x79/0x93
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c043a80e>] _spin_lock+0x36/0x5f
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c0165a73>] cache_alloc_refill+0x54/0x469
[<c01659cf>] kmem_cache_alloc+0x38/0x88
[<c03a2666>] __dev_addr_add+0x61/0xb4
[<c03a63be>] dev_mc_add+0x43/0x6a
[<c04129f4>] igmp6_group_added+0x56/0x11d
[<c0412d88>] ipv6_dev_mc_inc+0x2a3/0x31c
[<c0410100>] icmpv6_rcv+0x6d8/0x828
[<c0412dbd>] ipv6_dev_mc_inc+0x2d8/0x31c
[<c0412ae5>] ipv6_dev_mc_inc+0x0/0x31c
[<c0402134>] ipv6_add_dev+0x21c/0x24b
[<c040b95d>] ndisc_ifinfo_sysctl_change+0x0/0x1ef
[<c0402717>] addrconf_notify+0x60/0x7b7
[<c0142f95>] __lock_acquire+0xbbf/0xc07
[<c0141da0>] mark_held_locks+0x39/0x53
[<c0439946>] mutex_lock_nested+0x286/0x2ac
[<c0141f93>] trace_hardirqs_on+0x122/0x14c
[<c0439964>] mutex_lock_nested+0x2a4/0x2ac
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a4841>] register_netdevice_notifier+0xe/0x126
[<c03a487c>] register_netdevice_notifier+0x49/0x126
[<c05c5b83>] addrconf_init+0xad/0x193
[<c05c5af1>] addrconf_init+0x1b/0x193
[<c05c59c9>] inet6_init+0x1f0/0x2ad
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
... acquired at:
[<c0142df3>] __lock_acquire+0xa1d/0xc07
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c043aed5>] _spin_unlock_irqrestore+0x40/0x58
[<c0109ef2>] save_stack_trace+0x20/0x3a
[<c0143056>] lock_acquire+0x79/0x93
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c043a872>] _spin_lock_bh+0x3b/0x64
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c03a6395>] dev_mc_add+0x1a/0x6a
[<c02ee472>] bond_change_active_slave+0x1a9/0x3bf
[<c02ec7a3>] bond_update_speed_duplex+0x26/0x65
[<c02ee991>] bond_select_active_slave+0x97/0xd3
[<c02ed20b>] bond_compute_features+0x45/0x84
[<c02ef9a4>] bond_enslave+0x6a7/0x884
[<c0439964>] mutex_lock_nested+0x2a4/0x2ac
[<c02f617b>] bonding_store_slaves+0x1ae/0x2fb
[<c02f5fcd>] bonding_store_slaves+0x0/0x2fb
[<c02ce8b7>] dev_attr_store+0x27/0x2c
[<c019bda1>] sysfs_write_file+0xad/0xe0
[<c019bcf4>] sysfs_write_file+0x0/0xe0
[<c0168e5c>] vfs_write+0x8a/0x10c
[<c0118562>] do_page_fault+0x0/0x54a
[<c01693e1>] sys_write+0x41/0x67
[<c0103e92>] sysenter_past_esp+0x5f/0xa5
[<ffffffff>] 0xffffffff
-> (lweventlist_lock){.+..} ops: 10 {
initial-use at:
[<c014197a>] mark_lock+0x64/0x451
[<c0142890>] __lock_acquire+0x4ba/0xc07
[<c02e363c>] e1000_read_phy_reg+0x1c7/0x1d3
[<c02e346b>] e1000_write_phy_reg+0xb9/0xc3
[<c024a82e>] delay_tsc+0x25/0x3b
[<c0143056>] lock_acquire+0x79/0x93
[<c03ac3eb>] linkwatch_add_event+0xd/0x2c
[<c043ab8f>] _spin_lock_irqsave+0x3f/0x6c
[<c03ac3eb>] linkwatch_add_event+0xd/0x2c
[<c03ac3eb>] linkwatch_add_event+0xd/0x2c
[<c03ac4af>] linkwatch_fire_event+0x25/0x37
[<c02e1c23>] e1000_probe+0xad1/0xbe8
[<c0257f1b>] pci_device_probe+0x36/0x57
[<c02d0e3f>] driver_probe_device+0xe1/0x15f
[<c043ae09>] _spin_unlock+0x25/0x3b
[<c0437e92>] klist_next+0x58/0x6d
[<c02d0f4f>] __driver_attach+0x0/0x7f
[<c02d0f98>] __driver_attach+0x49/0x7f
[<c02d03e3>] bus_for_each_dev+0x36/0x58
[<c02d0c97>] driver_attach+0x16/0x18
[<c02d0f4f>] __driver_attach+0x0/0x7f
[<c02d06da>] bus_add_driver+0x6d/0x18d
[<c0258065>] __pci_register_driver+0x53/0x7f
[<c05be5de>] e1000_init_module+0x45/0x7c
[<c05a9499>] kernel_init+0x150/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c05a9349>] kernel_init+0x0/0x2b7
[<c0104baf>] kernel_thread_helper+0x7/0x10
[<ffffffff>] 0xffffffff
in-softirq-W at:
[<c011d1c0>] __wake_up_common+0x32/0x5c
[<c0142816>] __lock_acquire+0x440/0xc07
[<c043aed5>] _spin_unlock_irqrestore+0x40/0x58
[<c0143056>] lock_acquire+0x79/0x93
[<c03ac3eb>] linkwatch_add_event+0xd/0x2c
[<c02dfee1>] e1000_watchdog+0x0/0x5c9
[<c043ab8f>] _spin_lock_irqsave+0x3f/0x6c
[<c03ac3eb>] linkwatch_add_event+0xd/0x2c
[<c03ac3eb>] linkwatch_add_event+0xd/0x2c
[<c03ac4af>] linkwatch_fire_event+0x25/0x37
[<c03af436>] netif_carrier_on+0x16/0x27
[<c02e0136>] e1000_watchdog+0x255/0x5c9
[<c02dfee1>] e1000_watchdog+0x0/0x5c9
[<c012e02e>] run_timer_softirq+0xfa/0x15d
[<c012a982>] __do_softirq+0x56/0xdb
[<c0141f7d>] trace_hardirqs_on+0x10c/0x14c
[<c012a994>] __do_softirq+0x68/0xdb
[<c012aa3d>] do_softirq+0x36/0x51
[<c012abe3>] irq_exit+0x43/0x4e
[<c0114122>] smp_apic_timer_interrupt+0x74/0x80
[<c0104a01>] apic_timer_interrupt+0x29/0x38
[<c0104a0b>] apic_timer_interrupt+0x33/0x38
[<c01600d8>] sys_swapon+0x254/0x9aa
[<c01021a6>] mwait_idle_with_hints+0x3b/0x3f
[<c0102447>] mwait_idle+0x0/0xf
[<c0102581>] cpu_idle+0x99/0xc6
[<c05a98c7>] start_kernel+0x2c7/0x2cf
[<c05a90e0>] unknown_bootoption+0x0/0x195
[<ffffffff>] 0xffffffff
}
... key at: [<c058a194>] lweventlist_lock+0x14/0x40
... acquired at:
[<c0142df3>] __lock_acquire+0xa1d/0xc07
[<c03ac3eb>] linkwatch_add_event+0xd/0x2c
[<c0142f95>] __lock_acquire+0xbbf/0xc07
[<c0143056>] lock_acquire+0x79/0x93
[<c03ac3eb>] linkwatch_add_event+0xd/0x2c
[<c043ab8f>] _spin_lock_irqsave+0x3f/0x6c
[<c03ac3eb>] linkwatch_add_event+0xd/0x2c
[<c03ac3eb>] linkwatch_add_event+0xd/0x2c
[<c03ac4af>] linkwatch_fire_event+0x25/0x37
[<c03af436>] netif_carrier_on+0x16/0x27
[<c02ede0c>] bond_set_carrier+0x31/0x55
[<c02ee998>] bond_select_active_slave+0x9e/0xd3
[<c02ed20b>] bond_compute_features+0x45/0x84
[<c02ef9a4>] bond_enslave+0x6a7/0x884
[<c0439964>] mutex_lock_nested+0x2a4/0x2ac
[<c02f617b>] bonding_store_slaves+0x1ae/0x2fb
[<c02f5fcd>] bonding_store_slaves+0x0/0x2fb
[<c02ce8b7>] dev_attr_store+0x27/0x2c
[<c019bda1>] sysfs_write_file+0xad/0xe0
[<c019bcf4>] sysfs_write_file+0x0/0xe0
[<c0168e5c>] vfs_write+0x8a/0x10c
[<c0118562>] do_page_fault+0x0/0x54a
[<c01693e1>] sys_write+0x41/0x67
[<c0103e92>] sysenter_past_esp+0x5f/0xa5
[<ffffffff>] 0xffffffff
stack backtrace:
Pid: 9, comm: events/0 Not tainted 2.6.24-rc7 #1
[<c0140b2c>] print_irq_inversion_bug+0x108/0x112
[<c0141911>] check_usage_forwards+0x3c/0x41
[<c0141afd>] mark_lock+0x1e7/0x451
[<c0142816>] __lock_acquire+0x440/0xc07
[<c013fdfe>] get_lock_stats+0xd/0x2e
[<c013fe29>] put_lock_stats+0xa/0x1e
[<c0143056>] lock_acquire+0x79/0x93
[<c041255a>] mld_ifc_timer_expire+0x130/0x1fb
[<c041242a>] mld_ifc_timer_expire+0x0/0x1fb
[<c043a872>] _spin_lock_bh+0x3b/0x64
[<c041255a>] mld_ifc_timer_expire+0x130/0x1fb
[<c041255a>] mld_ifc_timer_expire+0x130/0x1fb
[<c041242a>] mld_ifc_timer_expire+0x0/0x1fb
[<c0141f7d>] trace_hardirqs_on+0x10c/0x14c
[<c041242a>] mld_ifc_timer_expire+0x0/0x1fb
[<c012e02e>] run_timer_softirq+0xfa/0x15d
[<c012a982>] __do_softirq+0x56/0xdb
[<c0141f7d>] trace_hardirqs_on+0x10c/0x14c
[<c012a994>] __do_softirq+0x68/0xdb
[<c012aa3d>] do_softirq+0x36/0x51
[<c012af26>] local_bh_enable_ip+0xad/0xed
[<c03bfa03>] rt_run_flush+0x64/0x8b
[<c03e9b8a>] fib_netdev_event+0x61/0x65
[<c013ac34>] notifier_call_chain+0x2a/0x52
[<c013ac7e>] raw_notifier_call_chain+0x17/0x1a
[<c03a33d9>] netdev_state_change+0x18/0x29
[<c03ac611>] __linkwatch_run_queue+0x150/0x17e
[<c03ac65c>] linkwatch_event+0x1d/0x22
[<c0133d87>] run_workqueue+0xdb/0x1b6
[<c0133d33>] run_workqueue+0x87/0x1b6
[<c03ac63f>] linkwatch_event+0x0/0x22
[<c01347a7>] worker_thread+0x0/0x85
[<c0134820>] worker_thread+0x79/0x85
[<c0137255>] autoremove_wake_function+0x0/0x35
[<c013719e>] kthread+0x38/0x5e
[<c0137166>] kthread+0x0/0x5e
[<c0104baf>] kernel_thread_helper+0x7/0x10
=======================
bonding: bond0: enslaving eth1 as a backup interface with a down link.
bond0: no IPv6 routers present
No other patches were applied.
Best regards,
Krzysztof Olędzki
^ permalink raw reply
* [PATCH] IPv4: Enable use of 240/4 address space
From: Jan Engelhardt @ 2008-01-18 1:13 UTC (permalink / raw)
To: David S. Miller
Cc: Network Development Mailing List, Linux Kernel Mailing List,
Andi Kleen, YOSHIFUJI Hideaki / 吉藤英明,
Vince Fuller
In-Reply-To: <20080108011057.GA21168@cisco.com>
On Jan 7 2008 17:10, Vince Fuller wrote:
>
>This set of diffs modify the 2.6.20 kernel to enable use of the 240/4
>(aka "class-E") address space as consistent with the Internet Draft
>draft-fuller-240space-00.txt.
>
Below is a patch against davem/net-2.6.25. It might look very spartan,
but that is actually all that is needed on a sane system. No class E
macros or so needed.
Only the ipv4_is_badclass() might need renaming if you think it really
needs a name change. Or maybe a comment. Comments please :)
===
ancestor 7651a1f7ebe567f9088283f6354a5634b5dccb8e
commit 44762168d7cbefc4f8753a79d99a761cbd9875d9
Author: Jan Engelhardt <jengelh@computergmbh.de>
Date: Fri Jan 18 02:10:44 2008 +0100
IPv4: enable use of 240/4 address space
This short patch modifies the IPv4 networking to enable use of the
240.0.0.0/4 (aka "class-E") address space as propsed in the internet
draft draft-fuller-240space-00.txt.
Signed-off-by: Jan Engelhardt <jengelh@computergmbh.de>
diff --git a/include/linux/in.h b/include/linux/in.h
index 27d8a5a..b01bf75 100644
--- a/include/linux/in.h
+++ b/include/linux/in.h
@@ -216,9 +216,6 @@ struct sockaddr_in {
#define IN_MULTICAST(a) IN_CLASSD(a)
#define IN_MULTICAST_NET 0xF0000000
-#define IN_EXPERIMENTAL(a) ((((long int) (a)) & 0xf0000000) == 0xf0000000)
-#define IN_BADCLASS(a) IN_EXPERIMENTAL((a))
-
/* Address to accept any incoming messages. */
#define INADDR_ANY ((unsigned long int) 0x00000000)
@@ -264,7 +261,7 @@ static inline bool ipv4_is_local_multicast(__be32 addr)
static inline bool ipv4_is_badclass(__be32 addr)
{
- return (addr & htonl(0xf0000000)) == htonl(0xf0000000);
+ return addr == 0xFFFFFFFF;
}
static inline bool ipv4_is_zeronet(__be32 addr)
^ permalink raw reply related
* Re: [PATCH] IPv4: Enable use of 240/4 address space
From: YOSHIFUJI Hideaki / 吉藤英明 @ 2008-01-18 1:26 UTC (permalink / raw)
To: jengelh; +Cc: davem, netdev, linux-kernel, ak, vaf, yoshfuji
In-Reply-To: <Pine.LNX.4.64.0801180023450.18447@fbirervta.pbzchgretzou.qr>
In article <Pine.LNX.4.64.0801180023450.18447@fbirervta.pbzchgretzou.qr> (at Fri, 18 Jan 2008 02:13:52 +0100 (CET)), Jan Engelhardt <jengelh@computergmbh.de> says:
> diff --git a/include/linux/in.h b/include/linux/in.h
> index 27d8a5a..b01bf75 100644
> --- a/include/linux/in.h
> +++ b/include/linux/in.h
> @@ -216,9 +216,6 @@ struct sockaddr_in {
> #define IN_MULTICAST(a) IN_CLASSD(a)
> #define IN_MULTICAST_NET 0xF0000000
>
> -#define IN_EXPERIMENTAL(a) ((((long int) (a)) & 0xf0000000) == 0xf0000000)
> -#define IN_BADCLASS(a) IN_EXPERIMENTAL((a))
> -
> /* Address to accept any incoming messages. */
> #define INADDR_ANY ((unsigned long int) 0x00000000)
>
No, please keep these macros.
> @@ -264,7 +261,7 @@ static inline bool ipv4_is_local_multicast(__be32 addr)
>
> static inline bool ipv4_is_badclass(__be32 addr)
> {
> - return (addr & htonl(0xf0000000)) == htonl(0xf0000000);
> + return addr == 0xFFFFFFFF;
> }
>
To (un)align the IN_BADCLASS macro and ipv6_is_badclass() definition,
you should change the name anyway, e.g., ipv6_is_limited_broadcast()
or some something alike.
--yoshfuji
^ permalink raw reply
* Re: [patch for 2.6.24? 1/1] bonding: locking fix
From: Jay Vosburgh @ 2008-01-18 1:45 UTC (permalink / raw)
To: Krzysztof Oledzki
Cc: Andrew Morton, davem, jeff, shemminger, netdev, Andy Gospodarek
In-Reply-To: <Pine.LNX.4.64.0801180154570.4570@bizon.gios.gov.pl>
Krzysztof Oledzki <olel@ans.pl> wrote:
>> Andrew Morton <akpm@linux-foundation.org> wrote:
>> [...]
>>> Can we get this bug fixed please? Today? It has been known about for more
>>> than two months.
>>
>> I just reposted the complete fix; it's #1 of the series of 7.
>
>Bad news. :( 2.6.24-rc7 + patch #1 (bonding: fix locking in sysfs
>primary/active selection):
[...]
>=========================================================
>[ INFO: possible irq lock inversion dependency detected ]
>2.6.24-rc7 #1
>---------------------------------------------------------
>events/0/9 just changed the state of lock:
> (&mc->mca_lock){-+..}, at: [<c041255a>] mld_ifc_timer_expire+0x130/0x1fb
>but this lock took another, soft-read-irq-unsafe lock in the past:
> (&bond->lock){-.--}
None of the seven patches I posted just a bit ago will fix this
lockdep warning (which is a different thing that the bug Andrew inquired
about); I'm still working on that one.
For that one, I had posted this work in progress patch:
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 77d004d..6906dbc 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -3937,8 +3937,6 @@ static void bond_set_multicast_list(struct net_device *bond_dev)
struct bonding *bond = bond_dev->priv;
struct dev_mc_list *dmi;
- write_lock_bh(&bond->lock);
-
/*
* Do promisc before checking multicast_mode
*/
@@ -3959,6 +3957,8 @@ static void bond_set_multicast_list(struct net_device *bond_dev)
bond_set_allmulti(bond, -1);
}
+ read_lock(&bond->lock);
+
bond->flags = bond_dev->flags;
/* looking for addresses to add to slaves' mc list */
@@ -3979,7 +3979,7 @@ static void bond_set_multicast_list(struct net_device *bond_dev)
bond_mc_list_destroy(bond);
bond_mc_list_copy(bond_dev->mc_list, bond, GFP_ATOMIC);
- write_unlock_bh(&bond->lock);
+ read_unlock(&bond->lock);
}
/*
which makes the warning go away, but Herbert Xu pointed out that
there is a potential problem with bond_enslave accessing the mc_lists
without sufficient locking. It's not the only offender, either, and the
bond->mc_list references really need to be protected by the bond_lock,
and the whole thing probably ought to use dev_mc_sync/unsync instead of
what it does now.
Since the bond_enslave, et al, business isn't a new problem, and
I've never heard of it being hit, I'm thinking now to just leave the
bond_enslave part for 2.6.25, and fix the lockdep warning for 2.6.24.
But I wanted to make sure dropping the write lock to a read lock
wasn't going to make something worse.
-J
---
-Jay Vosburgh, IBM Linux Technology Center, fubar@us.ibm.com
^ permalink raw reply related
* Extremely reduced prices for the most needed meds
From: sitek21 @ 2008-01-18 1:46 UTC (permalink / raw)
To: netdev
Remember, only buy meds at certified shops http://bl.pillsgaston95.com
^ permalink raw reply
* Re: [PATCH] IPv4: Enable use of 240/4 address space
From: Jan Engelhardt @ 2008-01-18 1:52 UTC (permalink / raw)
To: YOSHIFUJI Hideaki / 吉藤英明
Cc: davem, netdev, linux-kernel, ak, vaf
In-Reply-To: <20080118.102635.01689255.yoshfuji@linux-ipv6.org>
On Jan 18 2008 10:26, YOSHIFUJI Hideaki / 吉藤英明 wrote:
>> -#define IN_EXPERIMENTAL(a) ((((long int) (a)) & 0xf0000000) == 0xf0000000)
>> -#define IN_BADCLASS(a) IN_EXPERIMENTAL((a))
>
>No, please keep these macros.
>
>> @@ -264,7 +261,7 @@ static inline bool ipv4_is_local_multicast(__be32 addr)
>>
>> static inline bool ipv4_is_badclass(__be32 addr)
>> {
>> - return (addr & htonl(0xf0000000)) == htonl(0xf0000000);
>> + return addr == 0xFFFFFFFF;
>> }
>>
>
>To (un)align the IN_BADCLASS macro and ipv6_is_badclass() definition,
Unalign? IPv6? "Limited" broadcast?
>you should change the name anyway, e.g., ipv6_is_limited_broadcast()
>or some something alike.
===
Author: Jan Engelhardt <jengelh@computergmbh.de>
Date: Fri Jan 18 02:51:34 2008 +0100
IPv4: enable use of 240/4 address space
This short patch modifies the IPv4 networking to enable use of the
240.0.0.0/4 (aka "class-E") address space as propsed in the internet
draft draft-fuller-240space-00.txt.
Signed-off-by: Jan Engelhardt <jengelh@computergmbh.de>
diff --git a/include/linux/in.h b/include/linux/in.h
index 27d8a5a..4887768 100644
--- a/include/linux/in.h
+++ b/include/linux/in.h
@@ -262,9 +262,9 @@ static inline bool ipv4_is_local_multicast(__be32 addr)
return (addr & htonl(0xffffff00)) == htonl(0xe0000000);
}
-static inline bool ipv4_is_badclass(__be32 addr)
+static inline bool ipv4_is_broadcast(__be32 addr)
{
- return (addr & htonl(0xf0000000)) == htonl(0xf0000000);
+ return addr == 0xFFFFFFFF;
}
static inline bool ipv4_is_zeronet(__be32 addr)
diff --git a/include/net/addrconf.h b/include/net/addrconf.h
index 8b1509b..f5bd33b 100644
--- a/include/net/addrconf.h
+++ b/include/net/addrconf.h
@@ -262,7 +262,7 @@ static inline int ipv6_isatap_eui64(u8 *eui, __be32 addr)
ipv4_is_private_172(addr) || ipv4_is_test_192(addr) ||
ipv4_is_anycast_6to4(addr) || ipv4_is_private_192(addr) ||
ipv4_is_test_198(addr) || ipv4_is_multicast(addr) ||
- ipv4_is_badclass(addr)) ? 0x00 : 0x02;
+ ipv4_is_broadcast(addr)) ? 0x00 : 0x02;
eui[1] = 0;
eui[2] = 0x5E;
eui[3] = 0xFE;
diff --git a/net/core/pktgen.c b/net/core/pktgen.c
index d18fdb1..9d6e7af 100644
--- a/net/core/pktgen.c
+++ b/net/core/pktgen.c
@@ -2266,7 +2266,7 @@ static void mod_cur_headers(struct pktgen_dev *pkt_dev)
while (ipv4_is_loopback(s) ||
ipv4_is_multicast(s) ||
- ipv4_is_badclass(s) ||
+ ipv4_is_broadcast(s) ||
ipv4_is_zeronet(s) ||
ipv4_is_local_multicast(s)) {
t = random32() % (imx - imn) + imn;
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
index 8ddcd3f..367e097 100644
--- a/net/ipv4/fib_frontend.c
+++ b/net/ipv4/fib_frontend.c
@@ -176,7 +176,7 @@ static inline unsigned __inet_dev_addr_type(struct net *net,
unsigned ret = RTN_BROADCAST;
struct fib_table *local_table;
- if (ipv4_is_zeronet(addr) || ipv4_is_badclass(addr))
+ if (ipv4_is_zeronet(addr) || ipv4_is_broadcast(addr))
return RTN_BROADCAST;
if (ipv4_is_multicast(addr))
return RTN_MULTICAST;
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index 1e59c0d..9f0ea73 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -1154,7 +1154,7 @@ void ip_rt_redirect(__be32 old_gw, __be32 daddr, __be32 new_gw,
return;
if (new_gw == old_gw || !IN_DEV_RX_REDIRECTS(in_dev)
- || ipv4_is_multicast(new_gw) || ipv4_is_badclass(new_gw)
+ || ipv4_is_multicast(new_gw) || ipv4_is_broadcast(new_gw)
|| ipv4_is_zeronet(new_gw))
goto reject_redirect;
@@ -1634,7 +1634,7 @@ static int ip_route_input_mc(struct sk_buff *skb, __be32 daddr, __be32 saddr,
if (in_dev == NULL)
return -EINVAL;
- if (ipv4_is_multicast(saddr) || ipv4_is_badclass(saddr) ||
+ if (ipv4_is_multicast(saddr) || ipv4_is_broadcast(saddr) ||
ipv4_is_loopback(saddr) || skb->protocol != htons(ETH_P_IP))
goto e_inval;
@@ -1891,7 +1891,7 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr,
by fib_lookup.
*/
- if (ipv4_is_multicast(saddr) || ipv4_is_badclass(saddr) ||
+ if (ipv4_is_multicast(saddr) || ipv4_is_broadcast(saddr) ||
ipv4_is_loopback(saddr))
goto martian_source;
@@ -1904,7 +1904,7 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr,
if (ipv4_is_zeronet(saddr))
goto martian_source;
- if (ipv4_is_badclass(daddr) || ipv4_is_zeronet(daddr) ||
+ if (ipv4_is_broadcast(daddr) || ipv4_is_zeronet(daddr) ||
ipv4_is_loopback(daddr))
goto martian_destination;
@@ -2125,7 +2125,7 @@ static inline int __mkroute_output(struct rtable **result,
res->type = RTN_BROADCAST;
else if (ipv4_is_multicast(fl->fl4_dst))
res->type = RTN_MULTICAST;
- else if (ipv4_is_badclass(fl->fl4_dst) || ipv4_is_zeronet(fl->fl4_dst))
+ else if (ipv4_is_broadcast(fl->fl4_dst) || ipv4_is_zeronet(fl->fl4_dst))
return -EINVAL;
if (dev_out->flags & IFF_LOOPBACK)
@@ -2276,7 +2276,7 @@ static int ip_route_output_slow(struct rtable **rp, const struct flowi *oldflp)
if (oldflp->fl4_src) {
err = -EINVAL;
if (ipv4_is_multicast(oldflp->fl4_src) ||
- ipv4_is_badclass(oldflp->fl4_src) ||
+ ipv4_is_broadcast(oldflp->fl4_src) ||
ipv4_is_zeronet(oldflp->fl4_src))
goto out;
^ permalink raw reply related
* ipv6 syn cookie questions
From: Glenn Griffin @ 2008-01-18 2:06 UTC (permalink / raw)
To: netdev
In researching the linux implementation of syn cookies I stumbled on a few
points that aren't initially clear to me. I was hoping somehow could elaborate
and shed some light onto what I'm missing.
at net/ipv6/tcp_ipv6.c:1249 within tcp_v6_conn_request()
There is the following comment:
/*
* There are no SYN attacks on IPv6, yet...
*/
Also above that in the same file within tcp_v6_hnd_req() it looks like pieces
of an ipv6 syn cookie implementation were left but have been commented out.
I was not aware of ipv6 making any changes to how tcp behaved (ignoring obvious
details such as pseudo-header changes in checksum calculations, etc.), so the
comment above puzzles me. How does ipv6 change the viability of syn attacks
against tcp?
Also if anyone can provide any background that may exist on an ipv6
implementation of syn cookies that would be appreciated. I'm considering
working on an implementation, but would like to know if anyone is already
working on one or it's been submitted but deemed unnecessary for some reasons.
--Glenn
^ permalink raw reply
* Re: [PATCH] IPv4: Enable use of 240/4 address space
From: YOSHIFUJI Hideaki / 吉藤英明 @ 2008-01-18 2:13 UTC (permalink / raw)
To: jengelh; +Cc: davem, netdev, linux-kernel, ak, vaf, yoshfuji
In-Reply-To: <Pine.LNX.4.64.0801180242270.14025@fbirervta.pbzchgretzou.qr>
In article <Pine.LNX.4.64.0801180242270.14025@fbirervta.pbzchgretzou.qr> (at Fri, 18 Jan 2008 02:52:08 +0100 (CET)), Jan Engelhardt <jengelh@computergmbh.de> says:
>
> On Jan 18 2008 10:26, YOSHIFUJI Hideaki / 吉藤英明 wrote:
> >> -#define IN_EXPERIMENTAL(a) ((((long int) (a)) & 0xf0000000) == 0xf0000000)
> >> -#define IN_BADCLASS(a) IN_EXPERIMENTAL((a))
> >
> >No, please keep these macros.
> >
> >> @@ -264,7 +261,7 @@ static inline bool ipv4_is_local_multicast(__be32 addr)
> >>
> >> static inline bool ipv4_is_badclass(__be32 addr)
> >> {
> >> - return (addr & htonl(0xf0000000)) == htonl(0xf0000000);
> >> + return addr == 0xFFFFFFFF;
> >> }
> >>
> >
> >To (un)align the IN_BADCLASS macro and ipv6_is_badclass() definition,
>
> Unalign? IPv6? "Limited" broadcast?
Sorry, ipv4_is_badclass().
Assuming IN_BADCLASS() is still there, we should not reuse the name
of "ipv6_is_badclass" because the their meanings are different.
> -static inline bool ipv4_is_badclass(__be32 addr)
> +static inline bool ipv4_is_broadcast(__be32 addr)
> {
I'm just afraid that people might think ipv4_is_broadcast
is for testing subnet broadcast address.
255.255.255.255 is "limited broadcast address"
(vs subnet broadcast address, which can be forwarded by routers).
--yoshfuji
^ permalink raw reply
* Re: [PATCH] IPv4: Enable use of 240/4 address space
From: YOSHIFUJI Hideaki / 吉藤英明 @ 2008-01-18 2:15 UTC (permalink / raw)
To: jengelh; +Cc: davem, netdev, linux-kernel, ak, vaf, yoshfuji
In-Reply-To: <20080118.111319.30002290.yoshfuji@linux-ipv6.org>
In article <20080118.111319.30002290.yoshfuji@linux-ipv6.org> (at Fri, 18 Jan 2008 11:13:19 +0900 (JST)), YOSHIFUJI Hideaki / 吉藤英明 <yoshfuji@linux-ipv6.org> says:
> Assuming IN_BADCLASS() is still there, we should not reuse the name
> of "ipv6_is_badclass" because the their meanings are different.
Again, ipv4_is_badclass()....
My hands almost automatically type "6" after "ipv"...
--yoshfuji
^ permalink raw reply
* Re: [RFC][PATCH] Fixing SA/SP dumps on netlink/af_key
From: Timo Teräs @ 2008-01-18 6:45 UTC (permalink / raw)
To: Herbert Xu; +Cc: jamal, netdev, David Miller
In-Reply-To: <20080117213448.GA14716@gondor.apana.org.au>
Herbert Xu wrote:
> On Thu, Jan 17, 2008 at 03:31:14PM +0200, Timo Teräs wrote:
>> I guess the idea was that application should know about the SAs it
>> created. Though a SA dump needs to be done if you want to check
>> for existing entries (created by other processes, or if you are
>> recovering from a crash).
>
> That's what SADB_GET is for. In any case KMs cannot coexist so this
> is pointless. After a crash you should simply flush all states and
> policies.
I thought KMs could coexist. Actually, in strongSwan you have two
daemons: charon and pluto. Both can run at the same time. The other
is for IKEv1 and the other one for IKEv2. It uses netlink, though.
Looking the way pfkey works, it looks like being designed to work
with multiple KMs (e.g. acquires are sent to all registered sockets).
>> SPD dumping is still a must if you want to work nicely with kernel.
>
> No it isn't. Look at how Openswan does it. No dumping anywhere at all.
Then you have to have all policy/static association configuration in
the application configuration. ipsec-tools wanted separate that. As
this is more robust if someone decided to run multiple KMs.
My point (as an ipsec-tools developer) is that the patch would fix
a lot of problems until ipsec-tools is netlink enabled. It would
handle perfectly the dumping even as non-atomic. And that ipsec-tools
is the KM you get by default in almost all distributions.
But apparently you are too worried that all the so many other KMs
still using pfkey (is there others? I think most others use netlink
already) in Linux might break because the rely on an unspecified
feature of pfkey.
I'm also tired of arguing since this is going nowhere. I'll run my
patched kernel and try to get ipsec-tools fixed to use netlink...
eventually.
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox