Ok, I've dug into it a bit more. The root bits here were more exposed from the ifnet changes that were made, but the TL;DR is that if the driver starts to transmit the frame and fails, we can't return an error. We have to free the buffer ourselves.
So for ath, and maybe iwn too, we can't return an error if we decide to start encapsulating the frame. That's the point where the mbuf may change. For something like "interface is down", "queue depth is too large", etc then we can do it. So for ath, I think I have to pick a point in the output path where we won't return the mbuf. It's likely once we call ath_tx_start() then we should consume the mbuf and return no-error. Now, the bug bug here is that ath_tx_start() actually does free the mbuf, and we .. then return failure codes. We should return OK, and consume the node reference. I'll sleep on it and see :) -adrian _______________________________________________ freebsd-wireless@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-wireless To unsubscribe, send any mail to "freebsd-wireless-unsubscr...@freebsd.org"