* Re: LOCKDEP complaints in l2tp_xmit_skb()
From: Tom Parkin @ 2012-06-28 14:33 UTC (permalink / raw)
To: Eric Dumazet; +Cc: David Miller, netdev
In-Reply-To: <1340882551.13187.96.camel@edumazet-glaptop>
[-- Attachment #1: Type: text/plain, Size: 4708 bytes --]
On Thu, Jun 28, 2012 at 01:22:31PM +0200, Eric Dumazet wrote:
> On Thu, 2012-06-28 at 10:57 +0200, Eric Dumazet wrote:
> > On Thu, 2012-06-28 at 08:56 +0200, Eric Dumazet wrote:
> >
> > > [PATCH] net: Qdisc busylock gets its own lockdep class
> > >
> > > Tom Parkin reported following LOCKDEP splat :
> > ..
> > >
> > > Instruct lockdep that each Qdisc busylock is independant, or else
> > > bonding or various tunnels can trigger a splat.
> > >
> > > Reported-by: Tom Parkin <tparkin@katalix.com>
> > > Signed-off-by: Eric Dumazet <edumazet@google.com>
> > > ---
> >
> > I reproduced the bug using a bond0 device, adding a qdisc on it,
> > (one Qdisc on bond0, and a Qdisc on the slave too)
> >
> > Problem with this patch is I have following message :
> >
> > BUG: key ffff88..... not in .data!
> >
> > No more LOCKDEP splat, but patch not good as is.
>
> I tested the alternative following patch with my bonding setup,
> could you test it with l2tp ?
>
I've tested against my l2tp test configuration and I still see LOCKDEP
splats:
2tp_core: L2TP core driver, V2.0
2tp_netlink: L2TP netlink interface
2tp_eth: L2TP ethernet pseudowire support (L2TPv3)
============================================
INFO: possible recursive locking detected ]
.5.0-rc2-net-lockdep-u64-sync-007-+ #1 Not tainted
--------------------------------------------
wapper/0/0 is trying to acquire lock:
(slock-AF_INET){+.-...}, at: [<f862abff>] l2tp_xmit_skb+0x13f/0x8e0 [l2tp_core]
ut task is already holding lock:
(slock-AF_INET){+.-...}, at: [<c15333d7>] ip_send_reply+0x107/0x2b0
ther info that might help us debug this:
Possible unsafe locking scenario:
CPU0
----
lock(slock-AF_INET);
lock(slock-AF_INET);
*** DEADLOCK ***
May be due to missing lock nesting notation
locks held by swapper/0/0:
#0: (rcu_read_lock){.+.+..}, at: [<c14f7824>] __netif_receive_skb+0xe4/0x8d0
#1: (rcu_read_lock){.+.+..}, at: [<c152bd4c>] ip_local_deliver_finish+0x3c/0x4c0
#2: (slock-AF_INET){+.-...}, at: [<c15333d7>] ip_send_reply+0x107/0x2b0
#3: (rcu_read_lock){.+.+..}, at: [<c1531456>] ip_finish_output+0x106/0x710
#4: (rcu_read_lock_bh){.+....}, at: [<c14fa670>] dev_queue_xmit+0x0/0xbd0
tack backtrace:
id: 0, comm: swapper/0 Not tainted 3.5.0-rc2-net-lockdep-u64-sync-007-+ #1
all Trace:
[<c10a7b32>] __lock_acquire+0xd52/0x17d0
[<c10a334b>] ? trace_hardirqs_off+0xb/0x10
[<c10a8b48>] lock_acquire+0x88/0x120
[<f862abff>] ? l2tp_xmit_skb+0x13f/0x8e0 [l2tp_core]
[<c16157bb>] _raw_spin_lock+0x3b/0x70
[<f862abff>] ? l2tp_xmit_skb+0x13f/0x8e0 [l2tp_core]
[<f862abff>] l2tp_xmit_skb+0x13f/0x8e0 [l2tp_core]
[<f851a32d>] l2tp_eth_dev_xmit+0x2d/0x40 [l2tp_eth]
[<c14fa32f>] dev_hard_start_xmit+0x49f/0x7e0
[<c14f9ee1>] ? dev_hard_start_xmit+0x51/0x7e0
[<c1515819>] sch_direct_xmit+0xa9/0x250
[<c16157e1>] ? _raw_spin_lock+0x61/0x70
[<c14fa83f>] dev_queue_xmit+0x1cf/0xbd0
[<c14fa670>] ? dev_hard_start_xmit+0x7e0/0x7e0
[<c1531537>] ip_finish_output+0x1e7/0x710
[<c1531456>] ? ip_finish_output+0x106/0x710
[<c1532770>] ? ip_output+0x60/0x120
[<c10a585b>] ? trace_hardirqs_on+0xb/0x10
[<c153278b>] ip_output+0x7b/0x120
[<c1532fc9>] ? __ip_make_skb+0x229/0x360
[<c1531b95>] ip_local_out+0x25/0x80
[<c1533117>] ip_send_skb+0x17/0x70
[<c153319b>] ip_push_pending_frames+0x2b/0x40
[<c1533495>] ip_send_reply+0x1c5/0x2b0
[<c107efef>] ? sched_clock_cpu+0xcf/0x150
[<c154f253>] tcp_v4_send_ack+0x1a3/0x260
[<c1552430>] ? tcp_timewait_state_process+0x90/0x3c0
[<c15514ef>] tcp_v4_rcv+0x3ff/0xc20
[<c152bdff>] ip_local_deliver_finish+0xef/0x4c0
[<c152bd4c>] ? ip_local_deliver_finish+0x3c/0x4c0
[<c152c40f>] ip_local_deliver+0x3f/0x80
[<c152b844>] ip_rcv_finish+0x174/0x640
[<c152c671>] ip_rcv+0x221/0x320
[<c14f7f11>] __netif_receive_skb+0x7d1/0x8d0
[<c14f7824>] ? __netif_receive_skb+0xe4/0x8d0
[<c14f80b7>] process_backlog+0xa7/0x170
[<c14f88dd>] net_rx_action+0x11d/0x210
[<c104d990>] ? local_bh_enable_ip+0xd0/0xd0
[<c104da27>] __do_softirq+0x97/0x1f0
[<c104d990>] ? local_bh_enable_ip+0xd0/0xd0
<IRQ> [<c104ddce>] ? irq_exit+0x7e/0xa0
[<c161e02b>] ? do_IRQ+0x4b/0xc0
[<c161de75>] ? common_interrupt+0x35/0x3c
[<c10380d5>] ? native_safe_halt+0x5/0x10
[<c1018bdf>] ? default_idle+0x4f/0x1e0
[<c1018dc1>] ? amd_e400_idle+0x51/0x100
[<c10199c9>] ? cpu_idle+0xb9/0xe0
[<c15eab3e>] ? rest_init+0x112/0x124
[<c15eaa2c>] ? __read_lock_failed+0x14/0x14
[<c1907a11>] ? start_kernel+0x376/0x37c
[<c19074d6>] ? repair_env_string+0x51/0x51
[<c19072f8>] ? i386_start_kernel+0x9b/0xa2
--
Tom Parkin
Katalix Systems Ltd
http://www.katalix.com
Catalysts for your Embedded Linux software development
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 490 bytes --]
^ permalink raw reply
* [patch net-next 4/4] dummy: use IFF_LIFE_ADDR_CHANGE priv_flag
From: Jiri Pirko @ 2012-06-28 14:10 UTC (permalink / raw)
To: netdev
Cc: davem, rusty, mst, virtualization, edumazet, danny.kukawka,
shimoda.hiroaki
In-Reply-To: <1340892639-1111-1-git-send-email-jpirko@redhat.com>
Signed-off-by: Jiri Pirko <jpirko@redhat.com>
---
drivers/net/dummy.c | 15 ++-------------
1 file changed, 2 insertions(+), 13 deletions(-)
diff --git a/drivers/net/dummy.c b/drivers/net/dummy.c
index bab0158..0352246 100644
--- a/drivers/net/dummy.c
+++ b/drivers/net/dummy.c
@@ -40,18 +40,6 @@
static int numdummies = 1;
-static int dummy_set_address(struct net_device *dev, void *p)
-{
- struct sockaddr *sa = p;
-
- if (!is_valid_ether_addr(sa->sa_data))
- return -EADDRNOTAVAIL;
-
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
- memcpy(dev->dev_addr, sa->sa_data, ETH_ALEN);
- return 0;
-}
-
/* fake multicast ability */
static void set_multicast_list(struct net_device *dev)
{
@@ -118,7 +106,7 @@ static const struct net_device_ops dummy_netdev_ops = {
.ndo_start_xmit = dummy_xmit,
.ndo_validate_addr = eth_validate_addr,
.ndo_set_rx_mode = set_multicast_list,
- .ndo_set_mac_address = dummy_set_address,
+ .ndo_set_mac_address = eth_mac_addr,
.ndo_get_stats64 = dummy_get_stats64,
};
@@ -134,6 +122,7 @@ static void dummy_setup(struct net_device *dev)
dev->tx_queue_len = 0;
dev->flags |= IFF_NOARP;
dev->flags &= ~IFF_MULTICAST;
+ dev->priv_flags |= IFF_LIFE_ADDR_CHANGE;
dev->features |= NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_TSO;
dev->features |= NETIF_F_HW_CSUM | NETIF_F_HIGHDMA | NETIF_F_LLTX;
eth_hw_addr_random(dev);
--
1.7.10.4
^ permalink raw reply related
* [patch net-next 3/4] team: use IFF_LIFE_ADDR_CHANGE priv_flag
From: Jiri Pirko @ 2012-06-28 14:10 UTC (permalink / raw)
To: netdev; +Cc: mst, shimoda.hiroaki, virtualization, danny.kukawka, edumazet,
davem
In-Reply-To: <1340892639-1111-1-git-send-email-jpirko@redhat.com>
Signed-off-by: Jiri Pirko <jpirko@redhat.com>
---
drivers/net/team/team.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index 5350eea..019d658 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -1188,10 +1188,11 @@ static int team_set_mac_address(struct net_device *dev, void *p)
{
struct team *team = netdev_priv(dev);
struct team_port *port;
- struct sockaddr *addr = p;
+ int err;
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
- memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
+ err = eth_mac_addr(dev, p);
+ if (err)
+ return err;
rcu_read_lock();
list_for_each_entry_rcu(port, &team->port_list, list)
if (team->ops.port_change_mac)
@@ -1393,7 +1394,7 @@ static void team_setup(struct net_device *dev)
* bring us to promisc mode in case a unicast addr is added.
* Let this up to underlay drivers.
*/
- dev->priv_flags |= IFF_UNICAST_FLT;
+ dev->priv_flags |= IFF_UNICAST_FLT | IFF_LIFE_ADDR_CHANGE;
dev->features |= NETIF_F_LLTX;
dev->features |= NETIF_F_GRO;
--
1.7.10.4
^ permalink raw reply related
* [patch net-next 2/4] virtio_net: use IFF_LIFE_ADDR_CHANGE priv_flag
From: Jiri Pirko @ 2012-06-28 14:10 UTC (permalink / raw)
To: netdev; +Cc: mst, shimoda.hiroaki, virtualization, danny.kukawka, edumazet,
davem
In-Reply-To: <1340892639-1111-1-git-send-email-jpirko@redhat.com>
Signed-off-by: Jiri Pirko <jpirko@redhat.com>
---
drivers/net/virtio_net.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 36a16d5..6a0f526 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -679,12 +679,11 @@ static int virtnet_set_mac_address(struct net_device *dev, void *p)
{
struct virtnet_info *vi = netdev_priv(dev);
struct virtio_device *vdev = vi->vdev;
- struct sockaddr *addr = p;
+ int ret;
- if (!is_valid_ether_addr(addr->sa_data))
- return -EADDRNOTAVAIL;
- memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
+ ret = eth_mac_addr(dev, p);
+ if (ret)
+ return ret;
if (virtio_has_feature(vdev, VIRTIO_NET_F_MAC))
vdev->config->set(vdev, offsetof(struct virtio_net_config, mac),
@@ -1063,7 +1062,7 @@ static int virtnet_probe(struct virtio_device *vdev)
return -ENOMEM;
/* Set up network device as normal. */
- dev->priv_flags |= IFF_UNICAST_FLT;
+ dev->priv_flags |= IFF_UNICAST_FLT | IFF_LIFE_ADDR_CHANGE;
dev->netdev_ops = &virtnet_netdev;
dev->features = NETIF_F_HIGHDMA;
--
1.7.10.4
^ permalink raw reply related
* [patch net-next 1/4] net: introduce new priv_flag indicating iface capable of change mac when running
From: Jiri Pirko @ 2012-06-28 14:10 UTC (permalink / raw)
To: netdev; +Cc: mst, shimoda.hiroaki, virtualization, danny.kukawka, edumazet,
davem
In-Reply-To: <1340892639-1111-1-git-send-email-jpirko@redhat.com>
Introduce IFF_LIFE_ADDR_CHANGE priv_flag and use it to disable
netif_running() check in eth_mac_addr()
Signed-off-by: Jiri Pirko <jpirko@redhat.com>
---
include/linux/if.h | 2 ++
net/ethernet/eth.c | 2 +-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/include/linux/if.h b/include/linux/if.h
index f995c66..fd9ee7c 100644
--- a/include/linux/if.h
+++ b/include/linux/if.h
@@ -81,6 +81,8 @@
#define IFF_UNICAST_FLT 0x20000 /* Supports unicast filtering */
#define IFF_TEAM_PORT 0x40000 /* device used as team port */
#define IFF_SUPP_NOFCS 0x80000 /* device supports sending custom FCS */
+#define IFF_LIFE_ADDR_CHANGE 0x100000 /* device supports hardware address
+ * change when it's running */
#define IF_GET_IFACE 0x0001 /* for querying only */
diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c
index 36e5880..8f8ded4 100644
--- a/net/ethernet/eth.c
+++ b/net/ethernet/eth.c
@@ -283,7 +283,7 @@ int eth_mac_addr(struct net_device *dev, void *p)
{
struct sockaddr *addr = p;
- if (netif_running(dev))
+ if (!(dev->priv_flags & IFF_LIFE_ADDR_CHANGE) && netif_running(dev))
return -EBUSY;
if (!is_valid_ether_addr(addr->sa_data))
return -EADDRNOTAVAIL;
--
1.7.10.4
^ permalink raw reply related
* [patch net-next 0/4] net: introduce and use IFF_LIFE_ADDR_CHANGE
From: Jiri Pirko @ 2012-06-28 14:10 UTC (permalink / raw)
To: netdev; +Cc: mst, shimoda.hiroaki, virtualization, danny.kukawka, edumazet,
davem
three drivers updated, but this can be used in many others.
Jiri Pirko (4):
net: introduce new priv_flag indicating iface capable of change mac
when running
virtio_net: use IFF_LIFE_ADDR_CHANGE priv_flag
team: use IFF_LIFE_ADDR_CHANGE priv_flag
dummy: use IFF_LIFE_ADDR_CHANGE priv_flag
drivers/net/dummy.c | 15 ++-------------
drivers/net/team/team.c | 9 +++++----
drivers/net/virtio_net.c | 11 +++++------
include/linux/if.h | 2 ++
net/ethernet/eth.c | 2 +-
5 files changed, 15 insertions(+), 24 deletions(-)
--
1.7.10.4
^ permalink raw reply
* Re: [PATCH] net: Use NLMSG_DEFAULT_SIZE in combination with nlmsg_new()
From: Jiri Pirko @ 2012-06-28 14:04 UTC (permalink / raw)
To: Thomas Graf
Cc: davem, netdev, Dmitry Eremin-Solenikov, Sergey Lapin,
Johannes Berg, Lauro Ramos Venancio, Aloisio Almeida Jr,
Samuel Ortiz
In-Reply-To: <caecbaa2f181c17908fbd61264e1acb9c5cb1fe1.1340891841.git.tgraf@suug.ch>
I was thinking about similar patch a week ago.
Reviewed-by: Jiri Pirko <jpirko@redhat.com>
Thu, Jun 28, 2012 at 03:57:45PM CEST, tgraf@suug.ch wrote:
>Using NLMSG_GOODSIZE results in multiple pages being used as
>nlmsg_new() will automatically add the size of the netlink
>header to the payload thus exceeding the page limit.
>
>NLMSG_DEFAULT_SIZE takes this into account.
>
>Signed-off-by: Thomas Graf <tgraf@suug.ch>
>Cc: Jiri Pirko <jpirko@redhat.com>
>Cc: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
>Cc: Sergey Lapin <slapin@ossfans.org>
>Cc: Johannes Berg <johannes@sipsolutions.net>
>Cc: Lauro Ramos Venancio <lauro.venancio@openbossa.org>
>Cc: Aloisio Almeida Jr <aloisio.almeida@openbossa.org>
>Cc: Samuel Ortiz <sameo@linux.intel.com>
>---
> drivers/net/team/team.c | 8 ++++----
> drivers/net/wireless/mac80211_hwsim.c | 2 +-
> include/net/genetlink.h | 2 ++
> net/ieee802154/netlink.c | 4 ++--
> net/ieee802154/nl-mac.c | 2 +-
> net/ieee802154/nl-phy.c | 2 +-
> net/l2tp/l2tp_netlink.c | 6 +++---
> net/nfc/netlink.c | 18 +++++++++---------
> net/wireless/nl80211.c | 26 +++++++++++++-------------
> 9 files changed, 36 insertions(+), 34 deletions(-)
>
>diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
>index 5350eea..89853c3 100644
>--- a/drivers/net/team/team.c
>+++ b/drivers/net/team/team.c
>@@ -1476,7 +1476,7 @@ static int team_nl_cmd_noop(struct sk_buff *skb, struct genl_info *info)
> void *hdr;
> int err;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
> if (!msg)
> return -ENOMEM;
>
>@@ -1538,7 +1538,7 @@ static int team_nl_send_generic(struct genl_info *info, struct team *team,
> struct sk_buff *skb;
> int err;
>
>- skb = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
>+ skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
> if (!skb)
> return -ENOMEM;
>
>@@ -1648,7 +1648,7 @@ static int __send_and_alloc_skb(struct sk_buff **pskb,
> if (err)
> return err;
> }
>- *pskb = genlmsg_new(NLMSG_DEFAULT_SIZE - GENL_HDRLEN, GFP_KERNEL);
>+ *pskb = genlmsg_new(GENLMSG_DEFAULT_SIZE, GFP_KERNEL);
> if (!*pskb)
> return -ENOMEM;
> return 0;
>@@ -2016,7 +2016,7 @@ static int team_nl_send_event_port_list_get(struct team *team)
> int err;
> struct net *net = dev_net(team->dev);
>
>- skb = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
>+ skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
> if (!skb)
> return -ENOMEM;
>
>diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
>index a0b7cfd..a9ba3f7 100644
>--- a/drivers/net/wireless/mac80211_hwsim.c
>+++ b/drivers/net/wireless/mac80211_hwsim.c
>@@ -571,7 +571,7 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
> skb_dequeue(&data->pending);
> }
>
>- skb = genlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
>+ skb = genlmsg_new(GENLMSG_DEFAULT_SIZE, GFP_ATOMIC);
> if (skb == NULL)
> goto nla_put_failure;
>
>diff --git a/include/net/genetlink.h b/include/net/genetlink.h
>index ccb6888..48905cd 100644
>--- a/include/net/genetlink.h
>+++ b/include/net/genetlink.h
>@@ -5,6 +5,8 @@
> #include <net/netlink.h>
> #include <net/net_namespace.h>
>
>+#define GENLMSG_DEFAULT_SIZE (NLMSG_DEFAULT_SIZE - GENL_HDRLEN)
>+
> /**
> * struct genl_multicast_group - generic netlink multicast group
> * @name: name of the multicast group, names are per-family
>diff --git a/net/ieee802154/netlink.c b/net/ieee802154/netlink.c
>index c8097ae..97351e1 100644
>--- a/net/ieee802154/netlink.c
>+++ b/net/ieee802154/netlink.c
>@@ -44,7 +44,7 @@ struct genl_family nl802154_family = {
> struct sk_buff *ieee802154_nl_create(int flags, u8 req)
> {
> void *hdr;
>- struct sk_buff *msg = nlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
>+ struct sk_buff *msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC);
> unsigned long f;
>
> if (!msg)
>@@ -80,7 +80,7 @@ struct sk_buff *ieee802154_nl_new_reply(struct genl_info *info,
> int flags, u8 req)
> {
> void *hdr;
>- struct sk_buff *msg = nlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
>+ struct sk_buff *msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC);
>
> if (!msg)
> return NULL;
>diff --git a/net/ieee802154/nl-mac.c b/net/ieee802154/nl-mac.c
>index ca92587..1e99171 100644
>--- a/net/ieee802154/nl-mac.c
>+++ b/net/ieee802154/nl-mac.c
>@@ -530,7 +530,7 @@ static int ieee802154_list_iface(struct sk_buff *skb,
> if (!dev)
> return -ENODEV;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
> if (!msg)
> goto out_dev;
>
>diff --git a/net/ieee802154/nl-phy.c b/net/ieee802154/nl-phy.c
>index eed2916..d54be34 100644
>--- a/net/ieee802154/nl-phy.c
>+++ b/net/ieee802154/nl-phy.c
>@@ -101,7 +101,7 @@ static int ieee802154_list_phy(struct sk_buff *skb,
> if (!phy)
> return -ENODEV;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
> if (!msg)
> goto out_dev;
>
>diff --git a/net/l2tp/l2tp_netlink.c b/net/l2tp/l2tp_netlink.c
>index ddc553e..d71cd92 100644
>--- a/net/l2tp/l2tp_netlink.c
>+++ b/net/l2tp/l2tp_netlink.c
>@@ -72,7 +72,7 @@ static int l2tp_nl_cmd_noop(struct sk_buff *skb, struct genl_info *info)
> void *hdr;
> int ret = -ENOBUFS;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
> if (!msg) {
> ret = -ENOMEM;
> goto out;
>@@ -353,7 +353,7 @@ static int l2tp_nl_cmd_tunnel_get(struct sk_buff *skb, struct genl_info *info)
> goto out;
> }
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
> if (!msg) {
> ret = -ENOMEM;
> goto out;
>@@ -699,7 +699,7 @@ static int l2tp_nl_cmd_session_get(struct sk_buff *skb, struct genl_info *info)
> goto out;
> }
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
> if (!msg) {
> ret = -ENOMEM;
> goto out;
>diff --git a/net/nfc/netlink.c b/net/nfc/netlink.c
>index 03c31db..f4f07f9 100644
>--- a/net/nfc/netlink.c
>+++ b/net/nfc/netlink.c
>@@ -167,7 +167,7 @@ int nfc_genl_targets_found(struct nfc_dev *dev)
>
> dev->genl_data.poll_req_pid = 0;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC);
> if (!msg)
> return -ENOMEM;
>
>@@ -195,7 +195,7 @@ int nfc_genl_target_lost(struct nfc_dev *dev, u32 target_idx)
> struct sk_buff *msg;
> void *hdr;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
> if (!msg)
> return -ENOMEM;
>
>@@ -226,7 +226,7 @@ int nfc_genl_tm_activated(struct nfc_dev *dev, u32 protocol)
> struct sk_buff *msg;
> void *hdr;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
> if (!msg)
> return -ENOMEM;
>
>@@ -258,7 +258,7 @@ int nfc_genl_tm_deactivated(struct nfc_dev *dev)
> struct sk_buff *msg;
> void *hdr;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
> if (!msg)
> return -ENOMEM;
>
>@@ -288,7 +288,7 @@ int nfc_genl_device_added(struct nfc_dev *dev)
> struct sk_buff *msg;
> void *hdr;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
> if (!msg)
> return -ENOMEM;
>
>@@ -321,7 +321,7 @@ int nfc_genl_device_removed(struct nfc_dev *dev)
> struct sk_buff *msg;
> void *hdr;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
> if (!msg)
> return -ENOMEM;
>
>@@ -434,7 +434,7 @@ int nfc_genl_dep_link_up_event(struct nfc_dev *dev, u32 target_idx,
>
> pr_debug("DEP link is up\n");
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC);
> if (!msg)
> return -ENOMEM;
>
>@@ -473,7 +473,7 @@ int nfc_genl_dep_link_down_event(struct nfc_dev *dev)
>
> pr_debug("DEP link is down\n");
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC);
> if (!msg)
> return -ENOMEM;
>
>@@ -514,7 +514,7 @@ static int nfc_genl_get_device(struct sk_buff *skb, struct genl_info *info)
> if (!dev)
> return -ENODEV;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
> if (!msg) {
> rc = -ENOMEM;
> goto out_putdev;
>diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
>index 7ae54b8..cbdc0fd 100644
>--- a/net/wireless/nl80211.c
>+++ b/net/wireless/nl80211.c
>@@ -7210,7 +7210,7 @@ void nl80211_send_scan_start(struct cfg80211_registered_device *rdev,
> {
> struct sk_buff *msg;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
> if (!msg)
> return;
>
>@@ -7286,7 +7286,7 @@ void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev,
> {
> struct sk_buff *msg;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
> if (!msg)
> return;
>
>@@ -7502,7 +7502,7 @@ void nl80211_send_connect_result(struct cfg80211_registered_device *rdev,
> struct sk_buff *msg;
> void *hdr;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
> if (!msg)
> return;
>
>@@ -7542,7 +7542,7 @@ void nl80211_send_roamed(struct cfg80211_registered_device *rdev,
> struct sk_buff *msg;
> void *hdr;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
> if (!msg)
> return;
>
>@@ -7580,7 +7580,7 @@ void nl80211_send_disconnected(struct cfg80211_registered_device *rdev,
> struct sk_buff *msg;
> void *hdr;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
> if (!msg)
> return;
>
>@@ -7842,7 +7842,7 @@ void nl80211_send_sta_event(struct cfg80211_registered_device *rdev,
> {
> struct sk_buff *msg;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
> if (!msg)
> return;
>
>@@ -7863,7 +7863,7 @@ void nl80211_send_sta_del_event(struct cfg80211_registered_device *rdev,
> struct sk_buff *msg;
> void *hdr;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
> if (!msg)
> return;
>
>@@ -8026,7 +8026,7 @@ nl80211_send_cqm_rssi_notify(struct cfg80211_registered_device *rdev,
> struct nlattr *pinfoattr;
> void *hdr;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
> if (!msg)
> return;
>
>@@ -8069,7 +8069,7 @@ void nl80211_gtk_rekey_notify(struct cfg80211_registered_device *rdev,
> struct nlattr *rekey_attr;
> void *hdr;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
> if (!msg)
> return;
>
>@@ -8113,7 +8113,7 @@ void nl80211_pmksa_candidate_notify(struct cfg80211_registered_device *rdev,
> struct nlattr *attr;
> void *hdr;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
> if (!msg)
> return;
>
>@@ -8157,7 +8157,7 @@ void nl80211_ch_switch_notify(struct cfg80211_registered_device *rdev,
> struct sk_buff *msg;
> void *hdr;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
> if (!msg)
> return;
>
>@@ -8192,7 +8192,7 @@ nl80211_send_cqm_pktloss_notify(struct cfg80211_registered_device *rdev,
> struct nlattr *pinfoattr;
> void *hdr;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
> if (!msg)
> return;
>
>@@ -8236,7 +8236,7 @@ void cfg80211_probe_status(struct net_device *dev, const u8 *addr,
> void *hdr;
> int err;
>
>- msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
>+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
> if (!msg)
> return;
>
>--
>1.7.7.6
>
^ permalink raw reply
* [PATCH] net: Use NLMSG_DEFAULT_SIZE in combination with nlmsg_new()
From: Thomas Graf @ 2012-06-28 13:57 UTC (permalink / raw)
To: davem
Cc: netdev, Jiri Pirko, Dmitry Eremin-Solenikov, Sergey Lapin,
Johannes Berg, Lauro Ramos Venancio, Aloisio Almeida Jr,
Samuel Ortiz
Using NLMSG_GOODSIZE results in multiple pages being used as
nlmsg_new() will automatically add the size of the netlink
header to the payload thus exceeding the page limit.
NLMSG_DEFAULT_SIZE takes this into account.
Signed-off-by: Thomas Graf <tgraf@suug.ch>
Cc: Jiri Pirko <jpirko@redhat.com>
Cc: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Cc: Sergey Lapin <slapin@ossfans.org>
Cc: Johannes Berg <johannes@sipsolutions.net>
Cc: Lauro Ramos Venancio <lauro.venancio@openbossa.org>
Cc: Aloisio Almeida Jr <aloisio.almeida@openbossa.org>
Cc: Samuel Ortiz <sameo@linux.intel.com>
---
drivers/net/team/team.c | 8 ++++----
drivers/net/wireless/mac80211_hwsim.c | 2 +-
include/net/genetlink.h | 2 ++
net/ieee802154/netlink.c | 4 ++--
net/ieee802154/nl-mac.c | 2 +-
net/ieee802154/nl-phy.c | 2 +-
net/l2tp/l2tp_netlink.c | 6 +++---
net/nfc/netlink.c | 18 +++++++++---------
net/wireless/nl80211.c | 26 +++++++++++++-------------
9 files changed, 36 insertions(+), 34 deletions(-)
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index 5350eea..89853c3 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -1476,7 +1476,7 @@ static int team_nl_cmd_noop(struct sk_buff *skb, struct genl_info *info)
void *hdr;
int err;
- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg)
return -ENOMEM;
@@ -1538,7 +1538,7 @@ static int team_nl_send_generic(struct genl_info *info, struct team *team,
struct sk_buff *skb;
int err;
- skb = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
+ skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!skb)
return -ENOMEM;
@@ -1648,7 +1648,7 @@ static int __send_and_alloc_skb(struct sk_buff **pskb,
if (err)
return err;
}
- *pskb = genlmsg_new(NLMSG_DEFAULT_SIZE - GENL_HDRLEN, GFP_KERNEL);
+ *pskb = genlmsg_new(GENLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!*pskb)
return -ENOMEM;
return 0;
@@ -2016,7 +2016,7 @@ static int team_nl_send_event_port_list_get(struct team *team)
int err;
struct net *net = dev_net(team->dev);
- skb = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
+ skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!skb)
return -ENOMEM;
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index a0b7cfd..a9ba3f7 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -571,7 +571,7 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
skb_dequeue(&data->pending);
}
- skb = genlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
+ skb = genlmsg_new(GENLMSG_DEFAULT_SIZE, GFP_ATOMIC);
if (skb == NULL)
goto nla_put_failure;
diff --git a/include/net/genetlink.h b/include/net/genetlink.h
index ccb6888..48905cd 100644
--- a/include/net/genetlink.h
+++ b/include/net/genetlink.h
@@ -5,6 +5,8 @@
#include <net/netlink.h>
#include <net/net_namespace.h>
+#define GENLMSG_DEFAULT_SIZE (NLMSG_DEFAULT_SIZE - GENL_HDRLEN)
+
/**
* struct genl_multicast_group - generic netlink multicast group
* @name: name of the multicast group, names are per-family
diff --git a/net/ieee802154/netlink.c b/net/ieee802154/netlink.c
index c8097ae..97351e1 100644
--- a/net/ieee802154/netlink.c
+++ b/net/ieee802154/netlink.c
@@ -44,7 +44,7 @@ struct genl_family nl802154_family = {
struct sk_buff *ieee802154_nl_create(int flags, u8 req)
{
void *hdr;
- struct sk_buff *msg = nlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
+ struct sk_buff *msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC);
unsigned long f;
if (!msg)
@@ -80,7 +80,7 @@ struct sk_buff *ieee802154_nl_new_reply(struct genl_info *info,
int flags, u8 req)
{
void *hdr;
- struct sk_buff *msg = nlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
+ struct sk_buff *msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC);
if (!msg)
return NULL;
diff --git a/net/ieee802154/nl-mac.c b/net/ieee802154/nl-mac.c
index ca92587..1e99171 100644
--- a/net/ieee802154/nl-mac.c
+++ b/net/ieee802154/nl-mac.c
@@ -530,7 +530,7 @@ static int ieee802154_list_iface(struct sk_buff *skb,
if (!dev)
return -ENODEV;
- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg)
goto out_dev;
diff --git a/net/ieee802154/nl-phy.c b/net/ieee802154/nl-phy.c
index eed2916..d54be34 100644
--- a/net/ieee802154/nl-phy.c
+++ b/net/ieee802154/nl-phy.c
@@ -101,7 +101,7 @@ static int ieee802154_list_phy(struct sk_buff *skb,
if (!phy)
return -ENODEV;
- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg)
goto out_dev;
diff --git a/net/l2tp/l2tp_netlink.c b/net/l2tp/l2tp_netlink.c
index ddc553e..d71cd92 100644
--- a/net/l2tp/l2tp_netlink.c
+++ b/net/l2tp/l2tp_netlink.c
@@ -72,7 +72,7 @@ static int l2tp_nl_cmd_noop(struct sk_buff *skb, struct genl_info *info)
void *hdr;
int ret = -ENOBUFS;
- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg) {
ret = -ENOMEM;
goto out;
@@ -353,7 +353,7 @@ static int l2tp_nl_cmd_tunnel_get(struct sk_buff *skb, struct genl_info *info)
goto out;
}
- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg) {
ret = -ENOMEM;
goto out;
@@ -699,7 +699,7 @@ static int l2tp_nl_cmd_session_get(struct sk_buff *skb, struct genl_info *info)
goto out;
}
- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg) {
ret = -ENOMEM;
goto out;
diff --git a/net/nfc/netlink.c b/net/nfc/netlink.c
index 03c31db..f4f07f9 100644
--- a/net/nfc/netlink.c
+++ b/net/nfc/netlink.c
@@ -167,7 +167,7 @@ int nfc_genl_targets_found(struct nfc_dev *dev)
dev->genl_data.poll_req_pid = 0;
- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC);
if (!msg)
return -ENOMEM;
@@ -195,7 +195,7 @@ int nfc_genl_target_lost(struct nfc_dev *dev, u32 target_idx)
struct sk_buff *msg;
void *hdr;
- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg)
return -ENOMEM;
@@ -226,7 +226,7 @@ int nfc_genl_tm_activated(struct nfc_dev *dev, u32 protocol)
struct sk_buff *msg;
void *hdr;
- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg)
return -ENOMEM;
@@ -258,7 +258,7 @@ int nfc_genl_tm_deactivated(struct nfc_dev *dev)
struct sk_buff *msg;
void *hdr;
- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg)
return -ENOMEM;
@@ -288,7 +288,7 @@ int nfc_genl_device_added(struct nfc_dev *dev)
struct sk_buff *msg;
void *hdr;
- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg)
return -ENOMEM;
@@ -321,7 +321,7 @@ int nfc_genl_device_removed(struct nfc_dev *dev)
struct sk_buff *msg;
void *hdr;
- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg)
return -ENOMEM;
@@ -434,7 +434,7 @@ int nfc_genl_dep_link_up_event(struct nfc_dev *dev, u32 target_idx,
pr_debug("DEP link is up\n");
- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC);
if (!msg)
return -ENOMEM;
@@ -473,7 +473,7 @@ int nfc_genl_dep_link_down_event(struct nfc_dev *dev)
pr_debug("DEP link is down\n");
- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC);
if (!msg)
return -ENOMEM;
@@ -514,7 +514,7 @@ static int nfc_genl_get_device(struct sk_buff *skb, struct genl_info *info)
if (!dev)
return -ENODEV;
- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg) {
rc = -ENOMEM;
goto out_putdev;
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 7ae54b8..cbdc0fd 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -7210,7 +7210,7 @@ void nl80211_send_scan_start(struct cfg80211_registered_device *rdev,
{
struct sk_buff *msg;
- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg)
return;
@@ -7286,7 +7286,7 @@ void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev,
{
struct sk_buff *msg;
- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg)
return;
@@ -7502,7 +7502,7 @@ void nl80211_send_connect_result(struct cfg80211_registered_device *rdev,
struct sk_buff *msg;
void *hdr;
- msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
if (!msg)
return;
@@ -7542,7 +7542,7 @@ void nl80211_send_roamed(struct cfg80211_registered_device *rdev,
struct sk_buff *msg;
void *hdr;
- msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
if (!msg)
return;
@@ -7580,7 +7580,7 @@ void nl80211_send_disconnected(struct cfg80211_registered_device *rdev,
struct sk_buff *msg;
void *hdr;
- msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg)
return;
@@ -7842,7 +7842,7 @@ void nl80211_send_sta_event(struct cfg80211_registered_device *rdev,
{
struct sk_buff *msg;
- msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
if (!msg)
return;
@@ -7863,7 +7863,7 @@ void nl80211_send_sta_del_event(struct cfg80211_registered_device *rdev,
struct sk_buff *msg;
void *hdr;
- msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
if (!msg)
return;
@@ -8026,7 +8026,7 @@ nl80211_send_cqm_rssi_notify(struct cfg80211_registered_device *rdev,
struct nlattr *pinfoattr;
void *hdr;
- msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
if (!msg)
return;
@@ -8069,7 +8069,7 @@ void nl80211_gtk_rekey_notify(struct cfg80211_registered_device *rdev,
struct nlattr *rekey_attr;
void *hdr;
- msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
if (!msg)
return;
@@ -8113,7 +8113,7 @@ void nl80211_pmksa_candidate_notify(struct cfg80211_registered_device *rdev,
struct nlattr *attr;
void *hdr;
- msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
if (!msg)
return;
@@ -8157,7 +8157,7 @@ void nl80211_ch_switch_notify(struct cfg80211_registered_device *rdev,
struct sk_buff *msg;
void *hdr;
- msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
if (!msg)
return;
@@ -8192,7 +8192,7 @@ nl80211_send_cqm_pktloss_notify(struct cfg80211_registered_device *rdev,
struct nlattr *pinfoattr;
void *hdr;
- msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
if (!msg)
return;
@@ -8236,7 +8236,7 @@ void cfg80211_probe_status(struct net_device *dev, const u8 *addr,
void *hdr;
int err;
- msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
if (!msg)
return;
--
1.7.7.6
^ permalink raw reply related
* Bridged networking panics
From: Massimo Cetra @ 2012-06-28 13:57 UTC (permalink / raw)
To: netdev, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 629 bytes --]
Hi all,
i'm attaching 3 panics of a 3.2.X kernel.
The panics were obtained with a 3.2.20 from debian testing and from a
vanilla compile of 3.2.21.
Those panics have been already posted some months ago [1] but are not fixed.
The problems seems related to bridged networking.
Whenever there is a bridged aliased interface (like br0:1 br0:2 etcc),
the server will panic after some time. The more the network load, the
shortest the uptime.
Removing (ifconfig br0:1 down) or adding back an interface seems to help
the panic to appear.
Any more hints ?
MC
[1] for example http://comments.gmane.org/gmane.linux.network/226912
[-- Attachment #2: 3.2.20.2-1.txt --]
[-- Type: text/plain, Size: 16034 bytes --]
Jun 28 13:18:35 172.30.1.2 [ 295.504843] BUG: unable to handle kernel
Jun 28 13:18:35 172.30.1.2 [ 295.520628] IP:
Jun 28 13:18:35 172.30.1.2 [ 295.534792] PGD 0
Jun 28 13:18:35 172.30.1.2
Jun 28 13:18:35 172.30.1.2 [ 295.538889] Oops: 0000 [#1]
Jun 28 13:18:35 172.30.1.2 SMP
Jun 28 13:18:35 172.30.1.2
Jun 28 13:18:35 172.30.1.2 [ 295.545471] CPU 0
Jun 28 13:18:35 172.30.1.2
Jun 28 13:18:35 172.30.1.2 [ 295.549169] Modules linked in:
Jun 28 13:18:35 172.30.1.2
Jun 28 13:18:35 172.30.1.2 [ 295.691502]
Jun 28 13:18:35 172.30.1.2 [ 295.694506] Pid: 7754, comm: kvm Not tainted 3.2.0-2-amd64 #1
Jun 28 13:18:35 172.30.1.2 /0N051F
Jun 28 13:18:35 172.30.1.2
Jun 28 13:18:35 172.30.1.2 [ 295.711720] RIP: 0010:[<ffffffffa01c333d>]
Jun 28 13:18:35 172.30.1.2 [ 295.730738] RSP: 0018:ffff88042fc03b18 EFLAGS: 00010293
Jun 28 13:18:35 172.30.1.2 [ 295.741389] RAX: 0000000000000000 RBX: ffff880411b9eec0 RCX: 00000000fffffba0
Jun 28 13:18:35 172.30.1.2 [ 295.755682] RDX: ffffffffa01c330f RSI: 0000000000000282 RDI: ffff880411b9eec0
Jun 28 13:18:35 172.30.1.2 [ 295.769975] RBP: ffff880226688000 R08: 0000000000000000 R09: ffff88042fc03ad0
Jun 28 13:18:35 172.30.1.2 [ 295.784268] R10: ffffffff8165ab00 R11: ffffffff8165ab00 R12: 0000000000000000
Jun 28 13:18:35 172.30.1.2 [ 295.798561] R13: ffff880225bec002 R14: ffff8804131987c0 R15: ffff880225bec000
Jun 28 13:18:35 172.30.1.2 [ 295.812854] FS: 00007fc06177d900(0000) GS:ffff88042fc00000(0000) knlGS:0000000000000000
Jun 28 13:18:35 172.30.1.2 [ 295.829070] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
Jun 28 13:18:35 172.30.1.2 [ 295.840587] CR2: 0000000000000018 CR3: 0000000409d7b000 CR4: 00000000000026e0
Jun 28 13:18:35 172.30.1.2 [ 295.854880] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
Jun 28 13:18:35 172.30.1.2 [ 295.869175] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Jun 28 13:18:35 172.30.1.2 [ 295.883469] Process kvm (pid: 7754, threadinfo ffff88040bcc6000, task ffff880424ca2100)
Jun 28 13:18:35 172.30.1.2 [ 295.899512] Stack:
Jun 28 13:18:35 172.30.1.2 [ 295.903571] ffffffff80000000
Jun 28 13:18:35 172.30.1.2
Jun 28 13:18:35 172.30.1.2 [ 295.918613] ffff880425367000
Jun 28 13:18:35 172.30.1.2
Jun 28 13:18:35 172.30.1.2 [ 295.933657] ffff880411b9eec0
Jun 28 13:18:35 172.30.1.2
Jun 28 13:18:35 172.30.1.2 [ 295.948699] Call Trace:
Jun 28 13:18:35 172.30.1.2 [ 295.953626] <IRQ>
Jun 28 13:18:35 172.30.1.2
Jun 28 13:18:35 172.30.1.2 [ 295.957918] [<ffffffffa01c3714>] ? br_parse_ip_options+0x3d/0x19a [bridge]
Jun 28 13:18:35 172.30.1.2 [ 295.971866] [<ffffffffa01c3aa0>] ? br_nf_forward_ip+0x1c0/0x1d4 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 295.985469] [<ffffffff812ad0ed>] ? nf_iterate+0x41/0x77
Jun 28 13:18:36 172.30.1.2 [ 295.996123] [<ffffffffa01be941>] ? __br_deliver+0xa0/0xa0 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.008687] [<ffffffffa01be941>] ? __br_deliver+0xa0/0xa0 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.021245] [<ffffffff812ad18b>] ? nf_hook_slow+0x68/0x101
Jun 28 13:18:36 172.30.1.2 [ 296.032418] [<ffffffffa01be941>] ? __br_deliver+0xa0/0xa0 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.044981] [<ffffffffa01bf3a2>] ? NF_HOOK.constprop.4+0x56/0x56 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.058757] [<ffffffffa01be941>] ? __br_deliver+0xa0/0xa0 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.071319] [<ffffffffa01be887>] ? NF_HOOK.constprop.10+0x3c/0x56 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.085267] [<ffffffffa01bea1b>] ? br_forward+0x16/0x5a [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.097480] [<ffffffffa01bf543>] ? br_handle_frame_finish+0x1a1/0x20f [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.112141] [<ffffffffa01c3638>] ? br_nf_pre_routing_finish+0x1ee/0x1fb [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.127146] [<ffffffffa01c2ff7>] ? NF_HOOK_THRESH+0x3b/0x55 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.140055] [<ffffffffa01c3f91>] ? br_nf_pre_routing+0x3e8/0x3f5 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.153828] [<ffffffff812ad0ed>] ? nf_iterate+0x41/0x77
Jun 28 13:18:36 172.30.1.2 [ 296.164482] [<ffffffffa01bf3a2>] ? NF_HOOK.constprop.4+0x56/0x56 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.178255] [<ffffffff812ad18b>] ? nf_hook_slow+0x68/0x101
Jun 28 13:18:36 172.30.1.2 [ 296.189430] [<ffffffffa01bf3a2>] ? NF_HOOK.constprop.4+0x56/0x56 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.203206] [<ffffffffa01bf3a2>] ? NF_HOOK.constprop.4+0x56/0x56 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.216982] [<ffffffffa01bf388>] ? NF_HOOK.constprop.4+0x3c/0x56 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.230757] [<ffffffff810135ad>] ? paravirt_read_tsc+0x5/0x8
Jun 28 13:18:36 172.30.1.2 [ 296.242274] [<ffffffff81013622>] ? read_tsc+0x5/0x14
Jun 28 13:18:36 172.30.1.2 [ 296.252409] [<ffffffffa01bf764>] ? br_handle_frame+0x1b3/0x1cb [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.265837] [<ffffffffa01bf5b1>] ? br_handle_frame_finish+0x20f/0x20f [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.280498] [<ffffffff8128a306>] ? __netif_receive_skb+0x324/0x41f
Jun 28 13:18:36 172.30.1.2 [ 296.293058] [<ffffffff8128a46d>] ? process_backlog+0x6c/0x123
Jun 28 13:18:36 172.30.1.2 [ 296.304751] [<ffffffff8128c351>] ? net_rx_action+0xa1/0x1af
Jun 28 13:18:36 172.30.1.2 [ 296.316098] [<ffffffff8103703b>] ? test_tsk_need_resched+0xa/0x13
Jun 28 13:18:36 172.30.1.2 [ 296.328486] [<ffffffff8104bee4>] ? __do_softirq+0xb9/0x177
Jun 28 13:18:36 172.30.1.2 [ 296.339662] [<ffffffff8135162c>] ? call_softirq+0x1c/0x30
Jun 28 13:18:36 172.30.1.2 [ 296.350656] <EOI>
Jun 28 13:18:36 172.30.1.2
Jun 28 13:18:36 172.30.1.2 [ 296.354946] [<ffffffff8100f8e5>] ? do_softirq+0x3c/0x7b
Jun 28 13:18:36 172.30.1.2 [ 296.365597] [<ffffffff8128c641>] ? netif_rx_ni+0x1e/0x27
Jun 28 13:18:36 172.30.1.2 [ 296.376425] [<ffffffffa028b721>] ? tun_get_user+0x39a/0x3c2 [tun]
Jun 28 13:18:36 172.30.1.2 [ 296.388811] [<ffffffffa028ba66>] ? tun_chr_poll+0xcd/0xcd [tun]
Jun 28 13:18:36 172.30.1.2 [ 296.400851] [<ffffffffa028bac4>] ? tun_chr_aio_write+0x5e/0x79 [tun]
Jun 28 13:18:36 172.30.1.2 [ 296.413760] [<ffffffff810f97f8>] ? do_sync_readv_writev+0x9a/0xd7
Jun 28 13:18:36 172.30.1.2 [ 296.426145] [<ffffffff81036457>] ? should_resched+0x5/0x23
Jun 28 13:18:36 172.30.1.2 [ 296.437316] [<ffffffff81036457>] ? should_resched+0x5/0x23
Jun 28 13:18:36 172.30.1.2 [ 296.448491] [<ffffffff81162ea1>] ? security_file_permission+0x16/0x2d
Jun 28 13:18:36 172.30.1.2 [ 296.461569] [<ffffffff810f9a5c>] ? do_readv_writev+0xaf/0x11c
Jun 28 13:18:36 172.30.1.2 [ 296.473266] [<ffffffff8112aebe>] ? eventfd_ctx_read+0x162/0x174
Jun 28 13:18:36 172.30.1.2 [ 296.485310] [<ffffffff8103f48f>] ? try_to_wake_up+0x197/0x197
Jun 28 13:18:36 172.30.1.2 [ 296.497001] [<ffffffff810f9c31>] ? sys_writev+0x45/0x90
Jun 28 13:18:36 172.30.1.2 [ 296.507653] [<ffffffff8134f3d2>] ? system_call_fastpath+0x16/0x1b
Jun 28 13:18:36 172.30.1.2 [ 296.520038] Code:
Jun 28 13:18:36 172.30.1.2 53
Jun 28 13:18:36 172.30.1.2 48
Jun 28 13:18:36 172.30.1.2 89
Jun 28 13:18:36 172.30.1.2 fb
Jun 28 13:18:36 172.30.1.2 48
Jun 28 13:18:36 172.30.1.2 83
Jun 28 13:18:36 172.30.1.2 ec
Jun 28 13:18:36 172.30.1.2 10
Jun 28 13:18:36 172.30.1.2 66
Jun 28 13:18:36 172.30.1.2 81
Jun 28 13:18:36 172.30.1.2 7f
Jun 28 13:18:36 172.30.1.2 7e
Jun 28 13:18:36 172.30.1.2 08
Jun 28 13:18:36 172.30.1.2 06
Jun 28 13:18:36 172.30.1.2 4c
Jun 28 13:18:36 172.30.1.2 8b
Jun 28 13:18:36 172.30.1.2 a7
Jun 28 13:18:36 172.30.1.2 98
Jun 28 13:18:36 172.30.1.2 00
Jun 28 13:18:36 172.30.1.2 00
Jun 28 13:18:36 172.30.1.2 00
Jun 28 13:18:36 172.30.1.2 74
Jun 28 13:18:36 172.30.1.2 3d
Jun 28 13:18:36 172.30.1.2 e8
Jun 28 13:18:36 172.30.1.2 07
Jun 28 13:18:36 172.30.1.2 fe
Jun 28 13:18:36 172.30.1.2 ff
Jun 28 13:18:36 172.30.1.2 ff
Jun 28 13:18:36 172.30.1.2 66
Jun 28 13:18:36 172.30.1.2 3d
Jun 28 13:18:36 172.30.1.2 08
Jun 28 13:18:36 172.30.1.2 06
Jun 28 13:18:36 172.30.1.2 75
Jun 28 13:18:36 172.30.1.2 09
Jun 28 13:18:36 172.30.1.2 83
Jun 28 13:18:36 172.30.1.2 3d
Jun 28 13:18:36 172.30.1.2 91
Jun 28 13:18:36 172.30.1.2 6a
Jun 28 13:18:36 172.30.1.2 00
Jun 28 13:18:36 172.30.1.2 00
Jun 28 13:18:36 172.30.1.2 00
Jun 28 13:18:36 172.30.1.2 75
Jun 28 13:18:36 172.30.1.2 29
Jun 28 13:18:36 172.30.1.2
Jun 28 13:18:36 172.30.1.2 f6
Jun 28 13:18:36 172.30.1.2 44
Jun 28 13:18:36 172.30.1.2 24
Jun 28 13:18:36 172.30.1.2 18
Jun 28 13:18:36 172.30.1.2 01
Jun 28 13:18:36 172.30.1.2 49
Jun 28 13:18:36 172.30.1.2 8b
Jun 28 13:18:36 172.30.1.2 6c
Jun 28 13:18:36 172.30.1.2 24
Jun 28 13:18:36 172.30.1.2 08
Jun 28 13:18:36 172.30.1.2 74
Jun 28 13:18:36 172.30.1.2 12
Jun 28 13:18:36 172.30.1.2 8a
Jun 28 13:18:36 172.30.1.2 43
Jun 28 13:18:36 172.30.1.2 7d
Jun 28 13:18:36 172.30.1.2 83
Jun 28 13:18:36 172.30.1.2 e0
Jun 28 13:18:36 172.30.1.2 f8
Jun 28 13:18:36 172.30.1.2 83
Jun 28 13:18:36 172.30.1.2 c8
Jun 28 13:18:36 172.30.1.2
Jun 28 13:18:36 172.30.1.2 [ 296.561479] RIP
Jun 28 13:18:36 172.30.1.2 [ 296.575830] RSP <ffff88042fc03b18>
Jun 28 13:18:36 172.30.1.2 [ 296.582838] CR2: 0000000000000018
Jun 28 13:18:36 172.30.1.2 [ 296.589912] ---[ end trace c5e13ce92514d70f ]---
Jun 28 13:18:36 172.30.1.2 [ 296.599302] Kernel panic - not syncing: Fatal exception in interrupt
Jun 28 13:18:36 172.30.1.2 [ 296.612171] Pid: 7754, comm: kvm Tainted: G D 3.2.0-2-amd64 #1
Jun 28 13:18:36 172.30.1.2 [ 296.625731] Call Trace:
Jun 28 13:18:36 172.30.1.2 [ 296.630786] <IRQ>
Jun 28 13:18:36 172.30.1.2 [ 296.642245] [<ffffffff8134b246>] ? oops_end+0xa9/0xb6
Jun 28 13:18:36 172.30.1.2 [ 296.652680] [<ffffffff8134362d>] ? no_context+0x1ff/0x20e
Jun 28 13:18:36 172.30.1.2 [ 296.663873] [<ffffffff81052316>] ? __mod_timer+0x139/0x14b
Jun 28 13:18:36 172.30.1.2 [ 296.675175] [<ffffffff8134d259>] ? do_page_fault+0x1a8/0x337
Jun 28 13:18:36 172.30.1.2 [ 296.686892] [<ffffffffa03caf06>] ? ip_vs_conn_put+0x28/0x32 [ip_vs]
Jun 28 13:18:36 172.30.1.2 [ 296.699794] [<ffffffffa03cd0e0>] ? ip_vs_out+0x2bd/0x432 [ip_vs]
Jun 28 13:18:36 172.30.1.2 [ 296.712179] [<ffffffff812ad18b>] ? nf_hook_slow+0x68/0x101
Jun 28 13:18:36 172.30.1.2 [ 296.723614] [<ffffffff8134a9b5>] ? page_fault+0x25/0x30
Jun 28 13:18:36 172.30.1.2 [ 296.734519] [<ffffffffa01c330f>] ? nf_bridge_update_protocol+0x20/0x20 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.749474] [<ffffffffa01c333d>] ? br_nf_forward_finish+0x2e/0x95 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.763549] [<ffffffffa01c332e>] ? br_nf_forward_finish+0x1f/0x95 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.777632] [<ffffffffa01c3714>] ? br_parse_ip_options+0x3d/0x19a [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.791715] [<ffffffffa01c3aa0>] ? br_nf_forward_ip+0x1c0/0x1d4 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.805450] [<ffffffff812ad0ed>] ? nf_iterate+0x41/0x77
Jun 28 13:18:36 172.30.1.2 [ 296.816247] [<ffffffffa01be941>] ? __br_deliver+0xa0/0xa0 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.829003] [<ffffffffa01be941>] ? __br_deliver+0xa0/0xa0 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.841695] [<ffffffff812ad18b>] ? nf_hook_slow+0x68/0x101
Jun 28 13:18:36 172.30.1.2 [ 296.852992] [<ffffffffa01be941>] ? __br_deliver+0xa0/0xa0 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.865687] [<ffffffffa01bf3a2>] ? NF_HOOK.constprop.4+0x56/0x56 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.879725] [<ffffffffa01be941>] ? __br_deliver+0xa0/0xa0 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.892411] [<ffffffffa01be887>] ? NF_HOOK.constprop.10+0x3c/0x56 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.906483] [<ffffffffa01bea1b>] ? br_forward+0x16/0x5a [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.918889] [<ffffffffa01bf543>] ? br_handle_frame_finish+0x1a1/0x20f [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.933723] [<ffffffffa01c3638>] ? br_nf_pre_routing_finish+0x1ee/0x1fb [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.948918] [<ffffffffa01c2ff7>] ? NF_HOOK_THRESH+0x3b/0x55 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.962024] [<ffffffffa01c3f91>] ? br_nf_pre_routing+0x3e8/0x3f5 [bridge]
Jun 28 13:18:36 172.30.1.2 [ 296.975994] [<ffffffff812ad0ed>] ? nf_iterate+0x41/0x77
Jun 28 13:18:37 172.30.1.2 [ 296.986837] [<ffffffffa01bf3a2>] ? NF_HOOK.constprop.4+0x56/0x56 [bridge]
Jun 28 13:18:37 172.30.1.2 [ 297.000802] [<ffffffff812ad18b>] ? nf_hook_slow+0x68/0x101
Jun 28 13:18:37 172.30.1.2 [ 297.012107] [<ffffffffa01bf3a2>] ? NF_HOOK.constprop.4+0x56/0x56 [bridge]
Jun 28 13:18:37 172.30.1.2 [ 297.026146] [<ffffffffa01bf3a2>] ? NF_HOOK.constprop.4+0x56/0x56 [bridge]
Jun 28 13:18:37 172.30.1.2 [ 297.040021] [<ffffffffa01bf388>] ? NF_HOOK.constprop.4+0x3c/0x56 [bridge]
Jun 28 13:18:37 172.30.1.2 [ 297.053999] [<ffffffff810135ad>] ? paravirt_read_tsc+0x5/0x8
Jun 28 13:18:37 172.30.1.2 [ 297.065638] [<ffffffff81013622>] ? read_tsc+0x5/0x14
Jun 28 13:18:37 172.30.1.2 [ 297.075900] [<ffffffffa01bf764>] ? br_handle_frame+0x1b3/0x1cb [bridge]
Jun 28 13:18:37 172.30.1.2 [ 297.089449] [<ffffffffa01bf5b1>] ? br_handle_frame_finish+0x20f/0x20f [bridge]
Jun 28 13:18:37 172.30.1.2 [ 297.104301] [<ffffffff8128a306>] ? __netif_receive_skb+0x324/0x41f
Jun 28 13:18:37 172.30.1.2 [ 297.116984] [<ffffffff8128a46d>] ? process_backlog+0x6c/0x123
Jun 28 13:18:37 172.30.1.2 [ 297.128799] [<ffffffff8128c351>] ? net_rx_action+0xa1/0x1af
Jun 28 13:18:37 172.30.1.2 [ 297.140267] [<ffffffff8103703b>] ? test_tsk_need_resched+0xa/0x13
Jun 28 13:18:37 172.30.1.2 [ 297.152847] [<ffffffff8104bee4>] ? __do_softirq+0xb9/0x177
Jun 28 13:18:37 172.30.1.2 [ 297.164227] [<ffffffff8135162c>] ? call_softirq+0x1c/0x30
Jun 28 13:18:37 172.30.1.2 [ 297.175344] <EOI>
Jun 28 13:18:37 172.30.1.2 [ 297.187521] [<ffffffff8128c641>] ? netif_rx_ni+0x1e/0x27
Jun 28 13:18:37 172.30.1.2 [ 297.198537] [<ffffffffa028b721>] ? tun_get_user+0x39a/0x3c2 [tun]
Jun 28 13:18:37 172.30.1.2 [ 297.211100] [<ffffffffa028ba66>] ? tun_chr_poll+0xcd/0xcd [tun]
Jun 28 13:18:37 172.30.1.2 [ 297.223376] [<ffffffffa028bac4>] ? tun_chr_aio_write+0x5e/0x79 [tun]
Jun 28 13:18:37 172.30.1.2 [ 297.236417] [<ffffffff810f97f8>] ? do_sync_readv_writev+0x9a/0xd7
Jun 28 13:18:37 172.30.1.2 [ 297.248994] [<ffffffff81036457>] ? should_resched+0x5/0x23
Jun 28 13:18:37 172.30.1.2 [ 297.260291] [<ffffffff81036457>] ? should_resched+0x5/0x23
Jun 28 13:18:37 172.30.1.2 [ 297.271594] [<ffffffff81162ea1>] ? security_file_permission+0x16/0x2d
Jun 28 13:18:37 172.30.1.2 [ 297.284804] [<ffffffff810f9a5c>] ? do_readv_writev+0xaf/0x11c
Jun 28 13:18:37 172.30.1.2 [ 297.296692] [<ffffffff8112aebe>] ? eventfd_ctx_read+0x162/0x174
Jun 28 13:18:37 172.30.1.2 [ 297.308933] [<ffffffff8103f48f>] ? try_to_wake_up+0x197/0x197
Jun 28 13:18:37 172.30.1.2 [ 297.320754] [<ffffffff810f9c31>] ? sys_writev+0x45/0x90
Jun 28 13:18:37 172.30.1.2 [ 297.331532] [<ffffffff8134f3d2>] ? system_call_fastpath+0x16/0x1b
Jun 28 13:18:37 mork mach_down[22201]: [22388]: info: Taking over resource group 172.30.1.99/24/br1/172.30.1.255
Jun 28 13:18:37 mork ResourceManager[22392]: [22414]: info: Acquiring resource group: mindy 172.30.1.99/24/br1/172.30.1.255
Jun 28 13:19:24 mork mon[12667]: failure for mail2 mxmon 1340882364 172.30.1.22
Jun 28 13:19:24 mork mon[12667]: calling alert marksolmail.down.alert for mail2/mxmon (/usr/lib/mon/alert.d/marksolmail.down.alert,-h) 172.30.1.22
Jun 28 13:20:25 mork mon[12667]: failure for mail2 mxmon 1340882425 172.30.1.22
Jun 28 13:21:25 mork mon[12667]: failure for mail2 mxmon 1340882485 172.30.1.22
Jun 28 13:22:25 mork mon[12667]: failure for mail2 mxmon 1340882545 172.30.1.22
Jun 28 13:23:12 mork ResourceManager[22956]: [22966]: info: Releasing resource group: mindy 172.30.1.99/24/br1/172.30.1.255
Jun 28 13:23:12 mork ResourceManager[22956]: [22983]: info: Running /etc/ha.d/resource.d/IPaddr 172.30.1.99/24/br1/172.30.1.255 stop
Jun 28 13:23:12 mork ResourceManager[22956]: [22984]: debug: Starting /etc/ha.d/resource.d/IPaddr 172.30.1.99/24/br1/172.30.1.255 stop
Jun 28 13:23:12 mork ResourceManager[22956]: [23030]: debug: /etc/ha.d/resource.d/IPaddr 172.30.1.99/24/br1/172.30.1.255 stop done. RC=0
Jun 28 13:23:25 mork mon[12667]: failure for mail2 mxmon 1340882605 172.30.1.22
[-- Attachment #3: 3.2.20.2-2.txt --]
[-- Type: text/plain, Size: 17032 bytes --]
Jun 28 14:16:03 172.30.1.2 [ 3193.846371] BUG: unable to handle kernel
Jun 28 14:16:03 172.30.1.2 [ 3193.862035] IP:
Jun 28 14:16:03 172.30.1.2 [ 3193.876118] PGD 0
Jun 28 14:16:03 172.30.1.2
Jun 28 14:16:03 172.30.1.2 [ 3193.880134] Oops: 0000 [#1]
Jun 28 14:16:03 172.30.1.2 SMP
Jun 28 14:16:03 172.30.1.2
Jun 28 14:16:03 172.30.1.2 [ 3193.886590] CPU 0
Jun 28 14:16:03 172.30.1.2
Jun 28 14:16:03 172.30.1.2 [ 3193.890246] Modules linked in:
Jun 28 14:16:03 172.30.1.2
Jun 28 14:16:03 172.30.1.2 [ 3194.029137]
Jun 28 14:16:03 172.30.1.2 [ 3194.032099] Pid: 0, comm: swapper/0 Not tainted 3.2.0-2-amd64 #1
Jun 28 14:16:03 172.30.1.2 /0N051F
Jun 28 14:16:03 172.30.1.2
Jun 28 14:16:03 172.30.1.2 [ 3194.049664] RIP: 0010:[<ffffffffa01dc33d>]
Jun 28 14:16:03 172.30.1.2 [ 3194.068599] RSP: 0018:ffff88042fc039b0 EFLAGS: 00010293
Jun 28 14:16:03 172.30.1.2 [ 3194.079206] RAX: 0000000000000000 RBX: ffff8802f335f980 RCX: 0000000000000006
Jun 28 14:16:03 172.30.1.2 [ 3194.093456] RDX: ffffffffa01dc30f RSI: 00000001000b4640 RDI: ffff8802f335f980
Jun 28 14:16:03 172.30.1.2 [ 3194.107706] RBP: ffff880424ce6000 R08: 0000000000000000 R09: ffff88042fc03968
Jun 28 14:16:03 172.30.1.2 [ 3194.121957] R10: ffffffff8165ab00 R11: ffffffff8165ab00 R12: 0000000000000000
Jun 28 14:16:03 172.30.1.2 [ 3194.136206] R13: ffff880426cc1002 R14: ffff8802e094f140 R15: ffff880426cc1000
Jun 28 14:16:03 172.30.1.2 [ 3194.150456] FS: 0000000000000000(0000) GS:ffff88042fc00000(0000) knlGS:0000000000000000
Jun 28 14:16:03 172.30.1.2 [ 3194.166629] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
Jun 28 14:16:03 172.30.1.2 [ 3194.178104] CR2: 0000000000000018 CR3: 00000001c304d000 CR4: 00000000000026e0
Jun 28 14:16:03 172.30.1.2 [ 3194.192353] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
Jun 28 14:16:03 172.30.1.2 [ 3194.206602] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Jun 28 14:16:03 172.30.1.2 [ 3194.220852] Process swapper/0 (pid: 0, threadinfo ffffffff81600000, task ffffffff8160d020)
Jun 28 14:16:03 172.30.1.2 [ 3194.237370] Stack:
Jun 28 14:16:03 172.30.1.2 [ 3194.241387] ffffffff80000000
Jun 28 14:16:03 172.30.1.2
Jun 28 14:16:03 172.30.1.2 [ 3194.256222] ffff880424d4c000
Jun 28 14:16:03 172.30.1.2
Jun 28 14:16:03 172.30.1.2 [ 3194.271056] ffff8802f335f980
Jun 28 14:16:03 172.30.1.2
Jun 28 14:16:03 172.30.1.2 [ 3194.285891] Call Trace:
Jun 28 14:16:03 172.30.1.2 [ 3194.290776] <IRQ>
Jun 28 14:16:03 172.30.1.2
Jun 28 14:16:03 172.30.1.2 [ 3194.294987] [<ffffffffa01dc714>] ? br_parse_ip_options+0x3d/0x19a [bridge]
Jun 28 14:16:03 172.30.1.2 [ 3194.308893] [<ffffffffa01dcaa0>] ? br_nf_forward_ip+0x1c0/0x1d4 [bridge]
Jun 28 14:16:03 172.30.1.2 [ 3194.322456] [<ffffffff812ad0ed>] ? nf_iterate+0x41/0x77
Jun 28 14:16:03 172.30.1.2 [ 3194.333067] [<ffffffffa01d7941>] ? __br_deliver+0xa0/0xa0 [bridge]
Jun 28 14:16:03 172.30.1.2 [ 3194.345586] [<ffffffffa01d7941>] ? __br_deliver+0xa0/0xa0 [bridge]
Jun 28 14:16:03 172.30.1.2 [ 3194.358104] [<ffffffff812ad18b>] ? nf_hook_slow+0x68/0x101
Jun 28 14:16:03 172.30.1.2 [ 3194.369235] [<ffffffffa01d7941>] ? __br_deliver+0xa0/0xa0 [bridge]
Jun 28 14:16:03 172.30.1.2 [ 3194.381756] [<ffffffffa01d83a2>] ? NF_HOOK.constprop.4+0x56/0x56 [bridge]
Jun 28 14:16:03 172.30.1.2 [ 3194.395489] [<ffffffffa01d7941>] ? __br_deliver+0xa0/0xa0 [bridge]
Jun 28 14:16:03 172.30.1.2 [ 3194.408007] [<ffffffffa01d7887>] ? NF_HOOK.constprop.10+0x3c/0x56 [bridge]
Jun 28 14:16:03 172.30.1.2 [ 3194.421913] [<ffffffffa01d7a1b>] ? br_forward+0x16/0x5a [bridge]
Jun 28 14:16:03 172.30.1.2 [ 3194.434086] [<ffffffffa01d8543>] ? br_handle_frame_finish+0x1a1/0x20f [bridge]
Jun 28 14:16:03 172.30.1.2 [ 3194.448703] [<ffffffffa01dc638>] ? br_nf_pre_routing_finish+0x1ee/0x1fb [bridge]
Jun 28 14:16:03 172.30.1.2 [ 3194.463664] [<ffffffffa01dbff7>] ? NF_HOOK_THRESH+0x3b/0x55 [bridge]
Jun 28 14:16:03 172.30.1.2 [ 3194.476529] [<ffffffffa01dcf91>] ? br_nf_pre_routing+0x3e8/0x3f5 [bridge]
Jun 28 14:16:03 172.30.1.2 [ 3194.490260] [<ffffffff812ad0ed>] ? nf_iterate+0x41/0x77
Jun 28 14:16:03 172.30.1.2 [ 3194.500871] [<ffffffffa01d83a2>] ? NF_HOOK.constprop.4+0x56/0x56 [bridge]
Jun 28 14:16:03 172.30.1.2 [ 3194.514600] [<ffffffff812ad18b>] ? nf_hook_slow+0x68/0x101
Jun 28 14:16:03 172.30.1.2 [ 3194.525732] [<ffffffffa01d83a2>] ? NF_HOOK.constprop.4+0x56/0x56 [bridge]
Jun 28 14:16:03 172.30.1.2 [ 3194.539466] [<ffffffffa01d83a2>] ? NF_HOOK.constprop.4+0x56/0x56 [bridge]
Jun 28 14:16:03 172.30.1.2 [ 3194.553200] [<ffffffffa01d8388>] ? NF_HOOK.constprop.4+0x3c/0x56 [bridge]
Jun 28 14:16:03 172.30.1.2 [ 3194.566933] [<ffffffff812bd793>] ? tcp_gro_receive+0x83/0x1d8
Jun 28 14:16:03 172.30.1.2 [ 3194.578586] [<ffffffffa01d8764>] ? br_handle_frame+0x1b3/0x1cb [bridge]
Jun 28 14:16:03 172.30.1.2 [ 3194.591971] [<ffffffffa01d85b1>] ? br_handle_frame_finish+0x20f/0x20f [bridge]
Jun 28 14:16:03 172.30.1.2 [ 3194.606588] [<ffffffff8128a306>] ? __netif_receive_skb+0x324/0x41f
Jun 28 14:16:03 172.30.1.2 [ 3194.619106] [<ffffffff8128bd61>] ? netif_receive_skb+0x63/0x69
Jun 28 14:16:03 172.30.1.2 [ 3194.630927] [<ffffffff8128c233>] ? napi_gro_receive+0x1d/0x2b
Jun 28 14:16:03 172.30.1.2 [ 3194.642577] [<ffffffff8128bddd>] ? napi_skb_finish+0x1c/0x31
Jun 28 14:16:03 172.30.1.2 [ 3194.654057] [<ffffffffa00b6460>] ? bnx2_poll_work+0x84a/0x95d [bnx2]
Jun 28 14:16:03 172.30.1.2 [ 3194.666926] [<ffffffff8103f47f>] ? try_to_wake_up+0x187/0x197
Jun 28 14:16:03 172.30.1.2 [ 3194.678579] [<ffffffffa00b6716>] ? bnx2_poll+0xf6/0x1c4 [bnx2]
Jun 28 14:16:03 172.30.1.2 [ 3194.690402] [<ffffffff8128c351>] ? net_rx_action+0xa1/0x1af
Jun 28 14:16:03 172.30.1.2 [ 3194.701706] [<ffffffff81037d6e>] ? __wake_up+0x35/0x46
Jun 28 14:16:03 172.30.1.2 [ 3194.712143] [<ffffffff8104bee4>] ? __do_softirq+0xb9/0x177
Jun 28 14:16:03 172.30.1.2 [ 3194.723276] [<ffffffff8106a8e7>] ? clockevents_program_event+0xaa/0xce
Jun 28 14:16:04 172.30.1.2 [ 3194.736491] [<ffffffff8135162c>] ? call_softirq+0x1c/0x30
Jun 28 14:16:04 172.30.1.2 [ 3194.747450] [<ffffffff8100f8e5>] ? do_softirq+0x3c/0x7b
Jun 28 14:16:04 172.30.1.2 [ 3194.758059] [<ffffffff8104c14c>] ? irq_exit+0x3c/0x9a
Jun 28 14:16:04 172.30.1.2 [ 3194.768320] [<ffffffff8100f615>] ? do_IRQ+0x82/0x98
Jun 28 14:16:04 172.30.1.2 [ 3194.778239] [<ffffffff8134a6ee>] ? common_interrupt+0x6e/0x6e
Jun 28 14:16:04 172.30.1.2 [ 3194.789886] <EOI>
Jun 28 14:16:04 172.30.1.2
Jun 28 14:16:04 172.30.1.2 [ 3194.794091] [<ffffffff811aed74>] ? timerqueue_add+0x80/0xa0
Jun 28 14:16:04 172.30.1.2 [ 3194.805397] [<ffffffff811ec569>] ? intel_idle+0xea/0x119
Jun 28 14:16:04 172.30.1.2 [ 3194.816179] [<ffffffff811ec548>] ? intel_idle+0xc9/0x119
Jun 28 14:16:04 172.30.1.2 [ 3194.826966] [<ffffffff8126c573>] ? cpuidle_idle_call+0xec/0x179
Jun 28 14:16:04 172.30.1.2 [ 3194.838963] [<ffffffff8100d248>] ? cpu_idle+0xa5/0xf2
Jun 28 14:16:04 172.30.1.2 [ 3194.849225] [<ffffffff816aab33>] ? start_kernel+0x3b3/0x3be
Jun 28 14:16:04 172.30.1.2 [ 3194.860528] [<ffffffff816aa140>] ? early_idt_handlers+0x140/0x140
Jun 28 14:16:04 172.30.1.2 [ 3194.872870] [<ffffffff816aa3c4>] ? x86_64_start_kernel+0x104/0x111
Jun 28 14:16:04 172.30.1.2 [ 3194.885386] Code:
Jun 28 14:16:04 172.30.1.2 53
Jun 28 14:16:04 172.30.1.2 48
Jun 28 14:16:04 172.30.1.2 89
Jun 28 14:16:04 172.30.1.2 fb
Jun 28 14:16:04 172.30.1.2 48
Jun 28 14:16:04 172.30.1.2 83
Jun 28 14:16:04 172.30.1.2 ec
Jun 28 14:16:04 172.30.1.2 10
Jun 28 14:16:04 172.30.1.2 66
Jun 28 14:16:04 172.30.1.2 81
Jun 28 14:16:04 172.30.1.2 7f
Jun 28 14:16:04 172.30.1.2 7e
Jun 28 14:16:04 172.30.1.2 08
Jun 28 14:16:04 172.30.1.2 06
Jun 28 14:16:04 172.30.1.2 4c
Jun 28 14:16:04 172.30.1.2 8b
Jun 28 14:16:04 172.30.1.2 a7
Jun 28 14:16:04 172.30.1.2 98
Jun 28 14:16:04 172.30.1.2 00
Jun 28 14:16:04 172.30.1.2 00
Jun 28 14:16:04 172.30.1.2 00
Jun 28 14:16:04 172.30.1.2 74
Jun 28 14:16:04 172.30.1.2 3d
Jun 28 14:16:04 172.30.1.2 e8
Jun 28 14:16:04 172.30.1.2 07
Jun 28 14:16:04 172.30.1.2 fe
Jun 28 14:16:04 172.30.1.2 ff
Jun 28 14:16:04 172.30.1.2 ff
Jun 28 14:16:04 172.30.1.2 66
Jun 28 14:16:04 172.30.1.2 3d
Jun 28 14:16:04 172.30.1.2 08
Jun 28 14:16:04 172.30.1.2 06
Jun 28 14:16:04 172.30.1.2 75
Jun 28 14:16:04 172.30.1.2 09
Jun 28 14:16:04 172.30.1.2 83
Jun 28 14:16:04 172.30.1.2 3d
Jun 28 14:16:04 172.30.1.2 91
Jun 28 14:16:04 172.30.1.2 6a
Jun 28 14:16:04 172.30.1.2 00
Jun 28 14:16:04 172.30.1.2 00
Jun 28 14:16:04 172.30.1.2 00
Jun 28 14:16:04 172.30.1.2 75
Jun 28 14:16:04 172.30.1.2 29
Jun 28 14:16:04 172.30.1.2
Jun 28 14:16:04 172.30.1.2 f6
Jun 28 14:16:04 172.30.1.2 44
Jun 28 14:16:04 172.30.1.2 24
Jun 28 14:16:04 172.30.1.2 18
Jun 28 14:16:04 172.30.1.2 01
Jun 28 14:16:04 172.30.1.2 49
Jun 28 14:16:04 172.30.1.2 8b
Jun 28 14:16:04 172.30.1.2 6c
Jun 28 14:16:04 172.30.1.2 24
Jun 28 14:16:04 172.30.1.2 08
Jun 28 14:16:04 172.30.1.2 74
Jun 28 14:16:04 172.30.1.2 12
Jun 28 14:16:04 172.30.1.2 8a
Jun 28 14:16:04 172.30.1.2 43
Jun 28 14:16:04 172.30.1.2 7d
Jun 28 14:16:04 172.30.1.2 83
Jun 28 14:16:04 172.30.1.2 e0
Jun 28 14:16:04 172.30.1.2 f8
Jun 28 14:16:04 172.30.1.2 83
Jun 28 14:16:04 172.30.1.2 c8
Jun 28 14:16:04 172.30.1.2
Jun 28 14:16:04 172.30.1.2 [ 3194.924067] RIP
Jun 28 14:16:04 172.30.1.2 [ 3194.938333] RSP <ffff88042fc039b0>
Jun 28 14:16:04 172.30.1.2 [ 3194.945299] CR2: 0000000000000018
Jun 28 14:16:04 172.30.1.2 [ 3194.952668] ---[ end trace c28d39074732fa49 ]---
Jun 28 14:16:04 172.30.1.2 [ 3194.962197] Kernel panic - not syncing: Fatal exception in interrupt
Jun 28 14:16:04 172.30.1.2 [ 3194.975155] Pid: 0, comm: swapper/0 Tainted: G D 3.2.0-2-amd64 #1
Jun 28 14:16:04 172.30.1.2 [ 3194.989324] Call Trace:
Jun 28 14:16:04 172.30.1.2 [ 3194.994443] <IRQ>
Jun 28 14:16:04 172.30.1.2 [ 3195.006177] [<ffffffff8134b246>] ? oops_end+0xa9/0xb6
Jun 28 14:16:04 172.30.1.2 [ 3195.016744] [<ffffffff8134362d>] ? no_context+0x1ff/0x20e
Jun 28 14:16:04 172.30.1.2 [ 3195.028010] [<ffffffff810e9e7c>] ? virt_to_slab+0x6/0x16
Jun 28 14:16:04 172.30.1.2 [ 3195.039098] [<ffffffff810e9f1f>] ? __cache_free.isra.41+0x3d/0x198
Jun 28 14:16:04 172.30.1.2 [ 3195.051922] [<ffffffff8134d259>] ? do_page_fault+0x1a8/0x337
Jun 28 14:16:04 172.30.1.2 [ 3195.063621] [<ffffffffa03cbf06>] ? ip_vs_conn_put+0x28/0x32 [ip_vs]
Jun 28 14:16:04 172.30.1.2 [ 3195.076593] [<ffffffffa03ce0e0>] ? ip_vs_out+0x2bd/0x432 [ip_vs]
Jun 28 14:16:04 172.30.1.2 [ 3195.089052] [<ffffffffa01d7847>] ? br_dev_queue_push_xmit+0x9b/0x9f [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.103656] [<ffffffff8134a9b5>] ? page_fault+0x25/0x30
Jun 28 14:16:04 172.30.1.2 [ 3195.114563] [<ffffffffa01dc30f>] ? nf_bridge_update_protocol+0x20/0x20 [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.129719] [<ffffffffa01dc33d>] ? br_nf_forward_finish+0x2e/0x95 [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.143939] [<ffffffffa01dc714>] ? br_parse_ip_options+0x3d/0x19a [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.158197] [<ffffffffa01dcaa0>] ? br_nf_forward_ip+0x1c0/0x1d4 [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.172126] [<ffffffff812ad0ed>] ? nf_iterate+0x41/0x77
Jun 28 14:16:04 172.30.1.2 [ 3195.183162] [<ffffffffa01d7941>] ? __br_deliver+0xa0/0xa0 [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.195973] [<ffffffffa01d7941>] ? __br_deliver+0xa0/0xa0 [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.208757] [<ffffffff812ad18b>] ? nf_hook_slow+0x68/0x101
Jun 28 14:16:04 172.30.1.2 [ 3195.220300] [<ffffffffa01d7941>] ? __br_deliver+0xa0/0xa0 [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.233150] [<ffffffffa01d83a2>] ? NF_HOOK.constprop.4+0x56/0x56 [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.247306] [<ffffffffa01d7941>] ? __br_deliver+0xa0/0xa0 [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.260078] [<ffffffffa01d7887>] ? NF_HOOK.constprop.10+0x3c/0x56 [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.274354] [<ffffffffa01d7a1b>] ? br_forward+0x16/0x5a [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.286828] [<ffffffffa01d8543>] ? br_handle_frame_finish+0x1a1/0x20f [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.301718] [<ffffffffa01dc638>] ? br_nf_pre_routing_finish+0x1ee/0x1fb [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.317041] [<ffffffffa01dbff7>] ? NF_HOOK_THRESH+0x3b/0x55 [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.330274] [<ffffffffa01dcf91>] ? br_nf_pre_routing+0x3e8/0x3f5 [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.344275] [<ffffffff812ad0ed>] ? nf_iterate+0x41/0x77
Jun 28 14:16:04 172.30.1.2 [ 3195.355232] [<ffffffffa01d83a2>] ? NF_HOOK.constprop.4+0x56/0x56 [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.369214] [<ffffffff812ad18b>] ? nf_hook_slow+0x68/0x101
Jun 28 14:16:04 172.30.1.2 [ 3195.380687] [<ffffffffa01d83a2>] ? NF_HOOK.constprop.4+0x56/0x56 [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.394806] [<ffffffffa01d83a2>] ? NF_HOOK.constprop.4+0x56/0x56 [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.408906] [<ffffffffa01d8388>] ? NF_HOOK.constprop.4+0x3c/0x56 [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.423003] [<ffffffff812bd793>] ? tcp_gro_receive+0x83/0x1d8
Jun 28 14:16:04 172.30.1.2 [ 3195.434976] [<ffffffffa01d8764>] ? br_handle_frame+0x1b3/0x1cb [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.448742] [<ffffffffa01d85b1>] ? br_handle_frame_finish+0x20f/0x20f [bridge]
Jun 28 14:16:04 172.30.1.2 [ 3195.463742] [<ffffffff8128a306>] ? __netif_receive_skb+0x324/0x41f
Jun 28 14:16:04 172.30.1.2 [ 3195.476522] [<ffffffff8128bd61>] ? netif_receive_skb+0x63/0x69
Jun 28 14:16:04 172.30.1.2 [ 3195.488591] [<ffffffff8128c233>] ? napi_gro_receive+0x1d/0x2b
Jun 28 14:16:04 172.30.1.2 [ 3195.500581] [<ffffffff8128bddd>] ? napi_skb_finish+0x1c/0x31
Jun 28 14:16:04 172.30.1.2 [ 3195.512350] [<ffffffffa00b6460>] ? bnx2_poll_work+0x84a/0x95d [bnx2]
Jun 28 14:16:04 172.30.1.2 [ 3195.525547] [<ffffffff8103f47f>] ? try_to_wake_up+0x187/0x197
Jun 28 14:16:04 172.30.1.2 [ 3195.537480] [<ffffffffa00b6716>] ? bnx2_poll+0xf6/0x1c4 [bnx2]
Jun 28 14:16:04 172.30.1.2 [ 3195.549671] [<ffffffff8128c351>] ? net_rx_action+0xa1/0x1af
Jun 28 14:16:04 172.30.1.2 [ 3195.561264] [<ffffffff81037d6e>] ? __wake_up+0x35/0x46
Jun 28 14:16:04 172.30.1.2 [ 3195.572052] [<ffffffff8104bee4>] ? __do_softirq+0xb9/0x177
Jun 28 14:16:04 172.30.1.2 [ 3195.583508] [<ffffffff8106a8e7>] ? clockevents_program_event+0xaa/0xce
Jun 28 14:16:04 172.30.1.2 [ 3195.597050] [<ffffffff8135162c>] ? call_softirq+0x1c/0x30
Jun 28 14:16:04 172.30.1.2 [ 3195.608366] [<ffffffff8100f8e5>] ? do_softirq+0x3c/0x7b
Jun 28 14:16:04 172.30.1.2 [ 3195.619247] [<ffffffff8104c14c>] ? irq_exit+0x3c/0x9a
Jun 28 14:16:04 172.30.1.2 [ 3195.629829] [<ffffffff8100f615>] ? do_IRQ+0x82/0x98
Jun 28 14:16:04 172.30.1.2 [ 3195.640035] [<ffffffff8134a6ee>] ? common_interrupt+0x6e/0x6e
Jun 28 14:16:04 172.30.1.2 [ 3195.652030] <EOI>
Jun 28 14:16:04 172.30.1.2 [ 3195.665050] [<ffffffff811ec569>] ? intel_idle+0xea/0x119
Jun 28 14:16:04 172.30.1.2 [ 3195.676195] [<ffffffff811ec548>] ? intel_idle+0xc9/0x119
Jun 28 14:16:04 172.30.1.2 [ 3195.687278] [<ffffffff8126c573>] ? cpuidle_idle_call+0xec/0x179
Jun 28 14:16:04 172.30.1.2 [ 3195.699551] [<ffffffff8100d248>] ? cpu_idle+0xa5/0xf2
Jun 28 14:16:04 172.30.1.2 [ 3195.710072] [<ffffffff816aab33>] ? start_kernel+0x3b3/0x3be
Jun 28 14:16:04 172.30.1.2 [ 3195.721740] [<ffffffff816aa140>] ? early_idt_handlers+0x140/0x140
Jun 28 14:16:05 172.30.1.2 [ 3195.734358] [<ffffffff816aa3c4>] ? x86_64_start_kernel+0x104/0x111
Jun 28 14:16:05 172.30.1.2 [ 3195.747405] ------------[ cut here ]------------
Jun 28 14:16:05 172.30.1.2 [ 3195.756678] WARNING: at /build/buildd-linux_3.2.20-1-amd64-lTzScn/linux-3.2.20/arch/x86/kernel/smp.c:119 try_to_wake_up+0x158/0x197()
Jun 28 14:16:05 172.30.1.2 [ 3195.780697] Hardware name: PowerEdge R410
Jun 28 14:16:05 172.30.1.2 [ 3195.788744] Modules linked in:
Jun 28 14:16:05 172.30.1.2
Jun 28 14:16:05 172.30.1.2 [ 3195.930822] Pid: 4659, comm: kvm Tainted: G D 3.2.0-2-amd64 #1
Jun 28 14:16:05 172.30.1.2 [ 3195.944245] Call Trace:
Jun 28 14:16:05 172.30.1.2 [ 3195.949175] [<ffffffff810468fd>] ? warn_slowpath_common+0x78/0x8c
Jun 28 14:16:05 172.30.1.2 [ 3195.961562] [<ffffffff8103f450>] ? try_to_wake_up+0x158/0x197
Jun 28 14:16:05 172.30.1.2 [ 3195.973256] [<ffffffff811071e2>] ? pollwake+0x4d/0x52
Jun 28 14:16:05 172.30.1.2 [ 3195.983560] [<ffffffff8103f48f>] ? try_to_wake_up+0x197/0x197
Jun 28 14:16:05 172.30.1.2 [ 3195.995254] [<ffffffff810360b2>] ? __wake_up_common+0x40/0x77
Jun 28 14:16:05 172.30.1.2 [ 3196.006949] [<ffffffff8112ad43>] ? eventfd_write+0x1a3/0x1bc
Jun 28 14:16:05 172.30.1.2 [ 3196.018467] [<ffffffff8103f48f>] ? try_to_wake_up+0x197/0x197
Jun 28 14:16:05 172.30.1.2 [ 3196.030162] [<ffffffff810f947f>] ? vfs_write+0xa2/0xe9
Jun 28 14:16:05 172.30.1.2 [ 3196.040649] [<ffffffffa022a5fb>] ? kvm_on_user_return+0x36/0x5c [kvm]
Jun 28 14:16:05 172.30.1.2 [ 3196.053728] [<ffffffff810f965c>] ? sys_write+0x45/0x6b
Jun 28 14:16:05 172.30.1.2 [ 3196.064206] [<ffffffff8134f3d2>] ? system_call_fastpath+0x16/0x1b
Jun 28 14:16:05 172.30.1.2 [ 3196.076589] ---[ end trace c28d39074732fa4a ]---
[-- Attachment #4: 3.2.21-1.txt --]
[-- Type: text/plain, Size: 23789 bytes --]
Jun 28 15:29:19 172.30.1.2 [ 304.578777] BUG: unable to handle kernel
Jun 28 15:29:19 172.30.1.2 [ 304.594562] IP:
Jun 28 15:29:19 172.30.1.2 [ 304.608732] PGD 0
Jun 28 15:29:19 172.30.1.2
Jun 28 15:29:19 172.30.1.2 [ 304.612831] Oops: 0000 [#1]
Jun 28 15:29:19 172.30.1.2 SMP
Jun 28 15:29:19 172.30.1.2
Jun 28 15:29:19 172.30.1.2 [ 304.619414] CPU 0
Jun 28 15:29:19 172.30.1.2
Jun 28 15:29:19 172.30.1.2 [ 304.623112] Modules linked in:
Jun 28 15:29:19 172.30.1.2
Jun 28 15:29:19 172.30.1.2 [ 304.765458]
Jun 28 15:29:19 172.30.1.2 [ 304.768463] Pid: 4486, comm: kvm Not tainted 3.2.21 #1
Jun 28 15:29:19 172.30.1.2 /0N051F
Jun 28 15:29:19 172.30.1.2
Jun 28 15:29:19 172.30.1.2 [ 304.784464] RIP: 0010:[<ffffffffa01d09d0>]
Jun 28 15:29:19 172.30.1.2 [ 304.803483] RSP: 0018:ffff88042fc03960 EFLAGS: 00010287
Jun 28 15:29:19 172.30.1.2 [ 304.814133] RAX: 0000000000000008 RBX: ffff880422148d80 RCX: ffff88042fc03706
Jun 28 15:29:19 172.30.1.2 [ 304.828426] RDX: 0000000000000000 RSI: 0000000100003f40 RDI: ffff880422148d80
Jun 28 15:29:19 172.30.1.2 [ 304.842719] RBP: ffff880221d2c000 R08: 0000000000000000 R09: ffff88042fc03918
Jun 28 15:29:19 172.30.1.2 [ 304.857012] R10: ffffffff8180b240 R11: ffff880422148d80 R12: ffff880221bc8000
Jun 28 15:29:19 172.30.1.2 [ 304.871303] R13: ffff880418d91500 R14: ffff880221bc8002 R15: ffff880420cdf000
Jun 28 15:29:19 172.30.1.2 [ 304.885595] FS: 00007f8d47807900(0000) GS:ffff88042fc00000(0000) knlGS:0000000000000000
Jun 28 15:29:19 172.30.1.2 [ 304.901811] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
Jun 28 15:29:19 172.30.1.2 [ 304.913328] CR2: 0000000000000018 CR3: 000000041c3d1000 CR4: 00000000000026e0
Jun 28 15:29:19 172.30.1.2 [ 304.927620] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
Jun 28 15:29:19 172.30.1.2 [ 304.941912] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Jun 28 15:29:19 172.30.1.2 [ 304.956205] Process kvm (pid: 4486, threadinfo ffff88040f24e000, task ffff8804215f9510)
Jun 28 15:29:19 172.30.1.2 [ 304.972247] Stack:
Jun 28 15:29:19 172.30.1.2 [ 304.976307] 0000000080000000
Jun 28 15:29:19 172.30.1.2
Jun 28 15:29:19 172.30.1.2 [ 304.991349] ffff880221d2c000
Jun 28 15:29:19 172.30.1.2
Jun 28 15:29:19 172.30.1.2 [ 305.006392] ffff880422148d80
Jun 28 15:29:19 172.30.1.2
Jun 28 15:29:19 172.30.1.2 [ 305.021434] Call Trace:
Jun 28 15:29:19 172.30.1.2 [ 305.026360] <IRQ>
Jun 28 15:29:19 172.30.1.2
Jun 28 15:29:19 172.30.1.2 [ 305.030651] [<ffffffffa01d0c91>] ? br_nf_forward_ip+0x214/0x231 [bridge]
Jun 28 15:29:19 172.30.1.2 [ 305.044255] [<ffffffff812c7de1>] ? nf_iterate+0x41/0x77
Jun 28 15:29:19 172.30.1.2 [ 305.054909] [<ffffffffa01cba5a>] ? br_deliver+0x2d/0x2d [bridge]
Jun 28 15:29:19 172.30.1.2 [ 305.067122] [<ffffffffa01cba5a>] ? br_deliver+0x2d/0x2d [bridge]
Jun 28 15:29:19 172.30.1.2 [ 305.079336] [<ffffffff812c7f3a>] ? nf_hook_slow+0x68/0xfd
Jun 28 15:29:19 172.30.1.2 [ 305.090336] [<ffffffffa01cba5a>] ? br_deliver+0x2d/0x2d [bridge]
Jun 28 15:29:19 172.30.1.2 [ 305.102552] [<ffffffffa01cc476>] ? T.947+0x56/0x56 [bridge]
Jun 28 15:29:19 172.30.1.2 [ 305.113898] [<ffffffffa01cba5a>] ? br_deliver+0x2d/0x2d [bridge]
Jun 28 15:29:19 172.30.1.2 [ 305.126113] [<ffffffffa01cb96e>] ? T.963+0x3c/0x56 [bridge]
Jun 28 15:29:19 172.30.1.2 [ 305.137460] [<ffffffffa01ca753>] ? __br_fdb_get+0x10/0x83 [bridge]
Jun 28 15:29:19 172.30.1.2 [ 305.150021] [<ffffffffa01cc61d>] ? br_handle_frame_finish+0x1a7/0x211 [bridge]
Jun 28 15:29:19 172.30.1.2 [ 305.164680] [<ffffffffa01d1598>] ? br_nf_pre_routing_finish+0x222/0x22f [bridge]
Jun 28 15:29:19 172.30.1.2 [ 305.179685] [<ffffffffa01d03b5>] ? NF_HOOK_THRESH+0x3b/0x55 [bridge]
Jun 28 15:29:19 172.30.1.2 [ 305.192593] [<ffffffffa01d135b>] ? br_nf_pre_routing+0x4fc/0x517 [bridge]
Jun 28 15:29:19 172.30.1.2 [ 305.206366] [<ffffffff812ce172>] ? T.1028+0x4f/0x4f
Jun 28 15:29:19 172.30.1.2 [ 305.216322] [<ffffffff812c7de1>] ? nf_iterate+0x41/0x77
Jun 28 15:29:19 172.30.1.2 [ 305.226975] [<ffffffffa01cc476>] ? T.947+0x56/0x56 [bridge]
Jun 28 15:29:19 172.30.1.2 [ 305.238320] [<ffffffff812c7f3a>] ? nf_hook_slow+0x68/0xfd
Jun 28 15:29:19 172.30.1.2 [ 305.249320] [<ffffffffa01cc476>] ? T.947+0x56/0x56 [bridge]
Jun 28 15:29:19 172.30.1.2 [ 305.260669] [<ffffffffa01cc476>] ? T.947+0x56/0x56 [bridge]
Jun 28 15:29:19 172.30.1.2 [ 305.272015] [<ffffffffa01cc45c>] ? T.947+0x3c/0x56 [bridge]
Jun 28 15:29:19 172.30.1.2 [ 305.283363] [<ffffffffa01cc84a>] ? br_handle_frame+0x1c3/0x1d9 [bridge]
Jun 28 15:29:19 172.30.1.2 [ 305.296790] [<ffffffffa01cc687>] ? br_handle_frame_finish+0x211/0x211 [bridge]
Jun 28 15:29:19 172.30.1.2 [ 305.311448] [<ffffffff812a74f2>] ? __netif_receive_skb+0x37a/0x490
Jun 28 15:29:19 172.30.1.2 [ 305.324009] [<ffffffff81013a01>] ? read_tsc+0x5/0x16
Jun 28 15:29:19 172.30.1.2 [ 305.334139] [<ffffffff812a799f>] ? netif_receive_skb+0x67/0x6d
Jun 28 15:29:19 172.30.1.2 [ 305.346005] [<ffffffff812a7f0b>] ? napi_gro_receive+0x1f/0x2d
Jun 28 15:29:19 172.30.1.2 [ 305.357697] [<ffffffff812a7a79>] ? napi_skb_finish+0x1c/0x31
Jun 28 15:29:19 172.30.1.2 [ 305.369220] [<ffffffffa0009a21>] ? bnx2_poll_work+0x8db/0x9f4 [bnx2]
Jun 28 15:29:19 172.30.1.2 [ 305.382128] [<ffffffffa00092f4>] ? bnx2_poll_work+0x1ae/0x9f4 [bnx2]
Jun 28 15:29:19 172.30.1.2 [ 305.395036] [<ffffffffa01cc45c>] ? T.947+0x3c/0x56 [bridge]
Jun 28 15:29:19 172.30.1.2 [ 305.406383] [<ffffffffa0009cfc>] ? bnx2_poll+0x116/0x1f2 [bnx2]
Jun 28 15:29:19 172.30.1.2 [ 305.418421] [<ffffffff812a74f2>] ? __netif_receive_skb+0x37a/0x490
Jun 28 15:29:19 172.30.1.2 [ 305.430980] [<ffffffff812a8038>] ? net_rx_action+0xa8/0x207
Jun 28 15:29:19 172.30.1.2 [ 305.442327] [<ffffffff8106637e>] ? hrtimer_get_next_event+0x7f/0x9a
Jun 28 15:29:19 172.30.1.2 [ 305.455060] [<ffffffff8104f11e>] ? __do_softirq+0xc4/0x1a0
Jun 28 15:29:19 172.30.1.2 [ 305.466234] [<ffffffff81097905>] ? handle_irq_event_percpu+0x166/0x184
Jun 28 15:29:19 172.30.1.2 [ 305.479490] [<ffffffff8136bd6c>] ? call_softirq+0x1c/0x30
Jun 28 15:29:19 172.30.1.2 [ 305.490492] [<ffffffff8100fa3f>] ? do_softirq+0x3f/0x79
Jun 28 15:29:19 172.30.1.2 [ 305.501142] [<ffffffff8104eeee>] ? irq_exit+0x44/0xb5
Jun 28 15:29:19 172.30.1.2 [ 305.511446] [<ffffffff8100f38a>] ? do_IRQ+0x94/0xaa
Jun 28 15:29:19 172.30.1.2 [ 305.521407] [<ffffffff813647ee>] ? common_interrupt+0x6e/0x6e
Jun 28 15:29:19 172.30.1.2 [ 305.533098] <EOI>
Jun 28 15:29:19 172.30.1.2
Jun 28 15:29:20 172.30.1.2 [ 305.537386] [<ffffffff81364498>] ? _raw_spin_unlock_irqrestore+0xb/0x11
Jun 28 15:29:20 172.30.1.2 [ 305.550816] [<ffffffff81045f07>] ? try_to_wake_up+0x181/0x190
Jun 28 15:29:20 172.30.1.2 [ 305.562510] [<ffffffff81071764>] ? wake_futex+0x2b/0x47
Jun 28 15:29:20 172.30.1.2 [ 305.573161] [<ffffffff81073949>] ? do_futex+0x3de/0x84a
Jun 28 15:29:20 172.30.1.2 [ 305.583814] [<ffffffff810dfff1>] ? do_brk+0x2ca/0x326
Jun 28 15:29:20 172.30.1.2 [ 305.594119] [<ffffffff81073ee4>] ? sys_futex+0x12f/0x147
Jun 28 15:29:20 172.30.1.2 [ 305.604945] [<ffffffff81369b12>] ? system_call_fastpath+0x16/0x1b
Jun 28 15:29:20 172.30.1.2 [ 305.617329] Code:
Jun 28 15:29:20 172.30.1.2 00
Jun 28 15:29:20 172.30.1.2 00
Jun 28 15:29:20 172.30.1.2 00
Jun 28 15:29:20 172.30.1.2 10
Jun 28 15:29:20 172.30.1.2 75
Jun 28 15:29:20 172.30.1.2 25
Jun 28 15:29:20 172.30.1.2 66
Jun 28 15:29:20 172.30.1.2 3d
Jun 28 15:29:20 172.30.1.2 81
Jun 28 15:29:20 172.30.1.2 00
Jun 28 15:29:20 172.30.1.2 75
Jun 28 15:29:20 172.30.1.2 1f
Jun 28 15:29:20 172.30.1.2 8b
Jun 28 15:29:20 172.30.1.2 87
Jun 28 15:29:20 172.30.1.2 c8
Jun 28 15:29:20 172.30.1.2 00
Jun 28 15:29:20 172.30.1.2 00
Jun 28 15:29:20 172.30.1.2 00
Jun 28 15:29:20 172.30.1.2 48
Jun 28 15:29:20 172.30.1.2 8b
Jun 28 15:29:20 172.30.1.2 8f
Jun 28 15:29:20 172.30.1.2 d8
Jun 28 15:29:20 172.30.1.2 00
Jun 28 15:29:20 172.30.1.2 00
Jun 28 15:29:20 172.30.1.2 00
Jun 28 15:29:20 172.30.1.2 66
Jun 28 15:29:20 172.30.1.2 81
Jun 28 15:29:20 172.30.1.2 7c
Jun 28 15:29:20 172.30.1.2 01
Jun 28 15:29:20 172.30.1.2 10
Jun 28 15:29:20 172.30.1.2 08
Jun 28 15:29:20 172.30.1.2 06
Jun 28 15:29:20 172.30.1.2 75
Jun 28 15:29:20 172.30.1.2 09
Jun 28 15:29:20 172.30.1.2 83
Jun 28 15:29:20 172.30.1.2 3d
Jun 28 15:29:20 172.30.1.2 f2
Jun 28 15:29:20 172.30.1.2 63
Jun 28 15:29:20 172.30.1.2 00
Jun 28 15:29:20 172.30.1.2 00
Jun 28 15:29:20 172.30.1.2 00
Jun 28 15:29:20 172.30.1.2 75
Jun 28 15:29:20 172.30.1.2 3c
Jun 28 15:29:20 172.30.1.2 f6>
Jun 28 15:29:20 172.30.1.2 42
Jun 28 15:29:20 172.30.1.2 18
Jun 28 15:29:20 172.30.1.2 01
Jun 28 15:29:20 172.30.1.2 48
Jun 28 15:29:20 172.30.1.2 8b
Jun 28 15:29:20 172.30.1.2 6a
Jun 28 15:29:20 172.30.1.2 08
Jun 28 15:29:20 172.30.1.2 74
Jun 28 15:29:20 172.30.1.2 10
Jun 28 15:29:20 172.30.1.2 8a
Jun 28 15:29:20 172.30.1.2
Jun 28 15:29:20 172.30.1.2 [ 305.652454] ------------[ cut here ]------------
Jun 28 15:29:20 172.30.1.2 [ 305.652457] WARNING: at kernel/softirq.c:159 _local_bh_enable_ip+0x41/0x8b()
Jun 28 15:29:20 172.30.1.2 [ 305.652459] Hardware name: PowerEdge R410
Jun 28 15:29:20 172.30.1.2 [ 305.652460] Modules linked in: ipt_MASQUERADE iptable_nat nf_nat nf_conntrack_ipv4 nf_defrag_ipv4 ip6table_filter ip6_tables iptable_filter ip_tables x_tables ip_vs_rr ip_vs nf_conntrack crc32c libcrc32c drbd lru_cache cn tun virtio_net virtio_blk virtio_rng rng_core virtio_pci virtio_ring virtio kvm_intel kvm ipmi_devintf ipmi_poweroff ipmi_si ipmi_watchdog ipmi_msghandler netconsole configfs loop bridge stp snd_pcm i7core_edac dcdbas edac_core iTCO_wdt iTCO_vendor_support processor psmouse snd_timer snd soundcore snd_page_alloc pcspkr serio_raw joydev thermal_sys button evdev ext3 mbcache jbd dm_mod sr_mod cdrom sd_mod ses usbhid hid crc_t10dif enclosure ata_generic uhci_hcd ata_piix ehci_hcd libata megaraid_sas usbcore scsi_mod usb_common bnx2 [last unloaded: scsi_wait_scan]
Jun 28 15:29:20 172.30.1.2 [ 305.652495] Pid: 4486, comm: kvm Not tainted 3.2.21 #1
Jun 28 15:29:20 172.30.1.2 [ 305.652496] Call Trace:
Jun 28 15:29:20 172.30.1.2 [ 305.652497] <IRQ> [<ffffffff81049810>] ? warn_slowpath_common+0x78/0x8c
Jun 28 15:29:20 172.30.1.2 [ 305.652503] [<ffffffff8104efa0>] ? _local_bh_enable_ip+0x41/0x8b
Jun 28 15:29:20 172.30.1.2 [ 305.652508] [<ffffffffa0000648>] ? bnx2_reg_rd_ind+0x31/0x38 [bnx2]
Jun 28 15:29:20 172.30.1.2 [ 305.652514] [<ffffffffa0009dc8>] ? bnx2_poll+0x1e2/0x1f2 [bnx2]
Jun 28 15:29:20 172.30.1.2 [ 305.652520] [<ffffffff812b6b62>] ? netpoll_poll_dev+0xab/0x4ad
Jun 28 15:29:20 172.30.1.2 [ 305.652525] [<ffffffffa0006ba0>] ? bnx2_start_xmit+0x411/0x55d [bnx2]
Jun 28 15:29:20 172.30.1.2 [ 305.652531] [<ffffffff810f693e>] ? ____cache_alloc+0xc6/0x20d
Jun 28 15:29:20 172.30.1.2 [ 305.652535] [<ffffffff812b7075>] ? netpoll_send_skb_on_dev+0x111/0x215
Jun 28 15:29:20 172.30.1.2 [ 305.652541] [<ffffffffa01ca6d2>] ? br_dev_xmit+0x136/0x150 [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652544] [<ffffffff812b7033>] ? netpoll_send_skb_on_dev+0xcf/0x215
Jun 28 15:29:20 172.30.1.2 [ 305.652551] [<ffffffff811c3157>] ? delay_tsc+0x2b/0x74
Jun 28 15:29:20 172.30.1.2 [ 305.652555] [<ffffffffa0167272>] ? write_msg+0x9f/0x102 [netconsole]
Jun 28 15:29:20 172.30.1.2 [ 305.652558] [<ffffffff810499e6>] ? __call_console_drivers+0x75/0x86
Jun 28 15:29:20 172.30.1.2 [ 305.652561] [<ffffffff8104a084>] ? console_unlock+0x13d/0x1e8
Jun 28 15:29:20 172.30.1.2 [ 305.652564] [<ffffffff8104a707>] ? vprintk+0x39e/0x3e5
Jun 28 15:29:20 172.30.1.2 [ 305.652570] [<ffffffffa01d09db>] ? br_nf_forward_finish+0x53/0xc0 [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652576] [<ffffffffa01d09a5>] ? br_nf_forward_finish+0x1d/0xc0 [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652579] [<ffffffff81362842>] ? printk+0x40/0x46
Jun 28 15:29:20 172.30.1.2 [ 305.652583] [<ffffffff8100fff9>] ? show_registers+0x1e2/0x211
Jun 28 15:29:20 172.30.1.2 [ 305.652586] [<ffffffff813652dd>] ? __die+0x8e/0xc9
Jun 28 15:29:20 172.30.1.2 [ 305.652589] [<ffffffff8102fcd0>] ? no_context+0x1d6/0x20c
Jun 28 15:29:20 172.30.1.2 [ 305.652592] [<ffffffff810f53c3>] ? virt_to_slab+0x9/0x3c
Jun 28 15:29:20 172.30.1.2 [ 305.652595] [<ffffffff81367534>] ? do_page_fault+0x1ad/0x34c
Jun 28 15:29:20 172.30.1.2 [ 305.652601] [<ffffffffa03fcd93>] ? ip_vs_notrack+0x6e/0xa6 [ip_vs]
Jun 28 15:29:20 172.30.1.2 [ 305.652606] [<ffffffffa03fbdec>] ? ip_vs_conn_put+0x29/0x2f [ip_vs]
Jun 28 15:29:20 172.30.1.2 [ 305.652610] [<ffffffffa03fde1a>] ? ip_vs_out+0x33c/0x49d [ip_vs]
Jun 28 15:29:20 172.30.1.2 [ 305.652613] [<ffffffff812a896b>] ? dev_hard_start_xmit+0x3fd/0x571
Jun 28 15:29:20 172.30.1.2 [ 305.652617] [<ffffffff81364ab5>] ? page_fault+0x25/0x30
Jun 28 15:29:20 172.30.1.2 [ 305.652623] [<ffffffffa01d09d0>] ? br_nf_forward_finish+0x48/0xc0 [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652628] [<ffffffffa01d0c91>] ? br_nf_forward_ip+0x214/0x231 [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652631] [<ffffffff812c7de1>] ? nf_iterate+0x41/0x77
Jun 28 15:29:20 172.30.1.2 [ 305.652636] [<ffffffffa01cba5a>] ? br_deliver+0x2d/0x2d [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652641] [<ffffffffa01cba5a>] ? br_deliver+0x2d/0x2d [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652644] [<ffffffff812c7f3a>] ? nf_hook_slow+0x68/0xfd
Jun 28 15:29:20 172.30.1.2 [ 305.652648] [<ffffffffa01cba5a>] ? br_deliver+0x2d/0x2d [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652654] [<ffffffffa01cc476>] ? T.947+0x56/0x56 [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652658] [<ffffffffa01cba5a>] ? br_deliver+0x2d/0x2d [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652663] [<ffffffffa01cb96e>] ? T.963+0x3c/0x56 [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652668] [<ffffffffa01ca753>] ? __br_fdb_get+0x10/0x83 [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652673] [<ffffffffa01cc61d>] ? br_handle_frame_finish+0x1a7/0x211 [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652678] [<ffffffffa01d1598>] ? br_nf_pre_routing_finish+0x222/0x22f [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652684] [<ffffffffa01d03b5>] ? NF_HOOK_THRESH+0x3b/0x55 [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652689] [<ffffffffa01d135b>] ? br_nf_pre_routing+0x4fc/0x517 [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652692] [<ffffffff812ce172>] ? T.1028+0x4f/0x4f
Jun 28 15:29:20 172.30.1.2 [ 305.652695] [<ffffffff812c7de1>] ? nf_iterate+0x41/0x77
Jun 28 15:29:20 172.30.1.2 [ 305.652700] [<ffffffffa01cc476>] ? T.947+0x56/0x56 [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652703] [<ffffffff812c7f3a>] ? nf_hook_slow+0x68/0xfd
Jun 28 15:29:20 172.30.1.2 [ 305.652708] [<ffffffffa01cc476>] ? T.947+0x56/0x56 [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652713] [<ffffffffa01cc476>] ? T.947+0x56/0x56 [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652718] [<ffffffffa01cc45c>] ? T.947+0x3c/0x56 [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652723] [<ffffffffa01cc84a>] ? br_handle_frame+0x1c3/0x1d9 [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652728] [<ffffffffa01cc687>] ? br_handle_frame_finish+0x211/0x211 [bridge]
Jun 28 15:29:20 172.30.1.2 [ 305.652731] [<ffffffff812a74f2>] ? __netif_receive_skb+0x37a/0x490
Jun 28 15:29:20 172.30.1.2 [ 305.652734] [<ffffffff81013a01>] ? read_tsc+0x5/0x16
Jun 28 15:29:20 172.30.1.2 [ 305.652736] [<ffffffff812a799f>] ? netif_receive_skb+0x67/0x6d
Jun 28 15:29:20 172.30.1.2 [ 305.652739] [<ffffffff812a7f0b>] ? napi_gro_receive+0x1f/0x2d
Jun 28 15:29:20 172.30.1.2 [ 305.652742] [<ffffffff812a7a79>] ? napi_skb_finish+0x1c/0x31
Jun 28 15:29:21 172.30.1.2 [ 305.652747] [<ffffffffa0009a21>] ? bnx2_poll_work+0x8db/0x9f4 [bnx2]
Jun 28 15:29:21 172.30.1.2 [ 305.652752] [<ffffffffa00092f4>] ? bnx2_poll_work+0x1ae/0x9f4 [bnx2]
Jun 28 15:29:21 172.30.1.2 [ 305.652757] [<ffffffffa01cc45c>] ? T.947+0x3c/0x56 [bridge]
Jun 28 15:29:21 172.30.1.2 [ 305.652762] [<ffffffffa0009cfc>] ? bnx2_poll+0x116/0x1f2 [bnx2]
Jun 28 15:29:21 172.30.1.2 [ 305.652765] [<ffffffff812a74f2>] ? __netif_receive_skb+0x37a/0x490
Jun 28 15:29:21 172.30.1.2 [ 305.652768] [<ffffffff812a8038>] ? net_rx_action+0xa8/0x207
Jun 28 15:29:21 172.30.1.2 [ 305.652771] [<ffffffff8106637e>] ? hrtimer_get_next_event+0x7f/0x9a
Jun 28 15:29:21 172.30.1.2 [ 305.652774] [<ffffffff8104f11e>] ? __do_softirq+0xc4/0x1a0
Jun 28 15:29:21 172.30.1.2 [ 305.652776] [<ffffffff81097905>] ? handle_irq_event_percpu+0x166/0x184
Jun 28 15:29:21 172.30.1.2 [ 305.652780] [<ffffffff8136bd6c>] ? call_softirq+0x1c/0x30
Jun 28 15:29:21 172.30.1.2 [ 305.652782] [<ffffffff8100fa3f>] ? do_softirq+0x3f/0x79
Jun 28 15:29:21 172.30.1.2 [ 305.652785] [<ffffffff8104eeee>] ? irq_exit+0x44/0xb5
Jun 28 15:29:21 172.30.1.2 [ 305.652787] [<ffffffff8100f38a>] ? do_IRQ+0x94/0xaa
Jun 28 15:29:21 172.30.1.2 [ 305.652790] [<ffffffff813647ee>] ? common_interrupt+0x6e/0x6e
Jun 28 15:29:21 172.30.1.2 [ 305.652792] <EOI> [<ffffffff81364498>] ? _raw_spin_unlock_irqrestore+0xb/0x11
Jun 28 15:29:21 172.30.1.2 [ 305.652797] [<ffffffff81045f07>] ? try_to_wake_up+0x181/0x190
Jun 28 15:29:21 172.30.1.2 [ 305.652799] [<ffffffff81071764>] ? wake_futex+0x2b/0x47
Jun 28 15:29:21 172.30.1.2 [ 305.652802] [<ffffffff81073949>] ? do_futex+0x3de/0x84a
Jun 28 15:29:21 172.30.1.2 [ 305.652804] [<ffffffff810dfff1>] ? do_brk+0x2ca/0x326
Jun 28 15:29:21 172.30.1.2 [ 305.652807] [<ffffffff81073ee4>] ? sys_futex+0x12f/0x147
Jun 28 15:29:21 172.30.1.2 [ 305.652810] [<ffffffff81369b12>] ? system_call_fastpath+0x16/0x1b
Jun 28 15:29:21 172.30.1.2 [ 305.652812] ---[ end trace 33ba304ebe73322b ]---
Jun 28 15:29:21 172.30.1.2 [ 306.782187] 43
Jun 28 15:29:21 172.30.1.2 7d
Jun 28 15:29:21 172.30.1.2 83
Jun 28 15:29:21 172.30.1.2 e0
Jun 28 15:29:21 172.30.1.2 f8
Jun 28 15:29:21 172.30.1.2 83
Jun 28 15:29:21 172.30.1.2 c8
Jun 28 15:29:21 172.30.1.2 03
Jun 28 15:29:21 172.30.1.2 88
Jun 28 15:29:21 172.30.1.2 43
Jun 28 15:29:21 172.30.1.2
Jun 28 15:29:21 172.30.1.2 [ 306.790953] RIP
Jun 28 15:29:21 172.30.1.2 [ 306.805304] RSP <ffff88042fc03960>
Jun 28 15:29:21 172.30.1.2 [ 306.817583] CR2: 0000000000000018
Jun 28 15:29:21 172.30.1.2 [ 306.824706] ---[ end trace 33ba304ebe73322c ]---
Jun 28 15:29:21 172.30.1.2 [ 306.834283] Kernel panic - not syncing: Fatal exception in interrupt
Jun 28 15:29:21 172.30.1.2 [ 306.847312] Pid: 4486, comm: kvm Tainted: G D W 3.2.21 #1
Jun 28 15:29:21 172.30.1.2 [ 306.859837] Call Trace:
Jun 28 15:29:21 172.30.1.2 [ 306.865093] <IRQ>
Jun 28 15:29:21 172.30.1.2 [ 306.876993] [<ffffffff81049da9>] ? kmsg_dump+0xb2/0xdd
Jun 28 15:29:21 172.30.1.2 [ 306.887798] [<ffffffff813653c1>] ? oops_end+0xa9/0xb6
Jun 28 15:29:21 172.30.1.2 [ 306.898438] [<ffffffff8102fcf9>] ? no_context+0x1ff/0x20c
Jun 28 15:29:21 172.30.1.2 [ 306.909769] [<ffffffff810f53c3>] ? virt_to_slab+0x9/0x3c
Jun 28 15:29:21 172.30.1.2 [ 306.920924] [<ffffffff81367534>] ? do_page_fault+0x1ad/0x34c
Jun 28 15:29:21 172.30.1.2 [ 306.932780] [<ffffffffa03fcd93>] ? ip_vs_notrack+0x6e/0xa6 [ip_vs]
Jun 28 15:29:21 172.30.1.2 [ 306.945675] [<ffffffffa03fbdec>] ? ip_vs_conn_put+0x29/0x2f [ip_vs]
Jun 28 15:29:21 172.30.1.2 [ 306.958743] [<ffffffffa03fde1a>] ? ip_vs_out+0x33c/0x49d [ip_vs]
Jun 28 15:29:21 172.30.1.2 [ 306.971339] [<ffffffff812a896b>] ? dev_hard_start_xmit+0x3fd/0x571
Jun 28 15:29:21 172.30.1.2 [ 306.984312] [<ffffffff81364ab5>] ? page_fault+0x25/0x30
Jun 28 15:29:21 172.30.1.2 [ 306.995300] [<ffffffffa01d09d0>] ? br_nf_forward_finish+0x48/0xc0 [bridge]
Jun 28 15:29:21 172.30.1.2 [ 307.009564] [<ffffffffa01d0c91>] ? br_nf_forward_ip+0x214/0x231 [bridge]
Jun 28 15:29:21 172.30.1.2 [ 307.023567] [<ffffffff812c7de1>] ? nf_iterate+0x41/0x77
Jun 28 15:29:21 172.30.1.2 [ 307.034624] [<ffffffffa01cba5a>] ? br_deliver+0x2d/0x2d [bridge]
Jun 28 15:29:21 172.30.1.2 [ 307.047239] [<ffffffffa01cba5a>] ? br_deliver+0x2d/0x2d [bridge]
Jun 28 15:29:21 172.30.1.2 [ 307.059782] [<ffffffff812c7f3a>] ? nf_hook_slow+0x68/0xfd
Jun 28 15:29:21 172.30.1.2 [ 307.071240] [<ffffffffa01cba5a>] ? br_deliver+0x2d/0x2d [bridge]
Jun 28 15:29:21 172.30.1.2 [ 307.083788] [<ffffffffa01cc476>] ? T.947+0x56/0x56 [bridge]
Jun 28 15:29:21 172.30.1.2 [ 307.095464] [<ffffffffa01cba5a>] ? br_deliver+0x2d/0x2d [bridge]
Jun 28 15:29:21 172.30.1.2 [ 307.108227] [<ffffffffa01cb96e>] ? T.963+0x3c/0x56 [bridge]
Jun 28 15:29:21 172.30.1.2 [ 307.119901] [<ffffffffa01ca753>] ? __br_fdb_get+0x10/0x83 [bridge]
Jun 28 15:29:21 172.30.1.2 [ 307.132796] [<ffffffffa01cc61d>] ? br_handle_frame_finish+0x1a7/0x211 [bridge]
Jun 28 15:29:21 172.30.1.2 [ 307.147785] [<ffffffffa01d1598>] ? br_nf_pre_routing_finish+0x222/0x22f [bridge]
Jun 28 15:29:21 172.30.1.2 [ 307.163124] [<ffffffffa01d03b5>] ? NF_HOOK_THRESH+0x3b/0x55 [bridge]
Jun 28 15:29:21 172.30.1.2 [ 307.176369] [<ffffffffa01d135b>] ? br_nf_pre_routing+0x4fc/0x517 [bridge]
Jun 28 15:29:21 172.30.1.2 [ 307.190541] [<ffffffff812ce172>] ? T.1028+0x4f/0x4f
Jun 28 15:29:21 172.30.1.2 [ 307.200832] [<ffffffff812c7de1>] ? nf_iterate+0x41/0x77
Jun 28 15:29:21 172.30.1.2 [ 307.211813] [<ffffffffa01cc476>] ? T.947+0x56/0x56 [bridge]
Jun 28 15:29:21 172.30.1.2 [ 307.223490] [<ffffffff812c7f3a>] ? nf_hook_slow+0x68/0xfd
Jun 28 15:29:21 172.30.1.2 [ 307.234827] [<ffffffffa01cc476>] ? T.947+0x56/0x56 [bridge]
Jun 28 15:29:21 172.30.1.2 [ 307.246623] [<ffffffffa01cc476>] ? T.947+0x56/0x56 [bridge]
Jun 28 15:29:21 172.30.1.2 [ 307.258233] [<ffffffffa01cc45c>] ? T.947+0x3c/0x56 [bridge]
Jun 28 15:29:21 172.30.1.2 [ 307.269846] [<ffffffffa01cc84a>] ? br_handle_frame+0x1c3/0x1d9 [bridge]
Jun 28 15:29:21 172.30.1.2 [ 307.283539] [<ffffffffa01cc687>] ? br_handle_frame_finish+0x211/0x211 [bridge]
Jun 28 15:29:21 172.30.1.2 [ 307.298466] [<ffffffff812a74f2>] ? __netif_receive_skb+0x37a/0x490
Jun 28 15:29:21 172.30.1.2 [ 307.311298] [<ffffffff81013a01>] ? read_tsc+0x5/0x16
Jun 28 15:29:21 172.30.1.2 [ 307.321743] [<ffffffff812a799f>] ? netif_receive_skb+0x67/0x6d
Jun 28 15:29:21 172.30.1.2 [ 307.334023] [<ffffffff812a7f0b>] ? napi_gro_receive+0x1f/0x2d
Jun 28 15:29:21 172.30.1.2 [ 307.346044] [<ffffffff812a7a79>] ? napi_skb_finish+0x1c/0x31
Jun 28 15:29:21 172.30.1.2 [ 307.357884] [<ffffffffa0009a21>] ? bnx2_poll_work+0x8db/0x9f4 [bnx2]
Jun 28 15:29:21 172.30.1.2 [ 307.371057] [<ffffffffa00092f4>] ? bnx2_poll_work+0x1ae/0x9f4 [bnx2]
Jun 28 15:29:21 172.30.1.2 [ 307.384236] [<ffffffffa01cc45c>] ? T.947+0x3c/0x56 [bridge]
Jun 28 15:29:21 172.30.1.2 [ 307.395847] [<ffffffffa0009cfc>] ? bnx2_poll+0x116/0x1f2 [bnx2]
Jun 28 15:29:21 172.30.1.2 [ 307.408147] [<ffffffff812a74f2>] ? __netif_receive_skb+0x37a/0x490
Jun 28 15:29:21 172.30.1.2 [ 307.421034] [<ffffffff812a8038>] ? net_rx_action+0xa8/0x207
Jun 28 15:29:21 172.30.1.2 [ 307.432644] [<ffffffff8106637e>] ? hrtimer_get_next_event+0x7f/0x9a
Jun 28 15:29:21 172.30.1.2 [ 307.445688] [<ffffffff8104f11e>] ? __do_softirq+0xc4/0x1a0
Jun 28 15:29:21 172.30.1.2 [ 307.457118] [<ffffffff81097905>] ? handle_irq_event_percpu+0x166/0x184
Jun 28 15:29:21 172.30.1.2 [ 307.470749] [<ffffffff8136bd6c>] ? call_softirq+0x1c/0x30
Jun 28 15:29:21 172.30.1.2 [ 307.482114] [<ffffffff8100fa3f>] ? do_softirq+0x3f/0x79
Jun 28 15:29:21 172.30.1.2 [ 307.493077] [<ffffffff8104eeee>] ? irq_exit+0x44/0xb5
Jun 28 15:29:21 172.30.1.2 [ 307.503654] [<ffffffff8100f38a>] ? do_IRQ+0x94/0xaa
Jun 28 15:29:21 172.30.1.2 [ 307.513875] [<ffffffff813647ee>] ? common_interrupt+0x6e/0x6e
Jun 28 15:29:21 172.30.1.2 [ 307.525807] <EOI>
Jun 28 15:29:22 172.30.1.2 [ 307.541012] [<ffffffff81045f07>] ? try_to_wake_up+0x181/0x190
Jun 28 15:29:22 172.30.1.2 [ 307.552919] [<ffffffff81071764>] ? wake_futex+0x2b/0x47
Jun 28 15:29:22 172.30.1.2 [ 307.563873] [<ffffffff81073949>] ? do_futex+0x3de/0x84a
Jun 28 15:29:22 172.30.1.2 [ 307.574792] [<ffffffff810dfff1>] ? do_brk+0x2ca/0x326
Jun 28 15:29:22 172.30.1.2 [ 307.585363] [<ffffffff81073ee4>] ? sys_futex+0x12f/0x147
Jun 28 15:29:22 172.30.1.2 [ 307.596418] [<ffffffff81369b12>] ? system_call_fastpath+0x16/0x1b
^ permalink raw reply
* RFC: replace packets already in queue
From: Erdt, Ralph @ 2012-06-28 13:18 UTC (permalink / raw)
To: netdev@vger.kernel.org
(I've send this email already in the lartc mailing list. Short after this I found the list seems dead (http://dir.gmane.org/gmane.linux.network.routing). I hope this is the correct place to ask. If not - please give me a note, where I can ask this.)
----------
Hello.
I'm writing a kernel module (net/sched) which replaces packets in the queue. I'm glad hearing your option.
Background:
In very low bandwidth network (<=9.6Kbps, shared, etc.) its hard (rather: impossible) to get all packets sent.
But some of the packets contain information, which gets obsolete over time. E.g. (GPS) positions, which will be sent periodically. If the application sends a new packet while an old position packet is still in the queue, the old packet is obsolete. This can be dropped. But just dropping the old packet and queuing the new packet will result in never sending a packet of this type.
So I'm writing a tc-qdisc scheduler module, which replaces packets in the queue on enqueuing, when this properties are given:
- UDPv4
- not fragmented
- (TOS & bitmask) = givenCompare; (bitmask and compare are adjustable)
- same source IP
- same destination IP
- same destination port
- same TOS
So, the packet got sent over the time - but with the actual information.
What do you think? Is this module worth to get released to kernel.org? Have you any other comments?
Greetings
Ralph Erdt
^ permalink raw reply
* Re: [PATCH] net: nfc: fix panic in accept()
From: John W. Linville @ 2012-06-28 13:42 UTC (permalink / raw)
To: Samuel Ortiz
Cc: Sasha Levin, Eric Dumazet, Dave Jones, David Miller,
lauro.venancio-430g2QfJUUCGglJvpFV4uA,
aloisio.almeida-430g2QfJUUCGglJvpFV4uA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-wireless
In-Reply-To: <20120628125612.GG4846@sortiz-mobl>
On Thu, Jun 28, 2012 at 02:56:12PM +0200, Samuel Ortiz wrote:
> Hi Sasha,
>
> On Thu, Jun 28, 2012 at 02:11:38PM +0200, Sasha Levin wrote:
> > Hi Samuel,
> >
> > On Mon, Jun 25, 2012 at 7:15 PM, Samuel Ortiz <sameo-VuQAYsv1563Yd54FQh9/CA@public.gmane.org> wrote:
> > > Hi Eric,
> > >
> > > On Mon, Jun 25, 2012 at 05:53:32PM +0200, Eric Dumazet wrote:
> > >> From: Eric Dumazet <edumazet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
> > >>
> > >> Sasha Levin reported following panic :
> > > I applied a similar patch, more consistent with the rest of the NFC socket
> > > code, still with you as the author. See here:
> > >
> > > http://git.kernel.org/?p=linux/kernel/git/sameo/nfc-3.0.git;a=commit;h=631c301f20558525a641fadffc0126affd3dc4a4
> >
> > Could this tree be included in -next please?
> No, wireless-next is already included in -next. The above patch is making its
> way upstream, it's in the wireless.git tree and should hit davem's net tree
> soon.
FWIW, lots (or most?) of the bug fix trees get pulled into -next
as well. Having the nfc tree go there makes sense to me.
John
--
John W. Linville Someday the world will need a hero, and you
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org might be all we have. Be ready.
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* [RFC PATCH net-next] ipvs: add missing lock in ip_vs_ftp_init_conn()
From: Xiaotian Feng @ 2012-06-28 13:36 UTC (permalink / raw)
To: netdev, lvs-devel, netfilter-devel, netfilter, coreteam
Cc: linux-kernel, Xiaotian Feng, Xiaotian Feng, Wensong Zhang,
Simon Horman, Julian Anastasov, Pablo Neira Ayuso,
Patrick McHardy, David S. Miller
We met a kernel panic in 2.6.32.43 kernel:
[2680191.848044] IPVS: ip_vs_conn_hash(): request for already hashed, called from run_timer_softirq+0x175/0x1d0
<snip>
[2680311.849009] general protection fault: 0000 [#1] SMP
[2680311.853001] RIP: 0010:[<ffffffff815f155c>] [<ffffffff815f155c>] ip_vs_conn_expire+0xdc/0x2f0
[2680311.853001] RSP: 0018:ffff880028303e70 EFLAGS: 00010202
[2680311.853001] RAX: dead000000200200 RBX: ffff8801aad00b80 RCX: 0000000000001d90
[2680311.853001] RDX: dead000000100100 RSI: 000000004fd59800 RDI: ffff8801aad00c08
<snip>
[2680311.853001] Call Trace:
[2680311.853001] <IRQ>
[2680311.853001] [<ffffffff815f1480>] ? ip_vs_conn_expire+0x0/0x2f0
[2680311.853001] [<ffffffff8104e2a5>] run_timer_softirq+0x175/0x1d0
[2680311.853001] [<ffffffff81021a48>] ? lapic_next_event+0x18/0x20
[2680311.853001] [<ffffffff81049a13>] __do_softirq+0xb3/0x150
[2680311.853001] [<ffffffff8100cc5c>] call_softirq+0x1c/0x30
[2680311.853001] [<ffffffff8100ea9a>] do_softirq+0x4a/0x80
[2680311.853001] [<ffffffff81049957>] irq_exit+0x77/0x80
[2680311.853001] [<ffffffff81021f2c>] smp_apic_timer_interrupt+0x6c/0xa0
[2680311.853001] [<ffffffff8100c633>] apic_timer_interrupt+0x13/0x20
[2680311.853001] <EOI>
[2680311.853001] [<ffffffff81013b52>] ? mwait_idle+0x52/0x70
[2680311.853001] [<ffffffff8100a7b0>] ? enter_idle+0x20/0x30
[2680311.853001] [<ffffffff8100ac62>] ? cpu_idle+0x52/0x80
[2680311.853001] [<ffffffff816d504d>] ? start_secondary+0x19d/0x280
rax and rdx is LIST_POISON1 and LIST_POISON2, so kernel is list_del() on an already deleted
connection and result the general protect fault.
The "request for already hashed" warning, told us someone might change the connection flags
incorrectly, like described in commit aea9d711, it changes the connection flags, but doesn't
put the connection back to the list. So ip_vs_conn_hash() throw a warning and return.
Later, when ip_vs_conn_expire fire again, ip_vs_conn_unhash() will find the HASHED connection
and list_del() it, then kernel panic happened.
After code review, the only chance that kernel change connection flag without protection is
in ip_vs_ftp_init_conn().
Signed-off-by: Xiaotian Feng <dannyfeng@tencent.com>
Cc: Wensong Zhang <wensong@linux-vs.org>
Cc: Simon Horman <horms@verge.net.au>
Cc: Julian Anastasov <ja@ssi.bg>
Cc: Pablo Neira Ayuso <pablo@netfilter.org>
Cc: Patrick McHardy <kaber@trash.net>
Cc: "David S. Miller" <davem@davemloft.net>
---
net/netfilter/ipvs/ip_vs_ftp.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/net/netfilter/ipvs/ip_vs_ftp.c b/net/netfilter/ipvs/ip_vs_ftp.c
index b20b29c..c2bc264 100644
--- a/net/netfilter/ipvs/ip_vs_ftp.c
+++ b/net/netfilter/ipvs/ip_vs_ftp.c
@@ -65,8 +65,10 @@ static int ip_vs_ftp_pasv;
static int
ip_vs_ftp_init_conn(struct ip_vs_app *app, struct ip_vs_conn *cp)
{
+ spin_lock(&cp->lock);
/* We use connection tracking for the command connection */
cp->flags |= IP_VS_CONN_F_NFCT;
+ spin_unlock(&cp->lock);
return 0;
}
--
1.7.1
^ permalink raw reply related
* Re: [PATCH net-next] em_canid: Ematch rule to match CAN frames according to their CAN IDs
From: Rostislav Lisovy @ 2012-06-28 13:35 UTC (permalink / raw)
To: Oliver Hartkopp; +Cc: Eric Dumazet, netdev, linux-can, lartc, pisa, sojkam1
In-Reply-To: <4FEA169C.1070709@hartkopp.net>
Hello Oliver;
On Tue, 2012-06-26 at 22:07 +0200, Oliver Hartkopp wrote:
> I found some time for a review. See details inline ...
>
I agree with quite everything except for following...
> > + match = true;
>
>
> match = 1;
>
egrep -r "= true;" ./linux-source | wc -l
returns 6770 -- why don't you like "= true"?
> > + break;
> > + }
> > + }
> > + } else { /* SFF */
> > + can_id &= CAN_SFF_MASK;
> > + match = test_bit(can_id, cm->match_sff);
> > + }
> > +
>
>
> return match;
>
match() function must return 1 or 0, however (from my experience)
test_bit() returns 0 and non-0 (strictly speaking, in my case, 0 and
-1).
> > + &conf[i],
> > + sizeof(struct can_filter));
> > +
> > + cm->eff_rules_count++;
> > + } else {
> > + continue;
> > + }
>
>
> omit { } around continue
>
http://lxr.linux.no/#linux+v3.4.4/Documentation/CodingStyle#L169
> > + }
> > +
> > + /* Process SFF frame rules */
> > + for (i = 0; i < cm->rules_count; i++) {
> > + if ((conf[i].can_id & CAN_EFF_FLAG) &&
> > + (conf[i].can_mask & CAN_EFF_FLAG)) {
>
>
> What if CAN_EFF_FLAG is set in can_id but not in can_mask ?
>
There were small misunderstanding from my side -- this will be rewritten
in the way that EFF_FLAG in mask will determine if we care about the
value of EFF_FLAG in an identifier -- i.e. when EFF_FLAG is set in the
mask, the rule will be added as SFF or EFF only depending on EFF_FLAG
value in the identifier. If EFF_FLAG is 0 in the mask, the rule will be
added as both SFF and EFF.
Regards;
Rostislav
^ permalink raw reply
* ipsec and snat: mtu question
From: Marco Berizzi @ 2012-06-28 13:08 UTC (permalink / raw)
To: netdev
Hello everybody.
Kindly, I would like to ask for explanations
about a linux ipsec gateway snatting packets.
Here is the network schema.
customer private network 10.16.0.0/16
|
|
+ipsec customer gateway (checkpoint)
||
||---ipsec tunnel 10.16.0.0/16<->172.16.128.0/28 (des3/md5)
|| mtu=1446
||
++ linux_gw_snat ipsec gateway (SNAT all packets from 172.22.1.0/24 to 172.16.128.1)
||
||---ipsec tunnel 10.16.0.0/16<->172.22.1.0/24 (aes/sha1/ipcomp)
|| mtu=1430
||
+linux_final ipsec gateway
|
|
client 172.22.1.50
SYN packet start behind the linux_final (172.22.1.50)
for 10.16.237.66 customer network. MSS is 1460 byte.
DF flag is set on outgoing packets.
Packet travel inside the ipsec tunnel: tunnel mtu is
1430
At the linux_gw_snat, the packet get decryped, snatted
(ip src change from 172.22.1.50 to 172.16.128.1) and
encryped again.
Packets are delivered to the checkpoint: tunnel mtu is
1446
Checkpoint deliver the decryped packet to 10.16.237.66
So far, so good.
At some point, 10.16.237.66 will send a 1500 byte
packet for 172.16.128.1: checkpoint will reply with
an icmp packet too large need to frag: mtu is 1446
10.16.237.66 will send back a 1446 byte packet to
the checkpoint which will encrypt and deliver to the
linux_gw_snat which will decrypt and deSNAT. Now
linux_gw_snat must send this 1446 byte packet to
172.22.1.50 but mtu is only 1430: packet will be
dropped (DF is set).
Now, IMHO, linux_gw_snat should send an imcp message
to 10.16.237.66 telling that max mtu is 1430, but I
don't see any icmp packet.
Is this the expected behaviour?
TIA
PS: linux_gw_snat is 3.3.5
^ permalink raw reply
* Re: [PATCH] net: nfc: fix panic in accept()
From: Samuel Ortiz @ 2012-06-28 12:56 UTC (permalink / raw)
To: Sasha Levin
Cc: Eric Dumazet, Dave Jones, David Miller, lauro.venancio,
aloisio.almeida, linux-kernel@vger.kernel.org,
netdev@vger.kernel.org, linux-wireless
In-Reply-To: <CA+1xoqfy21wOh2myV0D6iBDqoZ3YmkwNZwKBVXLU75zePOGi4w@mail.gmail.com>
Hi Sasha,
On Thu, Jun 28, 2012 at 02:11:38PM +0200, Sasha Levin wrote:
> Hi Samuel,
>
> On Mon, Jun 25, 2012 at 7:15 PM, Samuel Ortiz <sameo@linux.intel.com> wrote:
> > Hi Eric,
> >
> > On Mon, Jun 25, 2012 at 05:53:32PM +0200, Eric Dumazet wrote:
> >> From: Eric Dumazet <edumazet@google.com>
> >>
> >> Sasha Levin reported following panic :
> > I applied a similar patch, more consistent with the rest of the NFC socket
> > code, still with you as the author. See here:
> >
> > http://git.kernel.org/?p=linux/kernel/git/sameo/nfc-3.0.git;a=commit;h=631c301f20558525a641fadffc0126affd3dc4a4
>
> Could this tree be included in -next please?
No, wireless-next is already included in -next. The above patch is making its
way upstream, it's in the wireless.git tree and should hit davem's net tree
soon.
Cheers,
Samuel.
--
Intel Open Source Technology Centre
http://oss.intel.com/
^ permalink raw reply
* Re: [PATCH 10/12] nfs: enable swap on NFS
From: Jeff Layton @ 2012-06-28 12:49 UTC (permalink / raw)
To: Mel Gorman
Cc: Andrew Morton, Linux-MM, Linux-Netdev, Linux-NFS, LKML,
David Miller, Trond Myklebust, Neil Brown, Christoph Hellwig,
Peter Zijlstra, Mike Christie, Eric B Munson
In-Reply-To: <20120628123734.GH8271@suse.de>
On Thu, 28 Jun 2012 13:37:34 +0100
Mel Gorman <mgorman@suse.de> wrote:
> On Thu, Jun 28, 2012 at 08:27:25AM -0400, Jeff Layton wrote:
> > > <SNIP>
> > > @@ -2108,11 +2156,15 @@ static void xs_tcp_setup_socket(struct work_struct *work)
> > > container_of(work, struct sock_xprt, connect_worker.work);
> > > struct socket *sock = transport->sock;
> > > struct rpc_xprt *xprt = &transport->xprt;
> > > + unsigned long pflags = current->flags;
> > > int status = -EIO;
> > >
> > > if (xprt->shutdown)
> > > goto out;
> > >
> > > + if (xprt->swapper)
> > > + current->flags |= PF_MEMALLOC;
> > > +
> > > if (!sock) {
> > > clear_bit(XPRT_CONNECTION_ABORT, &xprt->state);
> > > sock = xs_create_sock(xprt, transport,
> > > @@ -2174,6 +2226,7 @@ out_eagain:
> > > out:
> > > xprt_clear_connecting(xprt);
> > > xprt_wake_pending_tasks(xprt, status);
> > > + tsk_restore_flags(current, pflags, PF_MEMALLOC);
> > > }
> > >
> > > /**
> >
> > Apologies if this is fixed in another patch and I didn't see it...
> >
>
> No apologies necessary. Even if it was fixed in another patch, it would
> still be wrong for bisection reasons and for being rude to reviewers.
>
> > There's a place in the above function that returns without going
> > through "out:". I think you also want to tsk_restore_flags() in that
> > spot too.
> >
>
> You're right. The case that it would trigger would be some corner case
> but very nicely spotted.
>
> diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
> index b84df34..3d58b92 100644
> --- a/net/sunrpc/xprtsock.c
> +++ b/net/sunrpc/xprtsock.c
> @@ -2214,6 +2214,7 @@ static void xs_tcp_setup_socket(struct work_struct *work)
> case -EINPROGRESS:
> case -EALREADY:
> xprt_clear_connecting(xprt);
> + tsk_restore_flags(current, pflags, PF_MEMALLOC);
> return;
> case -EINVAL:
> /* Happens, for instance, if the user specified a link
That looks correct.
Actually it's not obvious in this function, but it turns out that this
is the common case. xs_tcp_finish_connecting calls kernel_connect with
O_NONBLOCK set, and that almost always immediately returns with
-EINPROGRESS.
Cheers,
--
Jeff Layton <jlayton@redhat.com>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply
* Re: [PATCH 10/12] nfs: enable swap on NFS
From: Mel Gorman @ 2012-06-28 12:37 UTC (permalink / raw)
To: Jeff Layton
Cc: Andrew Morton, Linux-MM, Linux-Netdev, Linux-NFS, LKML,
David Miller, Trond Myklebust, Neil Brown, Christoph Hellwig,
Peter Zijlstra, Mike Christie, Eric B Munson
In-Reply-To: <20120628082725.33b71097@corrin.poochiereds.net>
On Thu, Jun 28, 2012 at 08:27:25AM -0400, Jeff Layton wrote:
> > <SNIP>
> > @@ -2108,11 +2156,15 @@ static void xs_tcp_setup_socket(struct work_struct *work)
> > container_of(work, struct sock_xprt, connect_worker.work);
> > struct socket *sock = transport->sock;
> > struct rpc_xprt *xprt = &transport->xprt;
> > + unsigned long pflags = current->flags;
> > int status = -EIO;
> >
> > if (xprt->shutdown)
> > goto out;
> >
> > + if (xprt->swapper)
> > + current->flags |= PF_MEMALLOC;
> > +
> > if (!sock) {
> > clear_bit(XPRT_CONNECTION_ABORT, &xprt->state);
> > sock = xs_create_sock(xprt, transport,
> > @@ -2174,6 +2226,7 @@ out_eagain:
> > out:
> > xprt_clear_connecting(xprt);
> > xprt_wake_pending_tasks(xprt, status);
> > + tsk_restore_flags(current, pflags, PF_MEMALLOC);
> > }
> >
> > /**
>
> Apologies if this is fixed in another patch and I didn't see it...
>
No apologies necessary. Even if it was fixed in another patch, it would
still be wrong for bisection reasons and for being rude to reviewers.
> There's a place in the above function that returns without going
> through "out:". I think you also want to tsk_restore_flags() in that
> spot too.
>
You're right. The case that it would trigger would be some corner case
but very nicely spotted.
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index b84df34..3d58b92 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -2214,6 +2214,7 @@ static void xs_tcp_setup_socket(struct work_struct *work)
case -EINPROGRESS:
case -EALREADY:
xprt_clear_connecting(xprt);
+ tsk_restore_flags(current, pflags, PF_MEMALLOC);
return;
case -EINVAL:
/* Happens, for instance, if the user specified a link
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply related
* Re: [PATCH 10/12] nfs: enable swap on NFS
From: Jeff Layton @ 2012-06-28 12:27 UTC (permalink / raw)
To: Mel Gorman
Cc: Andrew Morton, Linux-MM, Linux-Netdev, Linux-NFS, LKML,
David Miller, Trond Myklebust, Neil Brown, Christoph Hellwig,
Peter Zijlstra, Mike Christie, Eric B Munson
In-Reply-To: <1340375468-22509-11-git-send-email-mgorman@suse.de>
On Fri, 22 Jun 2012 15:31:06 +0100
Mel Gorman <mgorman@suse.de> wrote:
> Implement the new swapfile a_ops for NFS and hook up ->direct_IO. This
> will set the NFS socket to SOCK_MEMALLOC and run socket reconnect
> under PF_MEMALLOC as well as reset SOCK_MEMALLOC before engaging the
> protocol ->connect() method.
>
> PF_MEMALLOC should allow the allocation of struct socket and related
> objects and the early (re)setting of SOCK_MEMALLOC should allow us
> to receive the packets required for the TCP connection buildup.
>
> [dfeng@redhat.com: Fix handling of multiple swap files]
> [a.p.zijlstra@chello.nl: Original patch]
> Signed-off-by: Mel Gorman <mgorman@suse.de>
> Acked-by: Rik van Riel <riel@redhat.com>
> ---
> fs/nfs/Kconfig | 8 +++++
> fs/nfs/direct.c | 82 ++++++++++++++++++++++++++++---------------
> fs/nfs/file.c | 22 ++++++++++--
> include/linux/nfs_fs.h | 4 +--
> include/linux/sunrpc/xprt.h | 3 ++
> net/sunrpc/Kconfig | 5 +++
> net/sunrpc/clnt.c | 2 ++
> net/sunrpc/sched.c | 7 ++--
> net/sunrpc/xprtsock.c | 53 ++++++++++++++++++++++++++++
> 9 files changed, 152 insertions(+), 34 deletions(-)
>
[...snip...]
> @@ -2108,11 +2156,15 @@ static void xs_tcp_setup_socket(struct work_struct *work)
> container_of(work, struct sock_xprt, connect_worker.work);
> struct socket *sock = transport->sock;
> struct rpc_xprt *xprt = &transport->xprt;
> + unsigned long pflags = current->flags;
> int status = -EIO;
>
> if (xprt->shutdown)
> goto out;
>
> + if (xprt->swapper)
> + current->flags |= PF_MEMALLOC;
> +
> if (!sock) {
> clear_bit(XPRT_CONNECTION_ABORT, &xprt->state);
> sock = xs_create_sock(xprt, transport,
> @@ -2174,6 +2226,7 @@ out_eagain:
> out:
> xprt_clear_connecting(xprt);
> xprt_wake_pending_tasks(xprt, status);
> + tsk_restore_flags(current, pflags, PF_MEMALLOC);
> }
>
> /**
Apologies if this is fixed in another patch and I didn't see it...
There's a place in the above function that returns without going
through "out:". I think you also want to tsk_restore_flags() in that
spot too.
--
Jeff Layton <jlayton@redhat.com>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply
* Re: [PATCH] net: nfc: fix panic in accept()
From: Sasha Levin @ 2012-06-28 12:11 UTC (permalink / raw)
To: Samuel Ortiz
Cc: Eric Dumazet, Dave Jones, David Miller, lauro.venancio,
aloisio.almeida, linux-kernel@vger.kernel.org,
netdev@vger.kernel.org, linux-wireless
In-Reply-To: <20120625171532.GB16275@sortiz-mobl>
Hi Samuel,
On Mon, Jun 25, 2012 at 7:15 PM, Samuel Ortiz <sameo@linux.intel.com> wrote:
> Hi Eric,
>
> On Mon, Jun 25, 2012 at 05:53:32PM +0200, Eric Dumazet wrote:
>> From: Eric Dumazet <edumazet@google.com>
>>
>> Sasha Levin reported following panic :
> I applied a similar patch, more consistent with the rest of the NFC socket
> code, still with you as the author. See here:
>
> http://git.kernel.org/?p=linux/kernel/git/sameo/nfc-3.0.git;a=commit;h=631c301f20558525a641fadffc0126affd3dc4a4
Could this tree be included in -next please?
^ permalink raw reply
* Re: LOCKDEP complaints in l2tp_xmit_skb()
From: Eric Dumazet @ 2012-06-28 11:22 UTC (permalink / raw)
To: Tom Parkin; +Cc: David Miller, netdev
In-Reply-To: <1340873862.13187.5.camel@edumazet-glaptop>
On Thu, 2012-06-28 at 10:57 +0200, Eric Dumazet wrote:
> On Thu, 2012-06-28 at 08:56 +0200, Eric Dumazet wrote:
>
> > [PATCH] net: Qdisc busylock gets its own lockdep class
> >
> > Tom Parkin reported following LOCKDEP splat :
> ..
> >
> > Instruct lockdep that each Qdisc busylock is independant, or else
> > bonding or various tunnels can trigger a splat.
> >
> > Reported-by: Tom Parkin <tparkin@katalix.com>
> > Signed-off-by: Eric Dumazet <edumazet@google.com>
> > ---
>
> I reproduced the bug using a bond0 device, adding a qdisc on it,
> (one Qdisc on bond0, and a Qdisc on the slave too)
>
> Problem with this patch is I have following message :
>
> BUG: key ffff88..... not in .data!
>
> No more LOCKDEP splat, but patch not good as is.
I tested the alternative following patch with my bonding setup,
could you test it with l2tp ?
net/core/dev.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/net/core/dev.c b/net/core/dev.c
index 6df2140..d265c67 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2412,13 +2412,13 @@ static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q,
qdisc_bstats_update(q, skb);
- if (sch_direct_xmit(skb, q, dev, txq, root_lock)) {
- if (unlikely(contended)) {
- spin_unlock(&q->busylock);
- contended = false;
- }
+ if (unlikely(contended)) {
+ spin_unlock(&q->busylock);
+ contended = false;
+ }
+ if (sch_direct_xmit(skb, q, dev, txq, root_lock))
__qdisc_run(q);
- } else
+ else
qdisc_run_end(q);
rc = NET_XMIT_SUCCESS;
^ permalink raw reply related
* Re: pull request: batman-adv 2012-06-28
From: David Miller @ 2012-06-28 11:11 UTC (permalink / raw)
To: ordex; +Cc: netdev, b.a.t.m.a.n
In-Reply-To: <1340876067-28333-1-git-send-email-ordex@autistici.org>
From: Antonio Quartulli <ordex@autistici.org>
Date: Thu, 28 Jun 2012 11:34:09 +0200
> this is another set of patches I'd like to see included in net-next/linux-3.6.
> Here you have some more patches aimed to clean our namespace, a minor cleanup
> for the vis code that eliminates a useless intermediate buffer used to
> provide the output and two other minor cleanups for the TranslationTable code.
Pulled, thanks.
^ permalink raw reply
* [PATCH] ipv4: Kill rt->rt_spec_dst, no longer used.
From: David Miller @ 2012-06-28 11:08 UTC (permalink / raw)
To: netdev
Signed-off-by: David S. Miller <davem@davemloft.net>
---
include/net/ip_fib.h | 2 +-
include/net/route.h | 1 -
net/ipv4/fib_frontend.c | 9 ++-------
net/ipv4/route.c | 38 +++++++++-----------------------------
net/ipv4/xfrm4_policy.c | 1 -
5 files changed, 12 insertions(+), 39 deletions(-)
diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h
index 1687b3d..9e6c26d 100644
--- a/include/net/ip_fib.h
+++ b/include/net/ip_fib.h
@@ -233,7 +233,7 @@ extern void ip_fib_init(void);
extern __be32 fib_compute_spec_dst(struct sk_buff *skb);
extern int fib_validate_source(struct sk_buff *skb, __be32 src, __be32 dst,
u8 tos, int oif, struct net_device *dev,
- __be32 *spec_dst, u32 *itag);
+ u32 *itag);
extern void fib_select_default(struct fib_result *res);
/* Exported by fib_semantics.c */
diff --git a/include/net/route.h b/include/net/route.h
index 47eb25a..211e266 100644
--- a/include/net/route.h
+++ b/include/net/route.h
@@ -65,7 +65,6 @@ struct rtable {
__be32 rt_gateway;
/* Miscellaneous cached information */
- __be32 rt_spec_dst; /* RFC1122 specific destination */
u32 rt_peer_genid;
unsigned long _peer; /* long-living peer info */
struct fib_info *fi; /* for client ref to shared metrics */
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
index 451939b..63b11ca 100644
--- a/net/ipv4/fib_frontend.c
+++ b/net/ipv4/fib_frontend.c
@@ -218,8 +218,7 @@ __be32 fib_compute_spec_dst(struct sk_buff *skb)
* called with rcu_read_lock()
*/
int fib_validate_source(struct sk_buff *skb, __be32 src, __be32 dst, u8 tos,
- int oif, struct net_device *dev, __be32 *spec_dst,
- u32 *itag)
+ int oif, struct net_device *dev, u32 *itag)
{
struct in_device *in_dev;
struct flowi4 fl4;
@@ -258,7 +257,6 @@ int fib_validate_source(struct sk_buff *skb, __be32 src, __be32 dst, u8 tos,
if (res.type != RTN_LOCAL || !accept_local)
goto e_inval;
}
- *spec_dst = FIB_RES_PREFSRC(net, res);
fib_combine_itag(itag, &res);
dev_match = false;
@@ -287,17 +285,14 @@ int fib_validate_source(struct sk_buff *skb, __be32 src, __be32 dst, u8 tos,
ret = 0;
if (fib_lookup(net, &fl4, &res) == 0) {
- if (res.type == RTN_UNICAST) {
- *spec_dst = FIB_RES_PREFSRC(net, res);
+ if (res.type == RTN_UNICAST)
ret = FIB_RES_NH(res).nh_scope >= RT_SCOPE_HOST;
- }
}
return ret;
last_resort:
if (rpf)
goto e_rpf;
- *spec_dst = inet_select_addr(dev, 0, RT_SCOPE_UNIVERSE);
*itag = 0;
return 0;
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index 81533e3..83d56a0 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -440,7 +440,7 @@ static int rt_cache_seq_show(struct seq_file *seq, void *v)
r->rt_key_tos,
-1,
HHUptod,
- r->rt_spec_dst, &len);
+ 0, &len);
seq_printf(seq, "%*s\n", 127 - len, "");
}
@@ -1978,7 +1978,6 @@ static int ip_route_input_mc(struct sk_buff *skb, __be32 daddr, __be32 saddr,
{
unsigned int hash;
struct rtable *rth;
- __be32 spec_dst;
struct in_device *in_dev = __in_dev_get_rcu(dev);
u32 itag = 0;
int err;
@@ -1999,10 +1998,8 @@ static int ip_route_input_mc(struct sk_buff *skb, __be32 daddr, __be32 saddr,
if (ipv4_is_zeronet(saddr)) {
if (!ipv4_is_local_multicast(daddr))
goto e_inval;
- spec_dst = inet_select_addr(dev, 0, RT_SCOPE_LINK);
} else {
- err = fib_validate_source(skb, saddr, 0, tos, 0, dev, &spec_dst,
- &itag);
+ err = fib_validate_source(skb, saddr, 0, tos, 0, dev, &itag);
if (err < 0)
goto e_err;
}
@@ -2029,7 +2026,6 @@ static int ip_route_input_mc(struct sk_buff *skb, __be32 daddr, __be32 saddr,
rth->rt_oif = 0;
rth->rt_mark = skb->mark;
rth->rt_gateway = daddr;
- rth->rt_spec_dst= spec_dst;
rth->rt_peer_genid = 0;
rt_init_peer(rth, dev_net(dev)->ipv4.peers);
rth->fi = NULL;
@@ -2093,7 +2089,6 @@ static int __mkroute_input(struct sk_buff *skb,
int err;
struct in_device *out_dev;
unsigned int flags = 0;
- __be32 spec_dst;
u32 itag;
/* get a working reference to the output device */
@@ -2105,7 +2100,7 @@ static int __mkroute_input(struct sk_buff *skb,
err = fib_validate_source(skb, saddr, daddr, tos, FIB_RES_OIF(*res),
- in_dev->dev, &spec_dst, &itag);
+ in_dev->dev, &itag);
if (err < 0) {
ip_handle_martian_source(in_dev->dev, in_dev, skb, daddr,
saddr);
@@ -2157,7 +2152,6 @@ static int __mkroute_input(struct sk_buff *skb,
rth->rt_oif = 0;
rth->rt_mark = skb->mark;
rth->rt_gateway = daddr;
- rth->rt_spec_dst= spec_dst;
rth->rt_peer_genid = 0;
rt_init_peer(rth, &res->table->tb_peers);
rth->fi = NULL;
@@ -2223,7 +2217,6 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr,
u32 itag = 0;
struct rtable *rth;
unsigned int hash;
- __be32 spec_dst;
int err = -EINVAL;
struct net *net = dev_net(dev);
@@ -2281,12 +2274,11 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr,
if (res.type == RTN_LOCAL) {
err = fib_validate_source(skb, saddr, daddr, tos,
net->loopback_dev->ifindex,
- dev, &spec_dst, &itag);
+ dev, &itag);
if (err < 0)
goto martian_source_keep_err;
if (err)
flags |= RTCF_DIRECTSRC;
- spec_dst = daddr;
goto local_input;
}
@@ -2302,11 +2294,8 @@ brd_input:
if (skb->protocol != htons(ETH_P_IP))
goto e_inval;
- if (ipv4_is_zeronet(saddr))
- spec_dst = inet_select_addr(dev, 0, RT_SCOPE_LINK);
- else {
- err = fib_validate_source(skb, saddr, 0, tos, 0, dev, &spec_dst,
- &itag);
+ if (!ipv4_is_zeronet(saddr)) {
+ err = fib_validate_source(skb, saddr, 0, tos, 0, dev, &itag);
if (err < 0)
goto martian_source_keep_err;
if (err)
@@ -2344,7 +2333,6 @@ local_input:
rth->rt_oif = 0;
rth->rt_mark = skb->mark;
rth->rt_gateway = daddr;
- rth->rt_spec_dst= spec_dst;
rth->rt_peer_genid = 0;
rt_init_peer(rth, net->ipv4.peers);
rth->fi = NULL;
@@ -2362,7 +2350,6 @@ local_input:
no_route:
RT_CACHE_STAT_INC(in_no_route);
- spec_dst = inet_select_addr(dev, 0, RT_SCOPE_UNIVERSE);
res.type = RTN_UNREACHABLE;
if (err == -ESRCH)
err = -ENETUNREACH;
@@ -2545,7 +2532,6 @@ static struct rtable *__mkroute_output(const struct fib_result *res,
rth->rt_oif = orig_oif;
rth->rt_mark = fl4->flowi4_mark;
rth->rt_gateway = fl4->daddr;
- rth->rt_spec_dst= fl4->saddr;
rth->rt_peer_genid = 0;
rt_init_peer(rth, (res->table ?
&res->table->tb_peers :
@@ -2554,12 +2540,9 @@ static struct rtable *__mkroute_output(const struct fib_result *res,
RT_CACHE_STAT_INC(out_slow_tot);
- if (flags & RTCF_LOCAL) {
+ if (flags & RTCF_LOCAL)
rth->dst.input = ip_local_deliver;
- rth->rt_spec_dst = fl4->daddr;
- }
if (flags & (RTCF_BROADCAST | RTCF_MULTICAST)) {
- rth->rt_spec_dst = fl4->saddr;
if (flags & RTCF_LOCAL &&
!(dev_out->flags & IFF_LOOPBACK)) {
rth->dst.output = ip_mc_output;
@@ -2890,7 +2873,6 @@ struct dst_entry *ipv4_blackhole_route(struct net *net, struct dst_entry *dst_or
rt->rt_dst = ort->rt_dst;
rt->rt_src = ort->rt_src;
rt->rt_gateway = ort->rt_gateway;
- rt->rt_spec_dst = ort->rt_spec_dst;
rt_transfer_peer(rt, ort);
rt->fi = ort->fi;
if (rt->fi)
@@ -2965,10 +2947,8 @@ static int rt_fill_info(struct net *net,
nla_put_u32(skb, RTA_FLOW, rt->dst.tclassid))
goto nla_put_failure;
#endif
- if (rt_is_input_route(rt)) {
- if (nla_put_be32(skb, RTA_PREFSRC, rt->rt_spec_dst))
- goto nla_put_failure;
- } else if (rt->rt_src != rt->rt_key_src) {
+ if (!rt_is_input_route(rt) &&
+ rt->rt_src != rt->rt_key_src) {
if (nla_put_be32(skb, RTA_PREFSRC, rt->rt_src))
goto nla_put_failure;
}
diff --git a/net/ipv4/xfrm4_policy.c b/net/ipv4/xfrm4_policy.c
index 8855d82..9815ea0 100644
--- a/net/ipv4/xfrm4_policy.c
+++ b/net/ipv4/xfrm4_policy.c
@@ -100,7 +100,6 @@ static int xfrm4_fill_dst(struct xfrm_dst *xdst, struct net_device *dev,
xdst->u.rt.rt_src = rt->rt_src;
xdst->u.rt.rt_dst = rt->rt_dst;
xdst->u.rt.rt_gateway = rt->rt_gateway;
- xdst->u.rt.rt_spec_dst = rt->rt_spec_dst;
return 0;
}
--
1.7.10.2
^ permalink raw reply related
* [PATCH] ipv4: Create and use fib_compute_spec_dst() helper.
From: David Miller @ 2012-06-28 10:59 UTC (permalink / raw)
To: netdev
The specific destination is the host we direct unicast replies to.
Usually this is the original packet source address, but if we are
responding to a multicast or broadcast packet we have to use something
different.
Specifically we must use the source address we would use if we were to
send a packet to the unicast source of the original packet.
The routing cache precomputes this value, but we want to remove that
precomputation because it creates a hard dependency on the expensive
rpfilter source address validation which we'd like to make cheaper.
There are only three places where this matters:
1) ICMP replies.
2) pktinfo CMSG
3) IP options
Now there will be no real users of rt->rt_spec_dst and we can simply
remove it altogether.
Signed-off-by: David S. Miller <davem@davemloft.net>
---
include/net/ip_fib.h | 1 +
net/ipv4/fib_frontend.c | 29 +++++++++++++++++++++++++++++
net/ipv4/icmp.c | 6 ++++--
net/ipv4/ip_options.c | 22 +++++++++++-----------
net/ipv4/ip_sockglue.c | 7 ++++---
5 files changed, 49 insertions(+), 16 deletions(-)
diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h
index 4b347c0..1687b3d 100644
--- a/include/net/ip_fib.h
+++ b/include/net/ip_fib.h
@@ -230,6 +230,7 @@ extern struct fib_table *fib_get_table(struct net *net, u32 id);
/* Exported by fib_frontend.c */
extern const struct nla_policy rtm_ipv4_policy[];
extern void ip_fib_init(void);
+extern __be32 fib_compute_spec_dst(struct sk_buff *skb);
extern int fib_validate_source(struct sk_buff *skb, __be32 src, __be32 dst,
u8 tos, int oif, struct net_device *dev,
__be32 *spec_dst, u32 *itag);
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
index 3854411..451939b 100644
--- a/net/ipv4/fib_frontend.c
+++ b/net/ipv4/fib_frontend.c
@@ -180,6 +180,35 @@ unsigned int inet_dev_addr_type(struct net *net, const struct net_device *dev,
}
EXPORT_SYMBOL(inet_dev_addr_type);
+__be32 fib_compute_spec_dst(struct sk_buff *skb)
+{
+ struct net_device *dev = skb->dev;
+ struct in_device *in_dev;
+ struct fib_result res;
+ struct flowi4 fl4;
+ struct net *net;
+
+ if (skb->pkt_type != PACKET_BROADCAST &&
+ skb->pkt_type != PACKET_MULTICAST)
+ return ip_hdr(skb)->daddr;
+
+ in_dev = __in_dev_get_rcu(dev);
+ BUG_ON(!in_dev);
+ fl4.flowi4_oif = 0;
+ fl4.flowi4_iif = 0;
+ fl4.daddr = ip_hdr(skb)->saddr;
+ fl4.saddr = ip_hdr(skb)->daddr;
+ fl4.flowi4_tos = RT_TOS(ip_hdr(skb)->tos);
+ fl4.flowi4_scope = RT_SCOPE_UNIVERSE;
+ fl4.flowi4_mark = IN_DEV_SRC_VMARK(in_dev) ? skb->mark : 0;
+
+ net = dev_net(dev);
+ if (!fib_lookup(net, &fl4, &res))
+ return FIB_RES_PREFSRC(net, res);
+ else
+ return inet_select_addr(dev, 0, RT_SCOPE_UNIVERSE);
+}
+
/* Given (packet source, input interface) and optional (dst, oif, tos):
* - (main) check, that source is valid i.e. not broadcast or our local
* address.
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
index 49a74cc..4bce5a2 100644
--- a/net/ipv4/icmp.c
+++ b/net/ipv4/icmp.c
@@ -95,6 +95,7 @@
#include <net/checksum.h>
#include <net/xfrm.h>
#include <net/inet_common.h>
+#include <net/ip_fib.h>
/*
* Build xmit assembly blocks
@@ -333,7 +334,7 @@ static void icmp_reply(struct icmp_bxm *icmp_param, struct sk_buff *skb)
struct flowi4 fl4;
struct sock *sk;
struct inet_sock *inet;
- __be32 daddr;
+ __be32 daddr, saddr;
if (ip_options_echo(&icmp_param->replyopts.opt.opt, skb))
return;
@@ -347,6 +348,7 @@ static void icmp_reply(struct icmp_bxm *icmp_param, struct sk_buff *skb)
inet->tos = ip_hdr(skb)->tos;
daddr = ipc.addr = ip_hdr(skb)->saddr;
+ saddr = fib_compute_spec_dst(skb);
ipc.opt = NULL;
ipc.tx_flags = 0;
if (icmp_param->replyopts.opt.opt.optlen) {
@@ -356,7 +358,7 @@ static void icmp_reply(struct icmp_bxm *icmp_param, struct sk_buff *skb)
}
memset(&fl4, 0, sizeof(fl4));
fl4.daddr = daddr;
- fl4.saddr = rt->rt_spec_dst;
+ fl4.saddr = saddr;
fl4.flowi4_tos = RT_TOS(ip_hdr(skb)->tos);
fl4.flowi4_proto = IPPROTO_ICMP;
security_skb_classify_flow(skb, flowi4_to_flowi(&fl4));
diff --git a/net/ipv4/ip_options.c b/net/ipv4/ip_options.c
index 708b994..766dfe56 100644
--- a/net/ipv4/ip_options.c
+++ b/net/ipv4/ip_options.c
@@ -27,6 +27,7 @@
#include <net/icmp.h>
#include <net/route.h>
#include <net/cipso_ipv4.h>
+#include <net/ip_fib.h>
/*
* Write options to IP header, record destination address to
@@ -104,7 +105,7 @@ int ip_options_echo(struct ip_options *dopt, struct sk_buff *skb)
sptr = skb_network_header(skb);
dptr = dopt->__data;
- daddr = skb_rtable(skb)->rt_spec_dst;
+ daddr = fib_compute_spec_dst(skb);
if (sopt->rr) {
optlen = sptr[sopt->rr+1];
@@ -250,15 +251,14 @@ void ip_options_fragment(struct sk_buff *skb)
int ip_options_compile(struct net *net,
struct ip_options *opt, struct sk_buff *skb)
{
- int l;
- unsigned char *iph;
- unsigned char *optptr;
- int optlen;
+ __be32 spec_dst = (__force __be32) 0;
unsigned char *pp_ptr = NULL;
- struct rtable *rt = NULL;
+ unsigned char *optptr;
+ unsigned char *iph;
+ int optlen, l;
if (skb != NULL) {
- rt = skb_rtable(skb);
+ spec_dst = fib_compute_spec_dst(skb);
optptr = (unsigned char *)&(ip_hdr(skb)[1]);
} else
optptr = opt->__data;
@@ -330,8 +330,8 @@ int ip_options_compile(struct net *net,
pp_ptr = optptr + 2;
goto error;
}
- if (rt) {
- memcpy(&optptr[optptr[2]-1], &rt->rt_spec_dst, 4);
+ if (skb) {
+ memcpy(&optptr[optptr[2]-1], &spec_dst, 4);
opt->is_changed = 1;
}
optptr[2] += 4;
@@ -372,8 +372,8 @@ int ip_options_compile(struct net *net,
goto error;
}
opt->ts = optptr - iph;
- if (rt) {
- memcpy(&optptr[optptr[2]-1], &rt->rt_spec_dst, 4);
+ if (skb) {
+ memcpy(&optptr[optptr[2]-1], &spec_dst, 4);
timeptr = &optptr[optptr[2]+3];
}
opt->ts_needaddr = 1;
diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
index 0d11f23..de29f46 100644
--- a/net/ipv4/ip_sockglue.c
+++ b/net/ipv4/ip_sockglue.c
@@ -40,6 +40,7 @@
#if IS_ENABLED(CONFIG_IPV6)
#include <net/transp_v6.h>
#endif
+#include <net/ip_fib.h>
#include <linux/errqueue.h>
#include <asm/uaccess.h>
@@ -1019,8 +1020,8 @@ e_inval:
* @sk: socket
* @skb: buffer
*
- * To support IP_CMSG_PKTINFO option, we store rt_iif and rt_spec_dst
- * in skb->cb[] before dst drop.
+ * To support IP_CMSG_PKTINFO option, we store rt_iif and specific
+ * destination in skb->cb[] before dst drop.
* This way, receiver doesnt make cache line misses to read rtable.
*/
void ipv4_pktinfo_prepare(struct sk_buff *skb)
@@ -1030,7 +1031,7 @@ void ipv4_pktinfo_prepare(struct sk_buff *skb)
if (rt) {
pktinfo->ipi_ifindex = rt->rt_iif;
- pktinfo->ipi_spec_dst.s_addr = rt->rt_spec_dst;
+ pktinfo->ipi_spec_dst.s_addr = fib_compute_spec_dst(skb);
} else {
pktinfo->ipi_ifindex = 0;
pktinfo->ipi_spec_dst.s_addr = 0;
--
1.7.10.2
^ permalink raw reply related
* [PATCH] ipv4: Show that ip_send_reply() is purely unicast routine.
From: David Miller @ 2012-06-28 10:22 UTC (permalink / raw)
To: netdev
Rename it to ip_send_unicast_reply() and add explicit 'saddr'
argument.
This removed one of the few users of rt->rt_spec_dst.
Signed-off-by: David S. Miller <davem@davemloft.net>
---
include/net/ip.h | 5 +++--
net/ipv4/ip_output.c | 9 +++++----
net/ipv4/tcp_ipv4.c | 8 ++++----
3 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/include/net/ip.h b/include/net/ip.h
index 50841bd..ec5cfde 100644
--- a/include/net/ip.h
+++ b/include/net/ip.h
@@ -158,8 +158,9 @@ static inline __u8 ip_reply_arg_flowi_flags(const struct ip_reply_arg *arg)
return (arg->flags & IP_REPLY_ARG_NOSRCCHECK) ? FLOWI_FLAG_ANYSRC : 0;
}
-void ip_send_reply(struct sock *sk, struct sk_buff *skb, __be32 daddr,
- const struct ip_reply_arg *arg, unsigned int len);
+void ip_send_unicast_reply(struct sock *sk, struct sk_buff *skb, __be32 daddr,
+ __be32 saddr, const struct ip_reply_arg *arg,
+ unsigned int len);
struct ipv4_config {
int log_martians;
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
index 0f3185a..2630900 100644
--- a/net/ipv4/ip_output.c
+++ b/net/ipv4/ip_output.c
@@ -1459,13 +1459,14 @@ static int ip_reply_glue_bits(void *dptr, char *to, int offset,
/*
* Generic function to send a packet as reply to another packet.
- * Used to send TCP resets so far. ICMP should use this function too.
+ * Used to send TCP resets so far.
*
* Should run single threaded per socket because it uses the sock
* structure to pass arguments.
*/
-void ip_send_reply(struct sock *sk, struct sk_buff *skb, __be32 daddr,
- const struct ip_reply_arg *arg, unsigned int len)
+void ip_send_unicast_reply(struct sock *sk, struct sk_buff *skb, __be32 daddr,
+ __be32 saddr, const struct ip_reply_arg *arg,
+ unsigned int len)
{
struct inet_sock *inet = inet_sk(sk);
struct ip_options_data replyopts;
@@ -1491,7 +1492,7 @@ void ip_send_reply(struct sock *sk, struct sk_buff *skb, __be32 daddr,
RT_TOS(arg->tos),
RT_SCOPE_UNIVERSE, sk->sk_protocol,
ip_reply_arg_flowi_flags(arg),
- daddr, rt->rt_spec_dst,
+ daddr, saddr,
tcp_hdr(skb)->source, tcp_hdr(skb)->dest);
security_skb_classify_flow(skb, flowi4_to_flowi(&fl4));
rt = ip_route_output_key(sock_net(sk), &fl4);
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index b4ae1c1..64568fa 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -698,8 +698,8 @@ static void tcp_v4_send_reset(struct sock *sk, struct sk_buff *skb)
net = dev_net(skb_dst(skb)->dev);
arg.tos = ip_hdr(skb)->tos;
- ip_send_reply(net->ipv4.tcp_sock, skb, ip_hdr(skb)->saddr,
- &arg, arg.iov[0].iov_len);
+ ip_send_unicast_reply(net->ipv4.tcp_sock, skb, ip_hdr(skb)->saddr,
+ ip_hdr(skb)->daddr, &arg, arg.iov[0].iov_len);
TCP_INC_STATS_BH(net, TCP_MIB_OUTSEGS);
TCP_INC_STATS_BH(net, TCP_MIB_OUTRSTS);
@@ -781,8 +781,8 @@ static void tcp_v4_send_ack(struct sk_buff *skb, u32 seq, u32 ack,
if (oif)
arg.bound_dev_if = oif;
arg.tos = tos;
- ip_send_reply(net->ipv4.tcp_sock, skb, ip_hdr(skb)->saddr,
- &arg, arg.iov[0].iov_len);
+ ip_send_unicast_reply(net->ipv4.tcp_sock, skb, ip_hdr(skb)->saddr,
+ ip_hdr(skb)->daddr, &arg, arg.iov[0].iov_len);
TCP_INC_STATS_BH(net, TCP_MIB_OUTSEGS);
}
--
1.7.10.2
^ permalink raw reply related
* [PATCH 18/18] batman-adv: Prefix main defines with BATADV_
From: Antonio Quartulli @ 2012-06-28 9:34 UTC (permalink / raw)
To: davem; +Cc: netdev, b.a.t.m.a.n, Sven Eckelmann, Antonio Quartulli
In-Reply-To: <1340876067-28333-1-git-send-email-ordex@autistici.org>
From: Sven Eckelmann <sven@narfation.org>
Reported-by: Martin Hundebøll <martin@hundeboll.net>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: Antonio Quartulli <ordex@autistici.org>
---
net/batman-adv/bat_debugfs.c | 2 +-
net/batman-adv/bat_iv_ogm.c | 101 +++++++++++++++++++-------------
net/batman-adv/bat_sysfs.c | 7 ++-
net/batman-adv/bitarray.c | 20 +++----
net/batman-adv/bitarray.h | 4 +-
net/batman-adv/bridge_loop_avoidance.c | 20 ++++---
net/batman-adv/gateway_client.c | 18 +++---
net/batman-adv/hard-interface.c | 2 +-
net/batman-adv/main.c | 13 ++--
net/batman-adv/main.h | 81 ++++++++++++-------------
net/batman-adv/originator.c | 32 +++++-----
net/batman-adv/ring_buffer.c | 4 +-
net/batman-adv/routing.c | 20 ++++---
net/batman-adv/soft-interface.c | 10 ++--
net/batman-adv/translation-table.c | 89 ++++++++++++++++------------
net/batman-adv/types.h | 10 ++--
net/batman-adv/unicast.c | 2 +-
net/batman-adv/vis.c | 11 ++--
18 files changed, 244 insertions(+), 202 deletions(-)
diff --git a/net/batman-adv/bat_debugfs.c b/net/batman-adv/bat_debugfs.c
index f9af65e..4dcda43 100644
--- a/net/batman-adv/bat_debugfs.c
+++ b/net/batman-adv/bat_debugfs.c
@@ -38,7 +38,7 @@ static struct dentry *batadv_debugfs;
#define BATADV_LOG_BUFF_MASK (batadv_log_buff_len - 1)
#define BATADV_LOG_BUFF(idx) (debug_log->log_buff[(idx) & BATADV_LOG_BUFF_MASK])
-static int batadv_log_buff_len = LOG_BUF_LEN;
+static int batadv_log_buff_len = BATADV_LOG_BUF_LEN;
static void batadv_emit_log_char(struct debug_log *debug_log, char c)
{
diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c
index 245bb2d..bbe0f12 100644
--- a/net/batman-adv/bat_iv_ogm.c
+++ b/net/batman-adv/bat_iv_ogm.c
@@ -74,8 +74,8 @@ static int batadv_iv_ogm_iface_enable(struct hard_iface *hard_iface)
batman_ogm_packet->header.packet_type = BAT_IV_OGM;
batman_ogm_packet->header.version = BATADV_COMPAT_VERSION;
batman_ogm_packet->header.ttl = 2;
- batman_ogm_packet->flags = NO_FLAGS;
- batman_ogm_packet->tq = TQ_MAX_VALUE;
+ batman_ogm_packet->flags = BATADV_NO_FLAGS;
+ batman_ogm_packet->tq = BATADV_TQ_MAX_VALUE;
batman_ogm_packet->tt_num_changes = 0;
batman_ogm_packet->ttvn = 0;
@@ -108,29 +108,37 @@ static void batadv_iv_ogm_primary_iface_set(struct hard_iface *hard_iface)
batman_ogm_packet = (struct batman_ogm_packet *)hard_iface->packet_buff;
batman_ogm_packet->flags = PRIMARIES_FIRST_HOP;
- batman_ogm_packet->header.ttl = TTL;
+ batman_ogm_packet->header.ttl = BATADV_TTL;
}
/* when do we schedule our own ogm to be sent */
static unsigned long
batadv_iv_ogm_emit_send_time(const struct bat_priv *bat_priv)
{
- return jiffies + msecs_to_jiffies(
- atomic_read(&bat_priv->orig_interval) -
- JITTER + (random32() % 2*JITTER));
+ unsigned int msecs;
+
+ msecs = atomic_read(&bat_priv->orig_interval) - BATADV_JITTER;
+ msecs += (random32() % 2 * BATADV_JITTER);
+
+ return jiffies + msecs_to_jiffies(msecs);
}
/* when do we schedule a ogm packet to be sent */
static unsigned long batadv_iv_ogm_fwd_send_time(void)
{
- return jiffies + msecs_to_jiffies(random32() % (JITTER/2));
+ return jiffies + msecs_to_jiffies(random32() % (BATADV_JITTER / 2));
}
/* apply hop penalty for a normal link */
static uint8_t batadv_hop_penalty(uint8_t tq, const struct bat_priv *bat_priv)
{
int hop_penalty = atomic_read(&bat_priv->hop_penalty);
- return (tq * (TQ_MAX_VALUE - hop_penalty)) / (TQ_MAX_VALUE);
+ int new_tq;
+
+ new_tq = tq * (BATADV_TQ_MAX_VALUE - hop_penalty);
+ new_tq /= BATADV_TQ_MAX_VALUE;
+
+ return new_tq;
}
/* is there another aggregated packet here? */
@@ -143,7 +151,7 @@ static int batadv_iv_ogm_aggr_packet(int buff_pos, int packet_len,
next_buff_pos += batadv_tt_len(tt_num_changes);
return (next_buff_pos <= packet_len) &&
- (next_buff_pos <= MAX_AGGREGATION_BYTES);
+ (next_buff_pos <= BATADV_MAX_AGGREGATION_BYTES);
}
/* send a batman ogm to a given interface */
@@ -290,8 +298,11 @@ batadv_iv_ogm_can_aggregate(const struct batman_ogm_packet *new_bat_ogm_packet,
int aggregated_bytes = forw_packet->packet_len + packet_len;
struct hard_iface *primary_if = NULL;
bool res = false;
+ unsigned long aggregation_end_time;
batman_ogm_packet = (struct batman_ogm_packet *)forw_packet->skb->data;
+ aggregation_end_time = send_time;
+ aggregation_end_time += msecs_to_jiffies(BATADV_MAX_AGGREGATION_MS);
/* we can aggregate the current packet to this aggregated packet
* if:
@@ -301,9 +312,8 @@ batadv_iv_ogm_can_aggregate(const struct batman_ogm_packet *new_bat_ogm_packet,
* MAX_AGGREGATION_BYTES
*/
if (time_before(send_time, forw_packet->send_time) &&
- time_after_eq(send_time + msecs_to_jiffies(MAX_AGGREGATION_MS),
- forw_packet->send_time) &&
- (aggregated_bytes <= MAX_AGGREGATION_BYTES)) {
+ time_after_eq(aggregation_end_time, forw_packet->send_time) &&
+ (aggregated_bytes <= BATADV_MAX_AGGREGATION_BYTES)) {
/* check aggregation compatibility
* -> direct link packets are broadcasted on
@@ -367,6 +377,7 @@ static void batadv_iv_ogm_aggregate_new(const unsigned char *packet_buff,
struct bat_priv *bat_priv = netdev_priv(if_incoming->soft_iface);
struct forw_packet *forw_packet_aggr;
unsigned char *skb_buff;
+ unsigned int skb_size;
if (!atomic_inc_not_zero(&if_incoming->refcount))
return;
@@ -388,12 +399,12 @@ static void batadv_iv_ogm_aggregate_new(const unsigned char *packet_buff,
}
if ((atomic_read(&bat_priv->aggregated_ogms)) &&
- (packet_len < MAX_AGGREGATION_BYTES))
- forw_packet_aggr->skb = dev_alloc_skb(MAX_AGGREGATION_BYTES +
- ETH_HLEN);
+ (packet_len < BATADV_MAX_AGGREGATION_BYTES))
+ skb_size = BATADV_MAX_AGGREGATION_BYTES + ETH_HLEN;
else
- forw_packet_aggr->skb = dev_alloc_skb(packet_len + ETH_HLEN);
+ skb_size = packet_len + ETH_HLEN;
+ forw_packet_aggr->skb = dev_alloc_skb(skb_size);
if (!forw_packet_aggr->skb) {
if (!own_packet)
atomic_inc(&bat_priv->batman_queue_left);
@@ -411,7 +422,7 @@ static void batadv_iv_ogm_aggregate_new(const unsigned char *packet_buff,
forw_packet_aggr->own = own_packet;
forw_packet_aggr->if_incoming = if_incoming;
forw_packet_aggr->num_packets = 0;
- forw_packet_aggr->direct_link_flags = NO_FLAGS;
+ forw_packet_aggr->direct_link_flags = BATADV_NO_FLAGS;
forw_packet_aggr->send_time = send_time;
/* save packet direct link flag status */
@@ -466,9 +477,11 @@ static void batadv_iv_ogm_queue_add(struct bat_priv *bat_priv,
struct hlist_node *tmp_node;
struct batman_ogm_packet *batman_ogm_packet;
bool direct_link;
+ unsigned long max_aggregation_jiffies;
batman_ogm_packet = (struct batman_ogm_packet *)packet_buff;
direct_link = batman_ogm_packet->flags & DIRECTLINK ? 1 : 0;
+ max_aggregation_jiffies = msecs_to_jiffies(BATADV_MAX_AGGREGATION_MS);
/* find position for the packet in the forward queue */
spin_lock_bh(&bat_priv->forw_bat_list_lock);
@@ -498,9 +511,8 @@ static void batadv_iv_ogm_queue_add(struct bat_priv *bat_priv,
* we hold it back for a while, so that it might be aggregated
* later on
*/
- if ((!own_packet) &&
- (atomic_read(&bat_priv->aggregated_ogms)))
- send_time += msecs_to_jiffies(MAX_AGGREGATION_MS);
+ if (!own_packet && atomic_read(&bat_priv->aggregated_ogms))
+ send_time += max_aggregation_jiffies;
batadv_iv_ogm_aggregate_new(packet_buff, packet_len,
send_time, direct_link,
@@ -603,7 +615,7 @@ static void batadv_iv_ogm_schedule(struct hard_iface *hard_iface)
batman_ogm_packet->gw_flags =
(uint8_t)atomic_read(&bat_priv->gw_bandwidth);
else
- batman_ogm_packet->gw_flags = NO_FLAGS;
+ batman_ogm_packet->gw_flags = BATADV_NO_FLAGS;
batadv_slide_own_bcast_window(hard_iface);
batadv_iv_ogm_queue_add(bat_priv, hard_iface->packet_buff,
@@ -772,8 +784,10 @@ static int batadv_iv_ogm_calc_tq(struct orig_node *orig_node,
struct neigh_node *neigh_node = NULL, *tmp_neigh_node;
struct hlist_node *node;
uint8_t total_count;
- uint8_t orig_eq_count, neigh_rq_count, tq_own;
- int tq_asym_penalty, ret = 0;
+ uint8_t orig_eq_count, neigh_rq_count, neigh_rq_inv, tq_own;
+ unsigned int neigh_rq_inv_cube, neigh_rq_max_cube;
+ int tq_asym_penalty, inv_asym_penalty, ret = 0;
+ unsigned int combined_tq;
/* find corresponding one hop neighbor */
rcu_read_lock();
@@ -824,32 +838,33 @@ static int batadv_iv_ogm_calc_tq(struct orig_node *orig_node,
/* if we have too few packets (too less data) we set tq_own to zero
* if we receive too few packets it is not considered bidirectional
*/
- if ((total_count < TQ_LOCAL_BIDRECT_SEND_MINIMUM) ||
- (neigh_rq_count < TQ_LOCAL_BIDRECT_RECV_MINIMUM))
+ if (total_count < BATADV_TQ_LOCAL_BIDRECT_SEND_MINIMUM ||
+ neigh_rq_count < BATADV_TQ_LOCAL_BIDRECT_RECV_MINIMUM)
tq_own = 0;
else
/* neigh_node->real_packet_count is never zero as we
* only purge old information when getting new
* information
*/
- tq_own = (TQ_MAX_VALUE * total_count) / neigh_rq_count;
+ tq_own = (BATADV_TQ_MAX_VALUE * total_count) / neigh_rq_count;
/* 1 - ((1-x) ** 3), normalized to TQ_MAX_VALUE this does
* affect the nearly-symmetric links only a little, but
* punishes asymmetric links more. This will give a value
* between 0 and TQ_MAX_VALUE
*/
- tq_asym_penalty = TQ_MAX_VALUE - (TQ_MAX_VALUE *
- (TQ_LOCAL_WINDOW_SIZE - neigh_rq_count) *
- (TQ_LOCAL_WINDOW_SIZE - neigh_rq_count) *
- (TQ_LOCAL_WINDOW_SIZE - neigh_rq_count)) /
- (TQ_LOCAL_WINDOW_SIZE *
- TQ_LOCAL_WINDOW_SIZE *
- TQ_LOCAL_WINDOW_SIZE);
+ neigh_rq_inv = BATADV_TQ_LOCAL_WINDOW_SIZE - neigh_rq_count;
+ neigh_rq_inv_cube = neigh_rq_inv * neigh_rq_inv * neigh_rq_inv;
+ neigh_rq_max_cube = BATADV_TQ_LOCAL_WINDOW_SIZE *
+ BATADV_TQ_LOCAL_WINDOW_SIZE *
+ BATADV_TQ_LOCAL_WINDOW_SIZE;
+ inv_asym_penalty = BATADV_TQ_MAX_VALUE * neigh_rq_inv_cube;
+ inv_asym_penalty /= neigh_rq_max_cube;
+ tq_asym_penalty = BATADV_TQ_MAX_VALUE - inv_asym_penalty;
- batman_ogm_packet->tq = ((batman_ogm_packet->tq * tq_own
- * tq_asym_penalty) /
- (TQ_MAX_VALUE * TQ_MAX_VALUE));
+ combined_tq = batman_ogm_packet->tq * tq_own * tq_asym_penalty;
+ combined_tq /= BATADV_TQ_MAX_VALUE * BATADV_TQ_MAX_VALUE;
+ batman_ogm_packet->tq = combined_tq;
batadv_dbg(DBG_BATMAN, bat_priv,
"bidirectional: orig = %-15pM neigh = %-15pM => own_bcast = %2i, real recv = %2i, local tq: %3i, asym_penalty: %3i, total tq: %3i\n",
@@ -860,7 +875,7 @@ static int batadv_iv_ogm_calc_tq(struct orig_node *orig_node,
/* if link has the minimum required transmission quality
* consider it bidirectional
*/
- if (batman_ogm_packet->tq >= TQ_TOTAL_BIDRECT_LIMIT)
+ if (batman_ogm_packet->tq >= BATADV_TQ_TOTAL_BIDRECT_LIMIT)
ret = 1;
out:
@@ -928,7 +943,7 @@ batadv_iv_ogm_update_seqnos(const struct ethhdr *ethhdr,
tmp_neigh_node->real_packet_count =
bitmap_weight(tmp_neigh_node->real_bits,
- TQ_LOCAL_WINDOW_SIZE);
+ BATADV_TQ_LOCAL_WINDOW_SIZE);
}
rcu_read_unlock();
@@ -1050,6 +1065,8 @@ static void batadv_iv_ogm_process(const struct ethhdr *ethhdr,
unsigned long *word;
int offset;
int32_t bit_pos;
+ int16_t if_num;
+ uint8_t *weight;
orig_neigh_node = batadv_get_orig_node(bat_priv,
ethhdr->h_source);
@@ -1063,15 +1080,17 @@ static void batadv_iv_ogm_process(const struct ethhdr *ethhdr,
if (has_directlink_flag &&
batadv_compare_eth(if_incoming->net_dev->dev_addr,
batman_ogm_packet->orig)) {
- offset = if_incoming->if_num * NUM_WORDS;
+ if_num = if_incoming->if_num;
+ offset = if_num * BATADV_NUM_WORDS;
spin_lock_bh(&orig_neigh_node->ogm_cnt_lock);
word = &(orig_neigh_node->bcast_own[offset]);
bit_pos = if_incoming_seqno - 2;
bit_pos -= ntohl(batman_ogm_packet->seqno);
batadv_set_bit(word, bit_pos);
- orig_neigh_node->bcast_own_sum[if_incoming->if_num] =
- bitmap_weight(word, TQ_LOCAL_WINDOW_SIZE);
+ weight = &orig_neigh_node->bcast_own_sum[if_num];
+ *weight = bitmap_weight(word,
+ BATADV_TQ_LOCAL_WINDOW_SIZE);
spin_unlock_bh(&orig_neigh_node->ogm_cnt_lock);
}
diff --git a/net/batman-adv/bat_sysfs.c b/net/batman-adv/bat_sysfs.c
index a6c27f0..95d80d1 100644
--- a/net/batman-adv/bat_sysfs.c
+++ b/net/batman-adv/bat_sysfs.c
@@ -470,10 +470,11 @@ static BATADV_ATTR(vis_mode, S_IRUGO | S_IWUSR, batadv_show_vis_mode,
static BATADV_ATTR(routing_algo, S_IRUGO, batadv_show_bat_algo, NULL);
static BATADV_ATTR(gw_mode, S_IRUGO | S_IWUSR, batadv_show_gw_mode,
batadv_store_gw_mode);
-BATADV_ATTR_SIF_UINT(orig_interval, S_IRUGO | S_IWUSR, 2 * JITTER, INT_MAX,
+BATADV_ATTR_SIF_UINT(orig_interval, S_IRUGO | S_IWUSR, 2 * BATADV_JITTER,
+ INT_MAX, NULL);
+BATADV_ATTR_SIF_UINT(hop_penalty, S_IRUGO | S_IWUSR, 0, BATADV_TQ_MAX_VALUE,
NULL);
-BATADV_ATTR_SIF_UINT(hop_penalty, S_IRUGO | S_IWUSR, 0, TQ_MAX_VALUE, NULL);
-BATADV_ATTR_SIF_UINT(gw_sel_class, S_IRUGO | S_IWUSR, 1, TQ_MAX_VALUE,
+BATADV_ATTR_SIF_UINT(gw_sel_class, S_IRUGO | S_IWUSR, 1, BATADV_TQ_MAX_VALUE,
batadv_post_gw_deselect);
static BATADV_ATTR(gw_bandwidth, S_IRUGO | S_IWUSR, batadv_show_gw_bwidth,
batadv_store_gw_bwidth);
diff --git a/net/batman-adv/bitarray.c b/net/batman-adv/bitarray.c
index e195b9e..4a009b5 100644
--- a/net/batman-adv/bitarray.c
+++ b/net/batman-adv/bitarray.c
@@ -25,10 +25,10 @@
/* shift the packet array by n places. */
static void batadv_bitmap_shift_left(unsigned long *seq_bits, int32_t n)
{
- if (n <= 0 || n >= TQ_LOCAL_WINDOW_SIZE)
+ if (n <= 0 || n >= BATADV_TQ_LOCAL_WINDOW_SIZE)
return;
- bitmap_shift_left(seq_bits, seq_bits, n, TQ_LOCAL_WINDOW_SIZE);
+ bitmap_shift_left(seq_bits, seq_bits, n, BATADV_TQ_LOCAL_WINDOW_SIZE);
}
@@ -46,7 +46,7 @@ int batadv_bit_get_packet(void *priv, unsigned long *seq_bits,
/* sequence number is slightly older. We already got a sequence number
* higher than this one, so we just mark it.
*/
- if ((seq_num_diff <= 0) && (seq_num_diff > -TQ_LOCAL_WINDOW_SIZE)) {
+ if (seq_num_diff <= 0 && seq_num_diff > -BATADV_TQ_LOCAL_WINDOW_SIZE) {
if (set_mark)
batadv_set_bit(seq_bits, -seq_num_diff);
return 0;
@@ -55,7 +55,7 @@ int batadv_bit_get_packet(void *priv, unsigned long *seq_bits,
/* sequence number is slightly newer, so we shift the window and
* set the mark if required
*/
- if ((seq_num_diff > 0) && (seq_num_diff < TQ_LOCAL_WINDOW_SIZE)) {
+ if (seq_num_diff > 0 && seq_num_diff < BATADV_TQ_LOCAL_WINDOW_SIZE) {
batadv_bitmap_shift_left(seq_bits, seq_num_diff);
if (set_mark)
@@ -64,12 +64,12 @@ int batadv_bit_get_packet(void *priv, unsigned long *seq_bits,
}
/* sequence number is much newer, probably missed a lot of packets */
- if ((seq_num_diff >= TQ_LOCAL_WINDOW_SIZE) &&
- (seq_num_diff < EXPECTED_SEQNO_RANGE)) {
+ if (seq_num_diff >= BATADV_TQ_LOCAL_WINDOW_SIZE &&
+ seq_num_diff < BATADV_EXPECTED_SEQNO_RANGE) {
batadv_dbg(DBG_BATMAN, bat_priv,
"We missed a lot of packets (%i) !\n",
seq_num_diff - 1);
- bitmap_zero(seq_bits, TQ_LOCAL_WINDOW_SIZE);
+ bitmap_zero(seq_bits, BATADV_TQ_LOCAL_WINDOW_SIZE);
if (set_mark)
batadv_set_bit(seq_bits, 0);
return 1;
@@ -80,13 +80,13 @@ int batadv_bit_get_packet(void *priv, unsigned long *seq_bits,
* packet should be dropped without calling this function if the
* seqno window is protected.
*/
- if ((seq_num_diff <= -TQ_LOCAL_WINDOW_SIZE) ||
- (seq_num_diff >= EXPECTED_SEQNO_RANGE)) {
+ if (seq_num_diff <= -BATADV_TQ_LOCAL_WINDOW_SIZE ||
+ seq_num_diff >= BATADV_EXPECTED_SEQNO_RANGE) {
batadv_dbg(DBG_BATMAN, bat_priv,
"Other host probably restarted!\n");
- bitmap_zero(seq_bits, TQ_LOCAL_WINDOW_SIZE);
+ bitmap_zero(seq_bits, BATADV_TQ_LOCAL_WINDOW_SIZE);
if (set_mark)
batadv_set_bit(seq_bits, 0);
diff --git a/net/batman-adv/bitarray.h b/net/batman-adv/bitarray.h
index 7954ba8..a081ce1 100644
--- a/net/batman-adv/bitarray.h
+++ b/net/batman-adv/bitarray.h
@@ -29,7 +29,7 @@ static inline int batadv_test_bit(const unsigned long *seq_bits,
int32_t diff;
diff = last_seqno - curr_seqno;
- if (diff < 0 || diff >= TQ_LOCAL_WINDOW_SIZE)
+ if (diff < 0 || diff >= BATADV_TQ_LOCAL_WINDOW_SIZE)
return 0;
else
return test_bit(diff, seq_bits);
@@ -39,7 +39,7 @@ static inline int batadv_test_bit(const unsigned long *seq_bits,
static inline void batadv_set_bit(unsigned long *seq_bits, int32_t n)
{
/* if too old, just drop it */
- if (n < 0 || n >= TQ_LOCAL_WINDOW_SIZE)
+ if (n < 0 || n >= BATADV_TQ_LOCAL_WINDOW_SIZE)
return;
set_bit(n, seq_bits); /* turn the position on */
diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c
index 42b8a20..db20b68 100644
--- a/net/batman-adv/bridge_loop_avoidance.c
+++ b/net/batman-adv/bridge_loop_avoidance.c
@@ -949,7 +949,7 @@ static void batadv_bla_purge_backbone_gw(struct bat_priv *bat_priv, int now)
if (now)
goto purge_now;
if (!batadv_has_timed_out(backbone_gw->lasttime,
- BLA_BACKBONE_TIMEOUT))
+ BATADV_BLA_BACKBONE_TIMEOUT))
continue;
batadv_dbg(DBG_BLA, backbone_gw->bat_priv,
@@ -1001,7 +1001,7 @@ static void batadv_bla_purge_claims(struct bat_priv *bat_priv,
primary_if->net_dev->dev_addr))
continue;
if (!batadv_has_timed_out(claim->lasttime,
- BLA_CLAIM_TIMEOUT))
+ BATADV_BLA_CLAIM_TIMEOUT))
continue;
batadv_dbg(DBG_BLA, bat_priv,
@@ -1075,7 +1075,7 @@ static void batadv_bla_start_timer(struct bat_priv *bat_priv)
{
INIT_DELAYED_WORK(&bat_priv->bla_work, batadv_bla_periodic_work);
queue_delayed_work(batadv_event_workqueue, &bat_priv->bla_work,
- msecs_to_jiffies(BLA_PERIOD_LENGTH));
+ msecs_to_jiffies(BATADV_BLA_PERIOD_LENGTH));
}
/* periodic work to do:
@@ -1162,9 +1162,9 @@ int batadv_bla_init(struct bat_priv *bat_priv)
}
/* initialize the duplicate list */
- for (i = 0; i < DUPLIST_SIZE; i++)
+ for (i = 0; i < BATADV_DUPLIST_SIZE; i++)
bat_priv->bcast_duplist[i].entrytime =
- jiffies - msecs_to_jiffies(DUPLIST_TIMEOUT);
+ jiffies - msecs_to_jiffies(BATADV_DUPLIST_TIMEOUT);
bat_priv->bcast_duplist_curr = 0;
if (bat_priv->claim_hash)
@@ -1216,14 +1216,15 @@ int batadv_bla_check_bcast_duplist(struct bat_priv *bat_priv,
/* calculate the crc ... */
crc = crc16(0, content, length);
- for (i = 0 ; i < DUPLIST_SIZE; i++) {
- curr = (bat_priv->bcast_duplist_curr + i) % DUPLIST_SIZE;
+ for (i = 0; i < BATADV_DUPLIST_SIZE; i++) {
+ curr = (bat_priv->bcast_duplist_curr + i) % BATADV_DUPLIST_SIZE;
entry = &bat_priv->bcast_duplist[curr];
/* we can stop searching if the entry is too old ;
* later entries will be even older
*/
- if (batadv_has_timed_out(entry->entrytime, DUPLIST_TIMEOUT))
+ if (batadv_has_timed_out(entry->entrytime,
+ BATADV_DUPLIST_TIMEOUT))
break;
if (entry->crc != crc)
@@ -1238,7 +1239,8 @@ int batadv_bla_check_bcast_duplist(struct bat_priv *bat_priv,
return 1;
}
/* not found, add a new entry (overwrite the oldest entry) */
- curr = (bat_priv->bcast_duplist_curr + DUPLIST_SIZE - 1) % DUPLIST_SIZE;
+ curr = (bat_priv->bcast_duplist_curr + BATADV_DUPLIST_SIZE - 1);
+ curr %= BATADV_DUPLIST_SIZE;
entry = &bat_priv->bcast_duplist[curr];
entry->crc = crc;
entry->entrytime = jiffies;
diff --git a/net/batman-adv/gateway_client.c b/net/batman-adv/gateway_client.c
index 3916e90..5fc162c 100644
--- a/net/batman-adv/gateway_client.c
+++ b/net/batman-adv/gateway_client.c
@@ -138,8 +138,8 @@ static struct gw_node *batadv_gw_get_best_gw_node(struct bat_priv *bat_priv)
tmp_gw_factor = (router->tq_avg * router->tq_avg *
down * 100 * 100) /
- (TQ_LOCAL_WINDOW_SIZE *
- TQ_LOCAL_WINDOW_SIZE * 64);
+ (BATADV_TQ_LOCAL_WINDOW_SIZE *
+ BATADV_TQ_LOCAL_WINDOW_SIZE * 64);
if ((tmp_gw_factor > max_gw_factor) ||
((tmp_gw_factor == max_gw_factor) &&
@@ -354,7 +354,7 @@ void batadv_gw_node_update(struct bat_priv *bat_priv,
gw_node->deleted = 0;
- if (new_gwflags == NO_FLAGS) {
+ if (new_gwflags == BATADV_NO_FLAGS) {
gw_node->deleted = jiffies;
batadv_dbg(DBG_BATMAN, bat_priv,
"Gateway %pM removed from gateway list\n",
@@ -367,7 +367,7 @@ void batadv_gw_node_update(struct bat_priv *bat_priv,
goto unlock;
}
- if (new_gwflags == NO_FLAGS)
+ if (new_gwflags == BATADV_NO_FLAGS)
goto unlock;
batadv_gw_node_add(bat_priv, orig_node, new_gwflags);
@@ -392,7 +392,7 @@ void batadv_gw_node_purge(struct bat_priv *bat_priv)
{
struct gw_node *gw_node, *curr_gw;
struct hlist_node *node, *node_tmp;
- unsigned long timeout = msecs_to_jiffies(2 * PURGE_TIMEOUT);
+ unsigned long timeout = msecs_to_jiffies(2 * BATADV_PURGE_TIMEOUT);
int do_deselect = 0;
curr_gw = batadv_gw_get_selected_gw_node(bat_priv);
@@ -484,8 +484,8 @@ int batadv_gw_client_seq_print_text(struct seq_file *seq, void *offset)
seq_printf(seq,
" %-12s (%s/%i) %17s [%10s]: gw_class ... [B.A.T.M.A.N. adv %s, MainIF/MAC: %s/%pM (%s)]\n",
- "Gateway", "#", TQ_MAX_VALUE, "Nexthop", "outgoingIF",
- SOURCE_VERSION, primary_if->net_dev->name,
+ "Gateway", "#", BATADV_TQ_MAX_VALUE, "Nexthop", "outgoingIF",
+ BATADV_SOURCE_VERSION, primary_if->net_dev->name,
primary_if->net_dev->dev_addr, net_dev->name);
rcu_read_lock();
@@ -667,7 +667,7 @@ bool batadv_gw_out_of_range(struct bat_priv *bat_priv,
/* If we are a GW then we are our best GW. We can artificially
* set the tq towards ourself as the maximum value
*/
- curr_tq_avg = TQ_MAX_VALUE;
+ curr_tq_avg = BATADV_TQ_MAX_VALUE;
break;
case GW_MODE_CLIENT:
curr_gw = batadv_gw_get_selected_gw_node(bat_priv);
@@ -698,7 +698,7 @@ bool batadv_gw_out_of_range(struct bat_priv *bat_priv,
if (!neigh_old)
goto out;
- if (curr_tq_avg - neigh_old->tq_avg > GW_THRESHOLD)
+ if (curr_tq_avg - neigh_old->tq_avg > BATADV_GW_THRESHOLD)
out_of_range = true;
out:
diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c
index 9b1cb23..e7eba9c 100644
--- a/net/batman-adv/hard-interface.c
+++ b/net/batman-adv/hard-interface.c
@@ -548,7 +548,7 @@ bool batadv_is_wifi_iface(int ifindex)
struct net_device *net_device = NULL;
bool ret = false;
- if (ifindex == NULL_IFINDEX)
+ if (ifindex == BATADV_NULL_IFINDEX)
goto out;
net_device = dev_get_by_index(&init_net, ifindex);
diff --git a/net/batman-adv/main.c b/net/batman-adv/main.c
index 986be72..df7335c 100644
--- a/net/batman-adv/main.c
+++ b/net/batman-adv/main.c
@@ -72,7 +72,7 @@ static int __init batadv_init(void)
register_netdevice_notifier(&batadv_hard_if_notifier);
pr_info("B.A.T.M.A.N. advanced %s (compatibility version %i) loaded\n",
- SOURCE_VERSION, BATADV_COMPAT_VERSION);
+ BATADV_SOURCE_VERSION, BATADV_COMPAT_VERSION);
return 0;
}
@@ -120,7 +120,8 @@ int batadv_mesh_init(struct net_device *soft_iface)
if (ret < 0)
goto err;
- batadv_tt_local_add(soft_iface, soft_iface->dev_addr, NULL_IFINDEX);
+ batadv_tt_local_add(soft_iface, soft_iface->dev_addr,
+ BATADV_NULL_IFINDEX);
ret = batadv_vis_init(bat_priv);
if (ret < 0)
@@ -420,7 +421,7 @@ module_exit(batadv_exit);
MODULE_LICENSE("GPL");
-MODULE_AUTHOR(DRIVER_AUTHOR);
-MODULE_DESCRIPTION(DRIVER_DESC);
-MODULE_SUPPORTED_DEVICE(DRIVER_DEVICE);
-MODULE_VERSION(SOURCE_VERSION);
+MODULE_AUTHOR(BATADV_DRIVER_AUTHOR);
+MODULE_DESCRIPTION(BATADV_DRIVER_DESC);
+MODULE_SUPPORTED_DEVICE(BATADV_DRIVER_DEVICE);
+MODULE_VERSION(BATADV_SOURCE_VERSION);
diff --git a/net/batman-adv/main.h b/net/batman-adv/main.h
index b7b9817..09660b4 100644
--- a/net/batman-adv/main.h
+++ b/net/batman-adv/main.h
@@ -20,79 +20,80 @@
#ifndef _NET_BATMAN_ADV_MAIN_H_
#define _NET_BATMAN_ADV_MAIN_H_
-#define DRIVER_AUTHOR "Marek Lindner <lindner_marek@yahoo.de>, " \
- "Simon Wunderlich <siwu@hrz.tu-chemnitz.de>"
-#define DRIVER_DESC "B.A.T.M.A.N. advanced"
-#define DRIVER_DEVICE "batman-adv"
+#define BATADV_DRIVER_AUTHOR "Marek Lindner <lindner_marek@yahoo.de>, " \
+ "Simon Wunderlich <siwu@hrz.tu-chemnitz.de>"
+#define BATADV_DRIVER_DESC "B.A.T.M.A.N. advanced"
+#define BATADV_DRIVER_DEVICE "batman-adv"
-#ifndef SOURCE_VERSION
-#define SOURCE_VERSION "2012.3.0"
+#ifndef BATADV_SOURCE_VERSION
+#define BATADV_SOURCE_VERSION "2012.3.0"
#endif
/* B.A.T.M.A.N. parameters */
-#define TQ_MAX_VALUE 255
-#define JITTER 20
+#define BATADV_TQ_MAX_VALUE 255
+#define BATADV_JITTER 20
/* Time To Live of broadcast messages */
-#define TTL 50
+#define BATADV_TTL 50
/* purge originators after time in seconds if no valid packet comes in
- * -> TODO: check influence on TQ_LOCAL_WINDOW_SIZE
+ * -> TODO: check influence on BATADV_TQ_LOCAL_WINDOW_SIZE
*/
-#define PURGE_TIMEOUT 200000 /* 200 seconds */
-#define TT_LOCAL_TIMEOUT 3600000 /* in miliseconds */
-#define TT_CLIENT_ROAM_TIMEOUT 600000 /* in miliseconds */
+#define BATADV_PURGE_TIMEOUT 200000 /* 200 seconds */
+#define BATADV_TT_LOCAL_TIMEOUT 3600000 /* in miliseconds */
+#define BATADV_TT_CLIENT_ROAM_TIMEOUT 600000 /* in miliseconds */
/* sliding packet range of received originator messages in sequence numbers
* (should be a multiple of our word size)
*/
-#define TQ_LOCAL_WINDOW_SIZE 64
+#define BATADV_TQ_LOCAL_WINDOW_SIZE 64
/* miliseconds we have to keep pending tt_req */
-#define TT_REQUEST_TIMEOUT 3000
+#define BATADV_TT_REQUEST_TIMEOUT 3000
-#define TQ_GLOBAL_WINDOW_SIZE 5
-#define TQ_LOCAL_BIDRECT_SEND_MINIMUM 1
-#define TQ_LOCAL_BIDRECT_RECV_MINIMUM 1
-#define TQ_TOTAL_BIDRECT_LIMIT 1
+#define BATADV_TQ_GLOBAL_WINDOW_SIZE 5
+#define BATADV_TQ_LOCAL_BIDRECT_SEND_MINIMUM 1
+#define BATADV_TQ_LOCAL_BIDRECT_RECV_MINIMUM 1
+#define BATADV_TQ_TOTAL_BIDRECT_LIMIT 1
-#define TT_OGM_APPEND_MAX 3 /* number of OGMs sent with the last tt diff */
+/* number of OGMs sent with the last tt diff */
+#define BATADV_TT_OGM_APPEND_MAX 3
/* Time in which a client can roam at most ROAMING_MAX_COUNT times in
* miliseconds
*/
-#define ROAMING_MAX_TIME 20000
-#define ROAMING_MAX_COUNT 5
+#define BATADV_ROAMING_MAX_TIME 20000
+#define BATADV_ROAMING_MAX_COUNT 5
-#define NO_FLAGS 0
+#define BATADV_NO_FLAGS 0
-#define NULL_IFINDEX 0 /* dummy ifindex used to avoid iface checks */
+#define BATADV_NULL_IFINDEX 0 /* dummy ifindex used to avoid iface checks */
-#define NUM_WORDS BITS_TO_LONGS(TQ_LOCAL_WINDOW_SIZE)
+#define BATADV_NUM_WORDS BITS_TO_LONGS(BATADV_TQ_LOCAL_WINDOW_SIZE)
-#define LOG_BUF_LEN 8192 /* has to be a power of 2 */
+#define BATADV_LOG_BUF_LEN 8192 /* has to be a power of 2 */
-#define VIS_INTERVAL 5000 /* 5 seconds */
+#define BATADV_VIS_INTERVAL 5000 /* 5 seconds */
/* how much worse secondary interfaces may be to be considered as bonding
* candidates
*/
-#define BONDING_TQ_THRESHOLD 50
+#define BATADV_BONDING_TQ_THRESHOLD 50
/* should not be bigger than 512 bytes or change the size of
* forw_packet->direct_link_flags
*/
-#define MAX_AGGREGATION_BYTES 512
-#define MAX_AGGREGATION_MS 100
+#define BATADV_MAX_AGGREGATION_BYTES 512
+#define BATADV_MAX_AGGREGATION_MS 100
-#define BLA_PERIOD_LENGTH 10000 /* 10 seconds */
-#define BLA_BACKBONE_TIMEOUT (BLA_PERIOD_LENGTH * 3)
-#define BLA_CLAIM_TIMEOUT (BLA_PERIOD_LENGTH * 10)
+#define BATADV_BLA_PERIOD_LENGTH 10000 /* 10 seconds */
+#define BATADV_BLA_BACKBONE_TIMEOUT (BATADV_BLA_PERIOD_LENGTH * 3)
+#define BATADV_BLA_CLAIM_TIMEOUT (BATADV_BLA_PERIOD_LENGTH * 10)
-#define DUPLIST_SIZE 16
-#define DUPLIST_TIMEOUT 500 /* 500 ms */
+#define BATADV_DUPLIST_SIZE 16
+#define BATADV_DUPLIST_TIMEOUT 500 /* 500 ms */
/* don't reset again within 30 seconds */
-#define RESET_PROTECTION_MS 30000
-#define EXPECTED_SEQNO_RANGE 65536
+#define BATADV_RESET_PROTECTION_MS 30000
+#define BATADV_EXPECTED_SEQNO_RANGE 65536
enum mesh_state {
MESH_INACTIVE,
@@ -100,8 +101,8 @@ enum mesh_state {
MESH_DEACTIVATING
};
-#define BCAST_QUEUE_LEN 256
-#define BATMAN_QUEUE_LEN 256
+#define BATADV_BCAST_QUEUE_LEN 256
+#define BATADV_BATMAN_QUEUE_LEN 256
enum uev_action {
UEV_ADD = 0,
@@ -113,7 +114,7 @@ enum uev_type {
UEV_GW = 0
};
-#define GW_THRESHOLD 50
+#define BATADV_GW_THRESHOLD 50
/* Debug Messages */
#ifdef pr_fmt
diff --git a/net/batman-adv/originator.c b/net/batman-adv/originator.c
index 1980696..f04f591 100644
--- a/net/batman-adv/originator.c
+++ b/net/batman-adv/originator.c
@@ -194,6 +194,7 @@ struct orig_node *batadv_get_orig_node(struct bat_priv *bat_priv,
struct orig_node *orig_node;
int size;
int hash_added;
+ unsigned long reset_time;
orig_node = batadv_orig_hash_find(bat_priv, addr);
if (orig_node)
@@ -226,14 +227,13 @@ struct orig_node *batadv_get_orig_node(struct bat_priv *bat_priv,
orig_node->tt_buff = NULL;
orig_node->tt_buff_len = 0;
atomic_set(&orig_node->tt_size, 0);
- orig_node->bcast_seqno_reset = jiffies - 1
- - msecs_to_jiffies(RESET_PROTECTION_MS);
- orig_node->batman_seqno_reset = jiffies - 1
- - msecs_to_jiffies(RESET_PROTECTION_MS);
+ reset_time = jiffies - 1 - msecs_to_jiffies(BATADV_RESET_PROTECTION_MS);
+ orig_node->bcast_seqno_reset = reset_time;
+ orig_node->batman_seqno_reset = reset_time;
atomic_set(&orig_node->bond_candidates, 0);
- size = bat_priv->num_ifaces * sizeof(unsigned long) * NUM_WORDS;
+ size = bat_priv->num_ifaces * sizeof(unsigned long) * BATADV_NUM_WORDS;
orig_node->bcast_own = kzalloc(size, GFP_ATOMIC);
if (!orig_node->bcast_own)
@@ -285,7 +285,7 @@ static bool batadv_purge_orig_neighbors(struct bat_priv *bat_priv,
last_seen = neigh_node->last_seen;
if_incoming = neigh_node->if_incoming;
- if ((batadv_has_timed_out(last_seen, PURGE_TIMEOUT)) ||
+ if ((batadv_has_timed_out(last_seen, BATADV_PURGE_TIMEOUT)) ||
(if_incoming->if_status == IF_INACTIVE) ||
(if_incoming->if_status == IF_NOT_IN_USE) ||
(if_incoming->if_status == IF_TO_BE_REMOVED)) {
@@ -324,7 +324,8 @@ static bool batadv_purge_orig_node(struct bat_priv *bat_priv,
{
struct neigh_node *best_neigh_node;
- if (batadv_has_timed_out(orig_node->last_seen, 2 * PURGE_TIMEOUT)) {
+ if (batadv_has_timed_out(orig_node->last_seen,
+ 2 * BATADV_PURGE_TIMEOUT)) {
batadv_dbg(DBG_BATMAN, bat_priv,
"Originator timeout: originator %pM, last_seen %u\n",
orig_node->orig,
@@ -429,11 +430,11 @@ int batadv_orig_seq_print_text(struct seq_file *seq, void *offset)
}
seq_printf(seq, "[B.A.T.M.A.N. adv %s, MainIF/MAC: %s/%pM (%s)]\n",
- SOURCE_VERSION, primary_if->net_dev->name,
+ BATADV_SOURCE_VERSION, primary_if->net_dev->name,
primary_if->net_dev->dev_addr, net_dev->name);
seq_printf(seq, " %-15s %s (%s/%i) %17s [%10s]: %20s ...\n",
- "Originator", "last-seen", "#", TQ_MAX_VALUE, "Nexthop",
- "outgoingIF", "Potential nexthops");
+ "Originator", "last-seen", "#", BATADV_TQ_MAX_VALUE,
+ "Nexthop", "outgoingIF", "Potential nexthops");
for (i = 0; i < hash->size; i++) {
head = &hash->table[i];
@@ -486,14 +487,15 @@ out:
static int batadv_orig_node_add_if(struct orig_node *orig_node, int max_if_num)
{
void *data_ptr;
+ size_t data_size, old_size;
- data_ptr = kmalloc(max_if_num * sizeof(unsigned long) * NUM_WORDS,
- GFP_ATOMIC);
+ data_size = max_if_num * sizeof(unsigned long) * BATADV_NUM_WORDS;
+ old_size = (max_if_num - 1) * sizeof(unsigned long) * BATADV_NUM_WORDS;
+ data_ptr = kmalloc(data_size, GFP_ATOMIC);
if (!data_ptr)
return -ENOMEM;
- memcpy(data_ptr, orig_node->bcast_own,
- (max_if_num - 1) * sizeof(unsigned long) * NUM_WORDS);
+ memcpy(data_ptr, orig_node->bcast_own, old_size);
kfree(orig_node->bcast_own);
orig_node->bcast_own = data_ptr;
@@ -554,7 +556,7 @@ static int batadv_orig_node_del_if(struct orig_node *orig_node,
if (max_if_num == 0)
goto free_bcast_own;
- chunk_size = sizeof(unsigned long) * NUM_WORDS;
+ chunk_size = sizeof(unsigned long) * BATADV_NUM_WORDS;
data_ptr = kmalloc(max_if_num * chunk_size, GFP_ATOMIC);
if (!data_ptr)
return -ENOMEM;
diff --git a/net/batman-adv/ring_buffer.c b/net/batman-adv/ring_buffer.c
index aff1ca2..c8f61e3 100644
--- a/net/batman-adv/ring_buffer.c
+++ b/net/batman-adv/ring_buffer.c
@@ -24,7 +24,7 @@ void batadv_ring_buffer_set(uint8_t lq_recv[], uint8_t *lq_index,
uint8_t value)
{
lq_recv[*lq_index] = value;
- *lq_index = (*lq_index + 1) % TQ_GLOBAL_WINDOW_SIZE;
+ *lq_index = (*lq_index + 1) % BATADV_TQ_GLOBAL_WINDOW_SIZE;
}
uint8_t batadv_ring_buffer_avg(const uint8_t lq_recv[])
@@ -34,7 +34,7 @@ uint8_t batadv_ring_buffer_avg(const uint8_t lq_recv[])
ptr = lq_recv;
- while (i < TQ_GLOBAL_WINDOW_SIZE) {
+ while (i < BATADV_TQ_GLOBAL_WINDOW_SIZE) {
if (*ptr != 0) {
count++;
sum += *ptr;
diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c
index c8fee74..b3fd61c 100644
--- a/net/batman-adv/routing.c
+++ b/net/batman-adv/routing.c
@@ -42,6 +42,7 @@ void batadv_slide_own_bcast_window(struct hard_iface *hard_iface)
unsigned long *word;
uint32_t i;
size_t word_index;
+ uint8_t *w;
for (i = 0; i < hash->size; i++) {
head = &hash->table[i];
@@ -49,12 +50,12 @@ void batadv_slide_own_bcast_window(struct hard_iface *hard_iface)
rcu_read_lock();
hlist_for_each_entry_rcu(orig_node, node, head, hash_entry) {
spin_lock_bh(&orig_node->ogm_cnt_lock);
- word_index = hard_iface->if_num * NUM_WORDS;
+ word_index = hard_iface->if_num * BATADV_NUM_WORDS;
word = &(orig_node->bcast_own[word_index]);
batadv_bit_get_packet(bat_priv, word, 1, 0);
- orig_node->bcast_own_sum[hard_iface->if_num] =
- bitmap_weight(word, TQ_LOCAL_WINDOW_SIZE);
+ w = &orig_node->bcast_own_sum[hard_iface->if_num];
+ *w = bitmap_weight(word, BATADV_TQ_LOCAL_WINDOW_SIZE);
spin_unlock_bh(&orig_node->ogm_cnt_lock);
}
rcu_read_unlock();
@@ -160,7 +161,7 @@ void batadv_bonding_candidate_add(struct orig_node *orig_node,
goto candidate_del;
/* ... and is good enough to be considered */
- if (neigh_node->tq_avg < router->tq_avg - BONDING_TQ_THRESHOLD)
+ if (neigh_node->tq_avg < router->tq_avg - BATADV_BONDING_TQ_THRESHOLD)
goto candidate_del;
/* check if we have another candidate with the same mac address or
@@ -232,9 +233,10 @@ batadv_bonding_save_primary(const struct orig_node *orig_node,
int batadv_window_protected(struct bat_priv *bat_priv, int32_t seq_num_diff,
unsigned long *last_reset)
{
- if ((seq_num_diff <= -TQ_LOCAL_WINDOW_SIZE) ||
- (seq_num_diff >= EXPECTED_SEQNO_RANGE)) {
- if (!batadv_has_timed_out(*last_reset, RESET_PROTECTION_MS))
+ if (seq_num_diff <= -BATADV_TQ_LOCAL_WINDOW_SIZE ||
+ seq_num_diff >= BATADV_EXPECTED_SEQNO_RANGE) {
+ if (!batadv_has_timed_out(*last_reset,
+ BATADV_RESET_PROTECTION_MS))
return 1;
*last_reset = jiffies;
@@ -316,7 +318,7 @@ static int batadv_recv_my_icmp_packet(struct bat_priv *bat_priv,
memcpy(icmp_packet->dst, icmp_packet->orig, ETH_ALEN);
memcpy(icmp_packet->orig, primary_if->net_dev->dev_addr, ETH_ALEN);
icmp_packet->msg_type = ECHO_REPLY;
- icmp_packet->header.ttl = TTL;
+ icmp_packet->header.ttl = BATADV_TTL;
batadv_send_skb_packet(skb, router->if_incoming, router->addr);
ret = NET_RX_SUCCESS;
@@ -371,7 +373,7 @@ static int batadv_recv_icmp_ttl_exceeded(struct bat_priv *bat_priv,
memcpy(icmp_packet->dst, icmp_packet->orig, ETH_ALEN);
memcpy(icmp_packet->orig, primary_if->net_dev->dev_addr, ETH_ALEN);
icmp_packet->msg_type = TTL_EXCEEDED;
- icmp_packet->header.ttl = TTL;
+ icmp_packet->header.ttl = BATADV_TTL;
batadv_send_skb_packet(skb, router->if_incoming, router->addr);
ret = NET_RX_SUCCESS;
diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
index bbbc9a9..c1b2ab2 100644
--- a/net/batman-adv/soft-interface.c
+++ b/net/batman-adv/soft-interface.c
@@ -108,7 +108,7 @@ static int batadv_interface_set_mac_addr(struct net_device *dev, void *p)
if (atomic_read(&bat_priv->mesh_state) == MESH_ACTIVE) {
batadv_tt_local_remove(bat_priv, dev->dev_addr,
"mac address changed", false);
- batadv_tt_local_add(dev, addr->sa_data, NULL_IFINDEX);
+ batadv_tt_local_add(dev, addr->sa_data, BATADV_NULL_IFINDEX);
}
memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
@@ -210,7 +210,7 @@ static int batadv_interface_tx(struct sk_buff *skb,
bcast_packet = (struct bcast_packet *)skb->data;
bcast_packet->header.version = BATADV_COMPAT_VERSION;
- bcast_packet->header.ttl = TTL;
+ bcast_packet->header.ttl = BATADV_TTL;
/* batman packet type: broadcast */
bcast_packet->header.packet_type = BAT_BCAST;
@@ -394,8 +394,8 @@ struct net_device *batadv_softif_create(const char *name)
atomic_set(&bat_priv->hop_penalty, 30);
atomic_set(&bat_priv->log_level, 0);
atomic_set(&bat_priv->fragmentation, 1);
- atomic_set(&bat_priv->bcast_queue_left, BCAST_QUEUE_LEN);
- atomic_set(&bat_priv->batman_queue_left, BATMAN_QUEUE_LEN);
+ atomic_set(&bat_priv->bcast_queue_left, BATADV_BCAST_QUEUE_LEN);
+ atomic_set(&bat_priv->batman_queue_left, BATADV_BATMAN_QUEUE_LEN);
atomic_set(&bat_priv->mesh_state, MESH_INACTIVE);
atomic_set(&bat_priv->bcast_seqno, 1);
@@ -487,7 +487,7 @@ static void batadv_get_drvinfo(struct net_device *dev,
struct ethtool_drvinfo *info)
{
strcpy(info->driver, "B.A.T.M.A.N. advanced");
- strcpy(info->version, SOURCE_VERSION);
+ strcpy(info->version, BATADV_SOURCE_VERSION);
strcpy(info->fw_version, "N/A");
strcpy(info->bus_info, "batman");
}
diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
index 79cd3f7..a0487e9 100644
--- a/net/batman-adv/translation-table.c
+++ b/net/batman-adv/translation-table.c
@@ -257,7 +257,7 @@ void batadv_tt_local_add(struct net_device *soft_iface, const uint8_t *addr,
(uint8_t)atomic_read(&bat_priv->ttvn));
memcpy(tt_local_entry->common.addr, addr, ETH_ALEN);
- tt_local_entry->common.flags = NO_FLAGS;
+ tt_local_entry->common.flags = BATADV_NO_FLAGS;
if (batadv_is_wifi_iface(ifindex))
tt_local_entry->common.flags |= TT_CLIENT_WIFI;
atomic_set(&tt_local_entry->common.refcount, 2);
@@ -493,14 +493,17 @@ void batadv_tt_local_remove(struct bat_priv *bat_priv, const uint8_t *addr,
const char *message, bool roaming)
{
struct tt_local_entry *tt_local_entry = NULL;
+ uint16_t flags;
tt_local_entry = batadv_tt_local_hash_find(bat_priv, addr);
if (!tt_local_entry)
goto out;
- batadv_tt_local_set_pending(bat_priv, tt_local_entry, TT_CLIENT_DEL |
- (roaming ? TT_CLIENT_ROAM : NO_FLAGS),
- message);
+ flags = TT_CLIENT_DEL;
+ if (roaming)
+ flags |= TT_CLIENT_ROAM;
+
+ batadv_tt_local_set_pending(bat_priv, tt_local_entry, flags, message);
out:
if (tt_local_entry)
batadv_tt_local_entry_free_ref(tt_local_entry);
@@ -534,7 +537,7 @@ static void batadv_tt_local_purge(struct bat_priv *bat_priv)
continue;
if (!batadv_has_timed_out(tt_local_entry->last_seen,
- TT_LOCAL_TIMEOUT))
+ BATADV_TT_LOCAL_TIMEOUT))
continue;
batadv_tt_local_set_pending(bat_priv, tt_local_entry,
@@ -1008,12 +1011,35 @@ void batadv_tt_global_del_orig(struct bat_priv *bat_priv,
orig_node->tt_initialised = false;
}
+static void batadv_tt_global_roam_purge_list(struct bat_priv *bat_priv,
+ struct hlist_head *head)
+{
+ struct tt_common_entry *tt_common_entry;
+ struct tt_global_entry *tt_global_entry;
+ struct hlist_node *node, *node_tmp;
+
+ hlist_for_each_entry_safe(tt_common_entry, node, node_tmp, head,
+ hash_entry) {
+ tt_global_entry = container_of(tt_common_entry,
+ struct tt_global_entry, common);
+ if (!(tt_global_entry->common.flags & TT_CLIENT_ROAM))
+ continue;
+ if (!batadv_has_timed_out(tt_global_entry->roam_at,
+ BATADV_TT_CLIENT_ROAM_TIMEOUT))
+ continue;
+
+ batadv_dbg(DBG_TT, bat_priv,
+ "Deleting global tt entry (%pM): Roaming timeout\n",
+ tt_global_entry->common.addr);
+
+ hlist_del_rcu(node);
+ batadv_tt_global_entry_free_ref(tt_global_entry);
+ }
+}
+
static void batadv_tt_global_roam_purge(struct bat_priv *bat_priv)
{
struct hashtable_t *hash = bat_priv->tt_global_hash;
- struct tt_common_entry *tt_common_entry;
- struct tt_global_entry *tt_global_entry;
- struct hlist_node *node, *node_tmp;
struct hlist_head *head;
spinlock_t *list_lock; /* protects write access to the hash lists */
uint32_t i;
@@ -1023,24 +1049,7 @@ static void batadv_tt_global_roam_purge(struct bat_priv *bat_priv)
list_lock = &hash->list_locks[i];
spin_lock_bh(list_lock);
- hlist_for_each_entry_safe(tt_common_entry, node, node_tmp,
- head, hash_entry) {
- tt_global_entry = container_of(tt_common_entry,
- struct tt_global_entry,
- common);
- if (!(tt_global_entry->common.flags & TT_CLIENT_ROAM))
- continue;
- if (!batadv_has_timed_out(tt_global_entry->roam_at,
- TT_CLIENT_ROAM_TIMEOUT))
- continue;
-
- batadv_dbg(DBG_TT, bat_priv,
- "Deleting global tt entry (%pM): Roaming timeout\n",
- tt_global_entry->common.addr);
-
- hlist_del_rcu(node);
- batadv_tt_global_entry_free_ref(tt_global_entry);
- }
+ batadv_tt_global_roam_purge_list(bat_priv, head);
spin_unlock_bh(list_lock);
}
@@ -1278,7 +1287,8 @@ static void batadv_tt_req_purge(struct bat_priv *bat_priv)
spin_lock_bh(&bat_priv->tt_req_list_lock);
list_for_each_entry_safe(node, safe, &bat_priv->tt_req_list, list) {
- if (batadv_has_timed_out(node->issued_at, TT_REQUEST_TIMEOUT)) {
+ if (batadv_has_timed_out(node->issued_at,
+ BATADV_TT_REQUEST_TIMEOUT)) {
list_del(&node->list);
kfree(node);
}
@@ -1298,7 +1308,7 @@ static struct tt_req_node *batadv_new_tt_req_node(struct bat_priv *bat_priv,
list_for_each_entry(tt_req_node_tmp, &bat_priv->tt_req_list, list) {
if (batadv_compare_eth(tt_req_node_tmp, orig_node) &&
!batadv_has_timed_out(tt_req_node_tmp->issued_at,
- TT_REQUEST_TIMEOUT))
+ BATADV_TT_REQUEST_TIMEOUT))
goto unlock;
}
@@ -1391,7 +1401,7 @@ batadv_tt_response_fill_table(uint16_t tt_len, uint8_t ttvn,
memcpy(tt_change->addr, tt_common_entry->addr,
ETH_ALEN);
- tt_change->flags = NO_FLAGS;
+ tt_change->flags = BATADV_NO_FLAGS;
tt_count++;
tt_change++;
@@ -1444,7 +1454,7 @@ static int batadv_send_tt_request(struct bat_priv *bat_priv,
tt_request->header.version = BATADV_COMPAT_VERSION;
memcpy(tt_request->src, primary_if->net_dev->dev_addr, ETH_ALEN);
memcpy(tt_request->dst, dst_orig_node->orig, ETH_ALEN);
- tt_request->header.ttl = TTL;
+ tt_request->header.ttl = BATADV_TTL;
tt_request->ttvn = ttvn;
tt_request->tt_data = htons(tt_crc);
tt_request->flags = TT_REQUEST;
@@ -1576,7 +1586,7 @@ static bool batadv_send_other_tt_response(struct bat_priv *bat_priv,
tt_response->header.packet_type = BAT_TT_QUERY;
tt_response->header.version = BATADV_COMPAT_VERSION;
- tt_response->header.ttl = TTL;
+ tt_response->header.ttl = BATADV_TTL;
memcpy(tt_response->src, req_dst_orig_node->orig, ETH_ALEN);
memcpy(tt_response->dst, tt_request->src, ETH_ALEN);
tt_response->flags = TT_RESPONSE;
@@ -1697,7 +1707,7 @@ static bool batadv_send_my_tt_response(struct bat_priv *bat_priv,
tt_response->header.packet_type = BAT_TT_QUERY;
tt_response->header.version = BATADV_COMPAT_VERSION;
- tt_response->header.ttl = TTL;
+ tt_response->header.ttl = BATADV_TTL;
memcpy(tt_response->src, primary_if->net_dev->dev_addr, ETH_ALEN);
memcpy(tt_response->dst, tt_request->src, ETH_ALEN);
tt_response->flags = TT_RESPONSE;
@@ -1925,7 +1935,8 @@ static void batadv_tt_roam_purge(struct bat_priv *bat_priv)
spin_lock_bh(&bat_priv->tt_roam_list_lock);
list_for_each_entry_safe(node, safe, &bat_priv->tt_roam_list, list) {
- if (!batadv_has_timed_out(node->first_time, ROAMING_MAX_TIME))
+ if (!batadv_has_timed_out(node->first_time,
+ BATADV_ROAMING_MAX_TIME))
continue;
list_del(&node->list);
@@ -1955,7 +1966,7 @@ static bool batadv_tt_check_roam_count(struct bat_priv *bat_priv,
continue;
if (batadv_has_timed_out(tt_roam_node->first_time,
- ROAMING_MAX_TIME))
+ BATADV_ROAMING_MAX_TIME))
continue;
if (!batadv_atomic_dec_not_zero(&tt_roam_node->counter))
@@ -1971,7 +1982,8 @@ static bool batadv_tt_check_roam_count(struct bat_priv *bat_priv,
goto unlock;
tt_roam_node->first_time = jiffies;
- atomic_set(&tt_roam_node->counter, ROAMING_MAX_COUNT - 1);
+ atomic_set(&tt_roam_node->counter,
+ BATADV_ROAMING_MAX_COUNT - 1);
memcpy(tt_roam_node->addr, client, ETH_ALEN);
list_add(&tt_roam_node->list, &bat_priv->tt_roam_list);
@@ -2009,7 +2021,7 @@ static void batadv_send_roam_adv(struct bat_priv *bat_priv, uint8_t *client,
roam_adv_packet->header.packet_type = BAT_ROAM_ADV;
roam_adv_packet->header.version = BATADV_COMPAT_VERSION;
- roam_adv_packet->header.ttl = TTL;
+ roam_adv_packet->header.ttl = BATADV_TTL;
primary_if = batadv_primary_if_get_selected(bat_priv);
if (!primary_if)
goto out;
@@ -2170,7 +2182,7 @@ static int batadv_tt_commit_changes(struct bat_priv *bat_priv,
bat_priv->tt_poss_change = false;
/* reset the sending counter */
- atomic_set(&bat_priv->tt_ogm_append_cnt, TT_OGM_APPEND_MAX);
+ atomic_set(&bat_priv->tt_ogm_append_cnt, BATADV_TT_OGM_APPEND_MAX);
return batadv_tt_changes_fill_buff(bat_priv, packet_buff,
packet_buff_len, packet_min_len);
@@ -2248,7 +2260,8 @@ void batadv_tt_update_orig(struct bat_priv *bat_priv,
if ((!orig_node->tt_initialised && ttvn == 1) ||
ttvn - orig_ttvn == 1) {
/* the OGM could not contain the changes due to their size or
- * because they have already been sent TT_OGM_APPEND_MAX times.
+ * because they have already been sent BATADV_TT_OGM_APPEND_MAX
+ * times.
* In this case send a tt request
*/
if (!tt_num_changes) {
diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h
index 1d5d21e..fd538ea 100644
--- a/net/batman-adv/types.h
+++ b/net/batman-adv/types.h
@@ -85,7 +85,7 @@ struct orig_node {
bool tt_poss_change;
uint32_t last_real_seqno;
uint8_t last_ttl;
- DECLARE_BITMAP(bcast_bits, TQ_LOCAL_WINDOW_SIZE);
+ DECLARE_BITMAP(bcast_bits, BATADV_TQ_LOCAL_WINDOW_SIZE);
uint32_t last_bcast_seqno;
struct hlist_head neigh_list;
struct list_head frag_list;
@@ -121,13 +121,13 @@ struct neigh_node {
struct hlist_node list;
uint8_t addr[ETH_ALEN];
uint8_t real_packet_count;
- uint8_t tq_recv[TQ_GLOBAL_WINDOW_SIZE];
+ uint8_t tq_recv[BATADV_TQ_GLOBAL_WINDOW_SIZE];
uint8_t tq_index;
uint8_t tq_avg;
uint8_t last_ttl;
struct list_head bonding_list;
unsigned long last_seen;
- DECLARE_BITMAP(real_bits, TQ_LOCAL_WINDOW_SIZE);
+ DECLARE_BITMAP(real_bits, BATADV_TQ_LOCAL_WINDOW_SIZE);
atomic_t refcount;
struct rcu_head rcu;
struct orig_node *orig_node;
@@ -209,7 +209,7 @@ struct bat_priv {
struct list_head tt_roam_list;
struct hashtable_t *vis_hash;
#ifdef CONFIG_BATMAN_ADV_BLA
- struct bcast_duplist_entry bcast_duplist[DUPLIST_SIZE];
+ struct bcast_duplist_entry bcast_duplist[BATADV_DUPLIST_SIZE];
int bcast_duplist_curr;
struct bla_claim_dst claim_dest;
#endif
@@ -348,7 +348,7 @@ struct if_list_entry {
};
struct debug_log {
- char log_buff[LOG_BUF_LEN];
+ char log_buff[BATADV_LOG_BUF_LEN];
unsigned long log_start;
unsigned long log_end;
spinlock_t lock; /* protects log_buff, log_start and log_end */
diff --git a/net/batman-adv/unicast.c b/net/batman-adv/unicast.c
index 8098320..8454d91 100644
--- a/net/batman-adv/unicast.c
+++ b/net/batman-adv/unicast.c
@@ -323,7 +323,7 @@ find_router:
/* batman packet type: unicast */
unicast_packet->header.packet_type = BAT_UNICAST;
/* set unicast ttl */
- unicast_packet->header.ttl = TTL;
+ unicast_packet->header.ttl = BATADV_TTL;
/* copy the destination for faster routing */
memcpy(unicast_packet->dest, orig_node->orig, ETH_ALEN);
/* set the destination tt version number */
diff --git a/net/batman-adv/vis.c b/net/batman-adv/vis.c
index a439ed6..7418169 100644
--- a/net/batman-adv/vis.c
+++ b/net/batman-adv/vis.c
@@ -575,7 +575,7 @@ static int batadv_generate_vis_packet(struct bat_priv *bat_priv)
packet->vis_type = atomic_read(&bat_priv->vis_mode);
memcpy(packet->target_orig, batadv_broadcast_addr, ETH_ALEN);
- packet->header.ttl = TTL;
+ packet->header.ttl = BATADV_TTL;
packet->seqno = htonl(ntohl(packet->seqno) + 1);
packet->entries = 0;
skb_trim(info->skb_packet, sizeof(*packet));
@@ -841,6 +841,7 @@ int batadv_vis_init(struct bat_priv *bat_priv)
struct vis_packet *packet;
int hash_added;
unsigned int len;
+ unsigned long first_seen;
if (bat_priv->vis_hash)
return 0;
@@ -867,15 +868,15 @@ int batadv_vis_init(struct bat_priv *bat_priv)
sizeof(*packet));
/* prefill the vis info */
- bat_priv->my_vis_info->first_seen = jiffies -
- msecs_to_jiffies(VIS_INTERVAL);
+ first_seen = jiffies - msecs_to_jiffies(BATADV_VIS_INTERVAL);
+ bat_priv->my_vis_info->first_seen = first_seen;
INIT_LIST_HEAD(&bat_priv->my_vis_info->recv_list);
INIT_LIST_HEAD(&bat_priv->my_vis_info->send_list);
kref_init(&bat_priv->my_vis_info->refcount);
bat_priv->my_vis_info->bat_priv = bat_priv;
packet->header.version = BATADV_COMPAT_VERSION;
packet->header.packet_type = BAT_VIS;
- packet->header.ttl = TTL;
+ packet->header.ttl = BATADV_TTL;
packet->seqno = 0;
packet->entries = 0;
@@ -936,5 +937,5 @@ static void batadv_start_vis_timer(struct bat_priv *bat_priv)
{
INIT_DELAYED_WORK(&bat_priv->vis_work, batadv_send_vis_packets);
queue_delayed_work(batadv_event_workqueue, &bat_priv->vis_work,
- msecs_to_jiffies(VIS_INTERVAL));
+ msecs_to_jiffies(BATADV_VIS_INTERVAL));
}
--
1.7.9.4
^ permalink raw reply related
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