On Tue, 2008-07-15 at 02:28 -0700, David Miller wrote: > From: Johannes Berg <johannes@xxxxxxxxxxxxxxxx> > Date: Tue, 15 Jul 2008 11:25:23 +0200 > > > > It seems to me that a simple synchronize_net() call near the end of > > > agg queue removal would solve your problem as-is, wouldn't it? > > > > Well, as far as I can tell we can't do that there because it's in > > tasklet context/called under spinlocks so it has to be atomic. I think. > > Right, my bad. Also, I don't actually think it is sufficient since select_queue isn't called under rcu lock, so even if we synchronize_net() somewhere there we can still end up not having waited long enough, no? > It seems that there can end up being holes in the queue > space on mac80211, which slightly complicates matters. Yes, but why does it complicate matters? From mac80211's POV it's just that select_queue must have known about the removed queue when the requeue is done. And we can defer the requeue to a workqueue. johannes
Attachment:
signature.asc
Description: This is a digitally signed message part