tcp_ack of sent skb's

Philip Gladstone (
Wed, 09 Jul 1997 18:41:22 -0400

The code in tcp_ack will unlink and free any ack'ed skbs. If
this skb is current in the queue for a driver, then this
removes it from that queue. However, a couple of drivers
(pi2 and pt) have internal transmit queues. For these drivers
it would seem that this would cause a significant problem.

What appears to happen is that the kfree_skb gets called
which doesn't free the skb as it is locked. However, the
pointer to the skb is lost (forever), and so it never frees.

The alternative would seem to be to explicitly unlock the
skb just after putting it on the driver internal queue, and then
relock it at dequeue time. This would mean (I think) that the
tcp_ack code would take the skb off the driver internal queue.

Am I making sense?


Philip Gladstone                           +1 617 487 7700
Raptor Systems, Waltham, MA