mutex_lock(&priv->mutex);
 
+       if (changes & (BSS_CHANGED_BSSID | BSS_CHANGED_ASSOC |
+                      BSS_CHANGED_BEACON_ENABLED)) {
+               /*
+                * If there is currently a HW scan going on in the
+                * background then we need to cancel it else the RXON
+                * below in post_associate or set_no_assoc can fail.
+                */
+               if (iwl_scan_cancel_timeout(priv, 200)) {
+                       IWL_WARN(priv, "Can not cancel scan\n");
+                       goto out;
+               }
+       }
+
        if (changes & BSS_CHANGED_QOS) {
                unsigned long flags;
 
        if (changes & BSS_CHANGED_BSSID) {
                IWL_DEBUG_MAC80211(priv, "BSSID %pM\n", bss_conf->bssid);
 
-               /*
-                * If there is currently a HW scan going on in the
-                * background then we need to cancel it else the RXON
-                * below/in post_associate will fail.
-                */
-               if (iwl_scan_cancel_timeout(priv, 100)) {
-                       IWL_WARN(priv, "Aborted scan still in progress after 100ms\n");
-                       IWL_DEBUG_MAC80211(priv, "leaving - scan abort failed.\n");
-                       mutex_unlock(&priv->mutex);
-                       return;
-               }
-
                /* mac80211 only sets assoc when in STATION mode */
                if (vif->type == NL80211_IFTYPE_ADHOC || bss_conf->assoc) {
                        memcpy(ctx->staging.bssid_addr,
                        IWL_ERR(priv, "failed to update PAN params\n");
        }
 
+out:
        mutex_unlock(&priv->mutex);
 
        IWL_DEBUG_MAC80211(priv, "leave\n");