Messages in this thread Patch in this message | | | Date | Tue, 13 Oct 2009 12:19:51 +0200 | From | Eric Dumazet <> | Subject | Re: [Bug #14378] Problems with net/core/skbuff.c |
| |
Massimo Cetra a écrit : > David Miller ha scritto: >> From: "Rafael J. Wysocki" <rjw@sisk.pl> >> Date: Mon, 12 Oct 2009 00:22:04 +0200 (CEST) >> >> >>> Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14378 >>> Subject : Problems with net/core/skbuff.c >>> Submitter : Massimo Cetra <mcetra@navynet.it> >>> Date : 2009-10-08 14:51 (4 days old) >>> References : http://marc.info/?l=linux-kernel&m=125501488220358&w=4 >>> >> >> I don't know what to do about this one. >> >> The user indicates that they have the vserver patches applied, >> so maybe there is some interaction with that stuff. >> > Actually i found another oops which is very similar to the previous one. > Here, vserver is not involved, and the problem starts at drbd which > lives in kernel space (the other oops started at ocfs2). > > Both ocfs2 and drbd make heavy use of network I/O so i guess the problem > is something in the network layer. > > Anything i can do to help to debugging and solving this issue ? > > Thanks > Max >
Problem is kfree_skb() is called from irq context, wich is not allowed.
static void skb_release_head_state(struct sk_buff *skb) { ... if (skb->destructor) { WARN_ON(in_irq()); skb->destructor(); } ... }
virtio_net start_xmit() function calls free_old_xmit_skbs() and free_old_xmit_skbs() ultimately calls kfree_skb()
Quick fix would be to use dev_kfree_skb_any() instead, because netpoll can definitly calls start_xmit() with irq disabled.
Could you please following patch ?
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 8d00976..54bf091 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -454,7 +454,7 @@ static unsigned int free_old_xmit_skbs(struct virtnet_info *vi) vi->dev->stats.tx_bytes += skb->len; vi->dev->stats.tx_packets++; tot_sgs += skb_vnet_hdr(skb)->num_sg; - kfree_skb(skb); + dev_kfree_skb_any(skb); } return tot_sgs; }
-- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |