mac80211: Fix ROC duration == 0 handling
In case the given ROC duration is 0, update it to a minimal value before setting the ieee80211_roc_work parameters, so it also would be valid for cases where scan is in progress or there are other ROCs queued. Signed-off-by: Ilan Peer <ilan.peer@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
1693d34416
commit
2fae062e50
|
@ -2628,6 +2628,18 @@ static int ieee80211_start_roc_work(struct ieee80211_local *local,
|
|||
if (!roc)
|
||||
return -ENOMEM;
|
||||
|
||||
/*
|
||||
* If the duration is zero, then the driver
|
||||
* wouldn't actually do anything. Set it to
|
||||
* 10 for now.
|
||||
*
|
||||
* TODO: cancel the off-channel operation
|
||||
* when we get the SKB's TX status and
|
||||
* the wait time was zero before.
|
||||
*/
|
||||
if (!duration)
|
||||
duration = 10;
|
||||
|
||||
roc->chan = channel;
|
||||
roc->duration = duration;
|
||||
roc->req_duration = duration;
|
||||
|
@ -2651,18 +2663,6 @@ static int ieee80211_start_roc_work(struct ieee80211_local *local,
|
|||
|
||||
/* otherwise actually kick it off here (for error handling) */
|
||||
|
||||
/*
|
||||
* If the duration is zero, then the driver
|
||||
* wouldn't actually do anything. Set it to
|
||||
* 10 for now.
|
||||
*
|
||||
* TODO: cancel the off-channel operation
|
||||
* when we get the SKB's TX status and
|
||||
* the wait time was zero before.
|
||||
*/
|
||||
if (!duration)
|
||||
duration = 10;
|
||||
|
||||
ret = drv_remain_on_channel(local, sdata, channel, duration, type);
|
||||
if (ret) {
|
||||
kfree(roc);
|
||||
|
|
Loading…
Reference in New Issue