diff options
Diffstat (limited to 'drivers/net/8390.c')
-rw-r--r-- | drivers/net/8390.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/net/8390.c b/drivers/net/8390.c index f87027420081..86be96af9c8f 100644 --- a/drivers/net/8390.c +++ b/drivers/net/8390.c | |||
@@ -275,12 +275,14 @@ static int ei_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
275 | struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev); | 275 | struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev); |
276 | int send_length = skb->len, output_page; | 276 | int send_length = skb->len, output_page; |
277 | unsigned long flags; | 277 | unsigned long flags; |
278 | char buf[ETH_ZLEN]; | ||
279 | char *data = skb->data; | ||
278 | 280 | ||
279 | if (skb->len < ETH_ZLEN) { | 281 | if (skb->len < ETH_ZLEN) { |
280 | skb = skb_padto(skb, ETH_ZLEN); | 282 | memset(buf, 0, ETH_ZLEN); /* more efficient than doing just the needed bits */ |
281 | if (skb == NULL) | 283 | memcpy(buf, data, skb->len); |
282 | return 0; | ||
283 | send_length = ETH_ZLEN; | 284 | send_length = ETH_ZLEN; |
285 | data = buf; | ||
284 | } | 286 | } |
285 | 287 | ||
286 | /* Mask interrupts from the ethercard. | 288 | /* Mask interrupts from the ethercard. |
@@ -347,7 +349,7 @@ static int ei_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
347 | * trigger the send later, upon receiving a Tx done interrupt. | 349 | * trigger the send later, upon receiving a Tx done interrupt. |
348 | */ | 350 | */ |
349 | 351 | ||
350 | ei_block_output(dev, send_length, skb->data, output_page); | 352 | ei_block_output(dev, send_length, data, output_page); |
351 | 353 | ||
352 | if (! ei_local->txing) | 354 | if (! ei_local->txing) |
353 | { | 355 | { |