Search Linux Wireless

mac80211/scan.c: scanning ceases after a double rescheduling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello all,

I am using compat-wireless-2012-04-17 in a OpenWrt box, client mode,
kernel 2.6.33.
I arrange to run an active background scan every second under some load
(iperf UDP 40 Mbps).

I observed that the probes can be delayed due to two events flagged as
IEEE80211_STA_BEACON_POLL and IEEE80211_STA_CONNECTION_POLL. They make
__ieee80211_start_scan() return early in mac80211/scan.c when it is
called by ieee80211_request_scan().

When one of these events occurs, the function returns and
__ieee80211_start_scan() is reentered later, called this time by
ieee80211_scan_work(). Now if it finds the other event flagged, it
returns early but will never be called again. As a result later scan
requests result in a "EBUSY" error.

I made a workaround by always returning an error, but I am pretty sure
this is a wrong solution. I wonder if scan_work should not be
rescheduled in this case.

Here is my try:
==================
--- a/mac80211/scan.c   2012-05-31 18:37:41.000000000 +0200
+++ b/mac80211/scan.c   2012-05-31 18:37:48.000000000 +0200
@@ -413,10 +413,7 @@
                return -EBUSY;

        if (!ieee80211_can_scan(local, sdata)) {
-               /* wait for the work to finish/time out */
-               local->scan_req = req;
-               local->scan_sdata = sdata;
-               return 0;
+               return -EAGAIN;
        }

        if (local->ops->hw_scan) {
==================

Any thoughts / suggestions ?

Thanks,

Jean-Pierre Tosoni

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux