mac80211: recalculate SW ROC only when needed
authorJohannes Berg <johannes.berg@intel.com>
Tue, 8 Dec 2015 12:16:41 +0000 (13:16 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 14 Jan 2016 10:10:09 +0000 (11:10 +0100)
commite9db45578706e216d9bb0fb5f459b137da54be63
treee452f456c0f86cfbd7e009e5bc29f1a26fd87fde
parent701a0fd5231866db08cebcd502894699f49cb960
mac80211: recalculate SW ROC only when needed

The current (new) code recalculates the new work timeout
for software remain-on-channel whenever any item started.
In two of the callers of ieee80211_handle_roc_started(),
this is completely pointless since they're for hardware
and will skip the recalculation entirely; it's necessary
only in the case of having just added a new item to the
list, as in the last remaining case the recalculation had
just been done.

This last case, however, is also problematic - if one of
the items on the list actually expires during the recalc
the list iteration outside becomes corrupted and crashes.

Fix this by moving the recalculation to the only place
where it's required.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/offchannel.c