mac80211: send peer candidate event for new sta only
[firefly-linux-kernel-4.4.55.git] / net / mac80211 / mesh_plink.c
index 8cc8461b48a0a037dd129c2f0491093960d410f1..ae026acec8743d0f47a0aece3461ab46dbd13a73 100644 (file)
@@ -346,6 +346,15 @@ static struct sta_info *mesh_peer_init(struct ieee80211_sub_if_data *sdata,
 
        sta = sta_info_get(sdata, addr);
        if (!sta) {
+               /* Userspace handles peer allocation when security is enabled */
+               if (sdata->u.mesh.security & IEEE80211_MESH_SEC_AUTHED) {
+                       cfg80211_notify_new_peer_candidate(sdata->dev, addr,
+                                                          elems->ie_start,
+                                                          elems->total_len,
+                                                          GFP_ATOMIC);
+                       return NULL;
+               }
+
                sta = mesh_plink_alloc(sdata, addr);
                if (!sta)
                        return NULL;
@@ -387,15 +396,6 @@ void mesh_neighbour_update(struct ieee80211_sub_if_data *sdata,
 {
        struct sta_info *sta;
 
-       /* Userspace handles peer allocation when security is enabled */
-       if (sdata->u.mesh.security & IEEE80211_MESH_SEC_AUTHED) {
-               cfg80211_notify_new_peer_candidate(sdata->dev, hw_addr,
-                                                  elems->ie_start,
-                                                  elems->total_len,
-                                                  GFP_KERNEL);
-               return;
-       }
-
        rcu_read_lock();
        sta = mesh_peer_init(sdata, hw_addr, elems);
        if (!sta)