mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-25 17:59:25 +01:00
scan: Don't callback on SCAN_ABORTED
If periodic scan is active and we receive a SCAN_ABORTED event, we would still invoke the periodic scan callback with an error. This is rather pointless since the periodic scan callback cannot do anything useful with this information. Fix that.
This commit is contained in:
parent
280620d7ac
commit
6051a14952
30
src/scan.c
30
src/scan.c
@ -82,6 +82,7 @@ struct scan_request {
|
||||
bool canceled : 1; /* Is scan_cancel being called on this request? */
|
||||
bool passive:1; /* Active or Passive scan? */
|
||||
bool started : 1; /* Has TRIGGER_SCAN succeeded at least once? */
|
||||
bool periodic : 1; /* Started as a periodic scan? */
|
||||
struct l_queue *cmds;
|
||||
/* The time the current scan was started. Reported in TRIGGER_SCAN */
|
||||
uint64_t start_time_tsf;
|
||||
@ -891,6 +892,7 @@ static void scan_periodic_destroy(void *user_data)
|
||||
static bool scan_periodic_queue(struct scan_context *sc)
|
||||
{
|
||||
struct scan_parameters params = {};
|
||||
struct scan_request *sr;
|
||||
|
||||
if (sc->sp.needs_active_scan && known_networks_has_hidden()) {
|
||||
params.randomize_mac_addr_hint = true;
|
||||
@ -908,7 +910,13 @@ static bool scan_periodic_queue(struct scan_context *sc)
|
||||
scan_periodic_notify, sc,
|
||||
scan_periodic_destroy);
|
||||
|
||||
return sc->sp.id != 0;
|
||||
if (!sc->sp.id)
|
||||
return false;
|
||||
|
||||
sr = l_queue_peek_tail(sc->requests);
|
||||
sr->periodic = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool scan_periodic_is_disabled(void)
|
||||
@ -1935,11 +1943,23 @@ static void scan_notify(struct l_genl_msg *msg, void *user_data)
|
||||
case NL80211_CMD_SCAN_ABORTED:
|
||||
sc->state = SCAN_STATE_NOT_RUNNING;
|
||||
|
||||
/*
|
||||
* If there's nothing pending, then most likely an external
|
||||
* scan got aborted. We don't care, ignore.
|
||||
*/
|
||||
if (!sr)
|
||||
break;
|
||||
|
||||
if (sc->triggered) {
|
||||
sc->triggered = false;
|
||||
|
||||
scan_finished(sc, -ECANCELED, NULL, NULL, sr);
|
||||
} else {
|
||||
/* If periodic scan, don't report the abort */
|
||||
if (sr->periodic)
|
||||
wiphy_radio_work_done(sc->wiphy, sr->work.id);
|
||||
else
|
||||
scan_finished(sc, -ECANCELED, NULL, NULL, sr);
|
||||
} else if (wiphy_radio_work_is_running(sc->wiphy,
|
||||
sr->work.id)) {
|
||||
/*
|
||||
* If this was an external scan that got aborted
|
||||
* we may be able to now queue our own scan although
|
||||
@ -1947,9 +1967,7 @@ static void scan_notify(struct l_genl_msg *msg, void *user_data)
|
||||
* hardware or the driver because of another activity
|
||||
* starting in which case we should just get an EBUSY.
|
||||
*/
|
||||
if (sr && wiphy_radio_work_is_running(sc->wiphy,
|
||||
sr->work.id))
|
||||
start_next_scan_request(&sr->work);
|
||||
start_next_scan_request(&sr->work);
|
||||
}
|
||||
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user