From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gerrit Renker Subject: [SC92031] [BUG-FIX] [Patch 1/1]: Revert use of skb_padto Date: Fri, 2 May 2008 21:29:40 +0100 Message-ID: <20080502202940.GA5116@gerrit.erg.abdn.ac.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: shemminger@vyatta.com To: davem@davemloft.net, netdev@vger.kernel.org Return-path: Received: from dee.erg.abdn.ac.uk ([139.133.204.82]:42137 "EHLO erg.abdn.ac.uk" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1758763AbYEBUaB (ORCPT ); Fri, 2 May 2008 16:30:01 -0400 Content-Disposition: inline Sender: netdev-owner@vger.kernel.org List-ID: [SC92031]: Revert use of skb_padto (does not update skb->len) This reverts use of skb_padto() introduced in commit 26a17b7bbb36a8552d531bc1ad08472fb5aa3007 Date: Wed Apr 2 10:11:11 2008 -0700 sc92031: start transmit return value bugfix The padto does not work because the driver code evaluates `len' later on and there are cases where skb->len is not updated accordingly. This was observed with ARP frames (skb->len = 42 bytes, !skb_cloned(), skb_tailroom = 84 bytes). Then in skb_pad(), the first condition is true, where skb->len is not updated. As a consequence, the driver uses 42 bytes instead of the 60 bytes, and the ARP frame never makes it onto the wire. Signed-off-by: Gerrit Renker --- sc92031.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) --- a/drivers/net/sc92031.c +++ b/drivers/net/sc92031.c @@ -953,9 +953,6 @@ static int sc92031_start_xmit(struct sk_buff *skb, struct net_device *dev) unsigned entry; u32 tx_status; - if (skb_padto(skb, ETH_ZLEN)) - return NETDEV_TX_OK; - if (unlikely(skb->len > TX_BUF_SIZE)) { dev->stats.tx_dropped++; goto out; @@ -975,6 +972,11 @@ static int sc92031_start_xmit(struct sk_buff *skb, struct net_device *dev) skb_copy_and_csum_dev(skb, priv->tx_bufs + entry * TX_BUF_SIZE); len = skb->len; + if (unlikely(len < ETH_ZLEN)) { + memset(priv->tx_bufs + entry * TX_BUF_SIZE + len, + 0, ETH_ZLEN - len); + len = ETH_ZLEN; + } wmb(); The University of Aberdeen is a charity registered in Scotland, No SC013683.