Johannes Berg 97f97b1f5f mac80211: fix station destruction in AP/mesh modes
Unfortunately, commit b22cfcfcae5b, intended to speed up roaming
by avoiding the synchronize_rcu() broke AP/mesh modes as it moved
some code into that work item that will still call into the driver
at a time where it's no longer expected to handle this: after the
AP or mesh has been stopped.

To fix this problem remove the per-station work struct, maintain a
station cleanup list instead and flush this list when stations are
flushed. To keep this patch smaller for stable, do this when the
stations are flushed (sta_info_flush()). This unfortunately brings
back the original roaming delay; I'll fix that again in a separate
patch.

Also, Ben reported that the original commit could sometimes (with
many interfaces) cause long delays when an interface is set down,
due to blocking on flush_workqueue(). Since we now maintain the
cleanup list, this particular change of the original patch can be
reverted.

Cc: stable@vger.kernel.org [3.7]
Reported-by: Ben Greear <greearb@candelatech.com>
Tested-by: Ben Greear <greearb@candelatech.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
2013-01-03 12:59:59 +01:00
..
2011-07-08 11:11:24 -04:00
2011-07-08 11:11:24 -04:00
2011-07-08 11:11:20 -04:00
2013-01-03 12:59:58 +01:00
2012-06-24 11:33:18 +02:00
2009-07-10 15:01:49 -04:00
2013-01-03 12:59:57 +01:00
2012-12-05 09:44:41 +01:00
2012-10-17 11:02:14 +02:00
2012-12-10 21:24:02 +01:00
2011-03-31 11:26:23 -03:00
2013-01-03 12:59:57 +01:00
2012-06-22 11:26:58 +02:00
2012-06-24 11:33:18 +02:00
2012-10-17 11:02:14 +02:00
2012-03-13 14:54:16 -04:00
2012-11-26 11:36:02 +01:00
2012-06-20 17:35:22 +02:00
2012-12-05 09:44:41 +01:00