On Thu, 2012-11-29 at 13:43 +0100, Krzysztof Mazur wrote: > > Removing packets from tx_queue is not needed. We can transmit packets > also after close. We just can't call vcc->pop() after close, > so we can just set SKB_CB(skb)->vcc of such packets to NULL so > fpga_tx() won't call vcc->pop().
Your patch doesn't do that, does it? You'd want something like if (card->tx_skb[port] && SKB_CB(card->tx_skb[port]->vcc) == vcc) SKB_CB(card->tx_skb[port]->vcc) = NULL; Under card->tx_lock should suffice. And do we just *not* call the ->pop() on that skb ever? And hope that it doesn't screw up some other state somewhere? Like if we're doing MLPPP and I've implemented BQL for PPP... we might never call ppp_completed_queue() for that skb, so even though this *channel* is going away, it might still contribute towards the perceived queue on the overall PPP netdev? Failing to call ->pop() could cause memory leaks and other issues; I don't think it's reasonable. I think we *have* to wait for card->tx_skb[port] if it's for the VCC we're closing. -- dwmw2
smime.p7s
Description: S/MIME cryptographic signature