From: Felix Fietkau Date: Sun, 8 Feb 2026 18:46:07 +0000 (+0000) Subject: wifi-scripts: fix spurious teardown on config_change during setup X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3553eda28379f1074b8c2cc4d3ab9930552f0cad;p=thirdparty%2Fopenwrt.git wifi-scripts: fix spurious teardown on config_change during setup When config_change is set during an active setup (e.g. by a concurrent reconf call), wdev_mark_up() attempted to call setup() while still in "setup" state. Since setup() requires state "up" or "down", it silently returned, leaving the state as "setup". The subsequent wdev_setup_cb() then treated this as a setup failure, triggering an unnecessary teardown+restart cycle. Fix this by removing the config_change handling from wdev_mark_up() and moving it to wdev_setup_cb() instead. wdev_mark_up() now always transitions to "up" state. When wdev_setup_cb() runs afterwards and finds the device already "up" with config_change set, it initiates a clean re-setup from the "up" state where setup() can run. Signed-off-by: Felix Fietkau --- diff --git a/package/network/config/wifi-scripts/files/lib/netifd/wireless-device.uc b/package/network/config/wifi-scripts/files/lib/netifd/wireless-device.uc index 8168e291eb8..768a421480c 100644 --- a/package/network/config/wifi-scripts/files/lib/netifd/wireless-device.uc +++ b/package/network/config/wifi-scripts/files/lib/netifd/wireless-device.uc @@ -142,8 +142,13 @@ function wdev_config_init(wdev) function wdev_setup_cb(wdev) { - if (wdev.state != "setup") + if (wdev.state != "setup") { + if (wdev.state == "up" && wdev.config_change) { + wdev_config_init(wdev); + wdev.setup(); + } return; + } if (wdev.retry > 0) wdev.retry--; @@ -448,11 +453,6 @@ function wdev_mark_up(wdev) if (wdev.state != "setup") return; - if (wdev.config_change) { - wdev.setup(); - return; - } - for (let section, data in wdev.handler_data) { if (data.ifname) handle_link(data.ifname, data, true);