Message ID | 1326121920.2407.6.camel@edumazet-HP-Compaq-6005-Pro-SFF-PC |
---|---|
State | RFC, archived |
Delegated to: | David Miller |
Headers | show |
From: netdev-owner@vger.kernel.org [mailto:netdev- owner@vger.kernel.org] On Behalf Of Eric Dumazet Sent: Monday, January 09, 2012 16:12 >> + >> + /* Hold sock reference for processing TX time stamps */ >> + if (unlikely(do_tstamp)) { >> + struct sock *sk = skb->sk; > >Not clear to me why sk_refcnt could be 0 here Well, I have tried to make a similar solution as outlined in commit da92b194cc36b5dc1fbd85206aeeffd80bee0c39. >I would rather do something like : > >diff --git a/drivers/net/ethernet/freescale/gianfar.c >b/drivers/net/ethernet/freescale/gianfar.c >index e01cdaa..8e00461 100644 >--- a/drivers/net/ethernet/freescale/gianfar.c >+++ b/drivers/net/ethernet/freescale/gianfar.c >@@ -2086,6 +2086,8 @@ static int gfar_start_xmit(struct sk_buff *skb, struct >net_device *dev) > kfree_skb(skb); > return NETDEV_TX_OK; > } >+ swap(skb_new->sk, skb->sk); >+ swap(skb_new->destructor, skb->destructor); > kfree_skb(skb); > skb = skb_new; > } I guess this should also work, so I will come up with a new version.
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c index e01cdaa..8e00461 100644 --- a/drivers/net/ethernet/freescale/gianfar.c +++ b/drivers/net/ethernet/freescale/gianfar.c @@ -2086,6 +2086,8 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev) kfree_skb(skb); return NETDEV_TX_OK; } + swap(skb_new->sk, skb->sk); + swap(skb_new->destructor, skb->destructor); kfree_skb(skb); skb = skb_new; }