mac80211: send peer candidate event for new sta only
authorThomas Pedersen <thomas@cozybit.com>
Thu, 3 May 2012 22:06:09 +0000 (15:06 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 15 May 2012 21:27:54 +0000 (17:27 -0400)
Only send a cfg80211 new peer candidate notification if userspace has
yet to allocate this station entry.

Signed-off-by: Thomas Pedersen <thomas@cozybit.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/mesh_plink.c

index 8cc8461..ae026ac 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)