ip: Fix ip_dev_loopback_xmit()
Eric Paris got following trace with a linux-next kernel
[ 14.203970] BUG: using smp_processor_id() in preemptible [
00000000]
code: avahi-daemon/2093
[ 14.204025] caller is netif_rx+0xfa/0x110
[ 14.204035] Call Trace:
[ 14.204064] [<
ffffffff81278fe5>] debug_smp_processor_id+0x105/0x110
[ 14.204070] [<
ffffffff8142163a>] netif_rx+0xfa/0x110
[ 14.204090] [<
ffffffff8145b631>] ip_dev_loopback_xmit+0x71/0xa0
[ 14.204095] [<
ffffffff8145b892>] ip_mc_output+0x192/0x2c0
[ 14.204099] [<
ffffffff8145d610>] ip_local_out+0x20/0x30
[ 14.204105] [<
ffffffff8145d8ad>] ip_push_pending_frames+0x28d/0x3d0
[ 14.204119] [<
ffffffff8147f1cc>] udp_push_pending_frames+0x14c/0x400
[ 14.204125] [<
ffffffff814803fc>] udp_sendmsg+0x39c/0x790
[ 14.204137] [<
ffffffff814891d5>] inet_sendmsg+0x45/0x80
[ 14.204149] [<
ffffffff8140af91>] sock_sendmsg+0xf1/0x110
[ 14.204189] [<
ffffffff8140dc6c>] sys_sendmsg+0x20c/0x380
[ 14.204233] [<
ffffffff8100ad82>] system_call_fastpath+0x16/0x1b
While current linux-2.6 kernel doesnt emit this warning, bug is latent
and might cause unexpected failures.
ip_dev_loopback_xmit() runs in process context, preemption enabled, so
must call netif_rx_ni() instead of netif_rx(), to make sure that we
process pending software interrupt.
Same change for ip6_dev_loopback_xmit()
Reported-by: Eric Paris <eparis@redhat.com>
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>