2000-11-28 18:38:39

by Eli Carter

[permalink] [raw]
Subject: [PATCH] lance.c - dev_kfree_skb() then reference skb->len

--- lance.c.2.2.17 Mon Nov 13 12:13:11 2000
+++ lance.c Tue Nov 28 11:46:16 2000
@@ -926,6 +926,8 @@

lp->tx_ring[entry].misc = 0x0000;

+ lp->stats.tx_bytes += skb->len;
+
/* If any part of this buffer is >16M we must copy it to a low-memory
buffer. */
if ((u32)virt_to_bus(skb->data) + skb->len > 0x01000000) {
@@ -941,7 +943,6 @@
lp->tx_ring[entry].base = ((u32)virt_to_bus(skb->data) & 0xffffff) | 0x83000000;
}
lp->cur_tx++;
- lp->stats.tx_bytes += skb->len;

/* Trigger an immediate send poll. */
outw(0x0000, ioaddr+LANCE_ADDR);


Attachments:
lance.c.diff (561.00 B)

2000-11-28 21:09:22

by Donald Becker

[permalink] [raw]
Subject: Re: [PATCH] lance.c - dev_kfree_skb() then reference skb->len

On Tue, 28 Nov 2000, Eli Carter wrote:

> Patch is against 2.2.17, drivers/net/lance.c.
> I believe this to be "obviously correct," but please correct me if I'm
> wrong.
> This moves a reference to skb->len to before the possible
> dev_kfree_skb(skb) call. Though it appears to work as is, I suspect it
> is incorrect.

This patch looks reasonable.

Perhaps it would be better to have the driver retain the skbuff until the
transmit succeeds, and only then add the length to the stats. But this
specific bug is related the ISA bounce buffer code. Any ISA card is in
the "legacy" category, so it's better to make minimal change needed to
correct the obvious potential problem.



Donald Becker [email protected]
Scyld Computing Corporation http://www.scyld.com
410 Severn Ave. Suite 210 Second Generation Beowulf Clusters
Annapolis MD 21403 410-990-9993