summaryrefslogtreecommitdiffstats
path: root/net/mac80211/cfg.c
diff options
context:
space:
mode:
authorIlan Peer2013-12-19 12:25:29 +0100
committerJohannes Berg2014-02-04 21:48:18 +0100
commit2fae062e503bd087d1ef7aebfd5c6707c6ec5564 (patch)
tree58794fc6a7490119daedf58a751677c7f1848c67 /net/mac80211/cfg.c
parentmac80211: use sdata mesh_id_len instead of wdev's (diff)
downloadkernel-qcow2-linux-2fae062e503bd087d1ef7aebfd5c6707c6ec5564.tar.gz
kernel-qcow2-linux-2fae062e503bd087d1ef7aebfd5c6707c6ec5564.tar.xz
kernel-qcow2-linux-2fae062e503bd087d1ef7aebfd5c6707c6ec5564.zip
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>
Diffstat (limited to 'net/mac80211/cfg.c')
-rw-r--r--net/mac80211/cfg.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index cf961a5f3aa9..d2125a37014a 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -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);