On Wed, 2008-05-07 at 15:10 +0800, Herbert Xu wrote: > On Wed, Apr 30, 2008 at 02:40:58PM +0200, Johannes Berg wrote: > > This patch makes mac80211 use the GSO infrastructure for segmentation, > > but not really all of it because we do not register a protocol handler > > (nor can do that easily since a lot of functions need to be done before > > segmentation and another bunch afterwards, and we need to keep rcu- > > protected structures for both.) > > Your idea of using skb_segment to remove duplicate code is great. > > However, using skb->gso_skb for the push-back doesn't work. For > example, what is going to happen when I enable software GSO on a > wireless device and then send a real GSO packet to it where each > GSO fragment also required wireless fragmentation? Good point. Somehow I thought this couldn't happen but of course it can since we don't do hw GSO. > I suggest that you just use skb_segment for the actual fragmentation > but keep the original infrastructure for handling the fragments. But I want to get rid of that much more than I want to get rid of the fragmentation code :/ Also, if I need to keep that code, I will absolutely not use skb_segment either as it's more efficient to just trim the existing skb to make the first segment out of it (like the code does now) rather than reallocate that too. However, I'm sure it's buggy under certain circumstances we never understood (as indicated by a WARN_ON triggering that shouldn't and lots of reports about that) and I don't like the extra tasklet. I guess I could remove it and copy the existing code into the wireless qdisc, but that would be weird. But you're right, it doesn't work this way. I'll have to think of something. Maybe I can rip out all the retry logic and just store an skb myself (like dev->gso_skb) and return NETDEV_TX_BUSY when I used that one and the queue got full because of it. That'll requeue a lot when non-gso skbs are coming in, but mind you this is not a common case, most of the time fragmentation will not be enabled and even when it is device queues should be long enough. johannes
Attachment:
signature.asc
Description: This is a digitally signed message part