linux/net
Anton Vorontsov e84af6ddef skbuff: Do not allow skb recycling with disabled IRQs
NAPI drivers try to recycle SKBs in their polling routine, but we
generally don't know the context in which the polling will be called,
and the skb recycling itself may require IRQs to be enabled.

This patch adds irqs_disabled() test to the skb_recycle_check()
routine, so that we'll not let the drivers hit the skb recycling
path with IRQs disabled.

As a side effect, this patch actually disables skb recycling for some
[broken] drivers. E.g. gianfar driver grabs an irqsave spinlock during
TX ring processing, and then tries to recycle an skb, and that caused
the following badness:

nf_conntrack version 0.5.0 (1008 buckets, 4032 max)
------------[ cut here ]------------
Badness at kernel/softirq.c:143
NIP: c003e3c4 LR: c423a528 CTR: c003e344
...
NIP [c003e3c4] local_bh_enable+0x80/0xc4
LR [c423a528] destroy_conntrack+0xd4/0x13c [nf_conntrack]
Call Trace:
[c15d1b60] [c003e32c] local_bh_disable+0x1c/0x34 (unreliable)
[c15d1b70] [c423a528] destroy_conntrack+0xd4/0x13c [nf_conntrack]
[c15d1b80] [c02c6370] nf_conntrack_destroy+0x3c/0x70

Signed-off-by: David S. Miller <davem@davemloft.net>
2009-11-11 19:03:28 -08:00
..
9p virtio: add virtio IDs file 2009-09-23 22:26:32 +09:30
802 net: remove COMPAT_NET_DEV_OPS 2009-05-25 01:53:53 -07:00
8021q vlan: eliminate use of dev_base_lock 2009-11-10 22:26:30 -08:00
appletalk net/appletalk: using compat_ptr needs inclusion of linux/compat.h 2009-11-08 20:41:03 -08:00
atm net: pass kern to net_proto_family create function 2009-11-05 22:18:14 -08:00
ax25 net: pass kern to net_proto_family create function 2009-11-05 22:18:14 -08:00
bluetooth net: check kern before calling security subsystem 2009-11-05 22:18:18 -08:00
bridge Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2009-11-06 00:55:55 -08:00
can CAN: use dev_get_by_index_rcu 2009-11-10 22:27:13 -08:00
core skbuff: Do not allow skb recycling with disabled IRQs 2009-11-11 19:03:28 -08:00
dcb net: fix double skb free in dcbnl 2009-09-26 20:16:15 -07:00
dccp net: drop capability from protocol definitions 2009-11-05 21:40:17 -08:00
decnet decnet: use RCU to find network devices 2009-11-10 22:26:31 -08:00
dsa netdev: convert pseudo-devices to netdev_tx_t 2009-09-01 01:13:07 -07:00
econet net: pass kern to net_proto_family create function 2009-11-05 22:18:14 -08:00
ethernet net: remove COMPAT_NET_DEV_OPS 2009-05-25 01:53:53 -07:00
ieee802154 Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/lowpan/lowpan 2009-11-06 17:57:51 -08:00
ipv4 IPV4: use rcu to walk list of devices in IGMP 2009-11-10 22:27:12 -08:00
ipv6 ipv6: Remove unused var in inet6_dump_ifinfo() 2009-11-11 18:53:00 -08:00
ipx net/ipx: push down BKL into a ipx_dgram_ops 2009-11-07 00:46:39 -08:00
irda net/irda: push BKL into proto_ops 2009-11-07 00:46:39 -08:00
iucv net: pass kern to net_proto_family create function 2009-11-05 22:18:14 -08:00
key net: pass kern to net_proto_family create function 2009-11-05 22:18:14 -08:00
lapb net: remove NET_RX_BAD and NET_RX_CN* defines 2009-07-05 19:15:35 -07:00
llc net: pass kern to net_proto_family create function 2009-11-05 22:18:14 -08:00
mac80211 Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6 2009-11-09 11:17:24 -08:00
netfilter Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2009-11-08 23:00:54 -08:00
netlabel netlabel: remove dev_put() calls 2009-11-05 22:34:18 -08:00
netlink net: netlink_getname, packet_getname -- use DECLARE_SOCKADDR guard 2009-11-10 20:54:41 -08:00
netrom net: pass kern to net_proto_family create function 2009-11-05 22:18:14 -08:00
packet net: netlink_getname, packet_getname -- use DECLARE_SOCKADDR guard 2009-11-10 20:54:41 -08:00
phonet Phonet: allocate and copy for pipe TX without sock lock 2009-11-10 20:54:34 -08:00
rds net: pass kern to net_proto_family create function 2009-11-05 22:18:14 -08:00
rfkill headers: remove sched.h from poll.h 2009-10-04 15:05:10 -07:00
rose Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2009-11-06 00:55:55 -08:00
rxrpc net: pass kern to net_proto_family create function 2009-11-05 22:18:14 -08:00
sched net: use rcu for network scheduler API 2009-11-10 22:26:30 -08:00
sctp sctp: ipv6: avoid touching device refcount 2009-11-05 22:34:21 -08:00
sunrpc Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2009-11-06 00:55:55 -08:00
tipc net: pass kern to net_proto_family create function 2009-11-05 22:18:14 -08:00
unix net: netlink_getname, packet_getname -- use DECLARE_SOCKADDR guard 2009-11-10 20:54:41 -08:00
wanrouter headers: smp_lock.h redux 2009-07-12 12:22:34 -07:00
wimax wimax: allow WIMAX_RF_QUERY calls when state is still uninitialized 2009-10-19 15:56:14 +09:00
wireless Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6 2009-11-09 11:17:24 -08:00
x25 net/x25: push BKL usage into x25_proto 2009-11-07 00:46:40 -08:00
xfrm xfrm: SAD entries do not expire correctly after suspend-resume 2009-11-08 20:58:41 -08:00
compat.c net: Cleanup redundant tests on unsigned 2009-10-29 01:39:54 -07:00
Kconfig net/compat/wext: send different messages to compat tasks 2009-07-15 08:53:39 -07:00
Makefile net: remove redundant sched/ in net/Makefile 2009-07-12 20:11:14 -07:00
nonet.c
socket.c net/compat_ioctl: support SIOCWANDEV 2009-11-08 20:57:03 -08:00
sysctl_net.c net: sysctl_net - use net_eq to compare nets 2009-03-16 16:23:30 +01:00
TUNABLE