This speeds up the function in case a station already exists by avoiding
calling an expensive kzalloc just to free it again after the next check.

Signed-off-by: Koen Vandeputte <[email protected]>
---
 net/mac80211/sta_info.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index 1711bae..0a42e6e 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -513,23 +513,23 @@ static int sta_info_insert_finish(struct sta_info *sta) 
__acquires(RCU)
 {
        struct ieee80211_local *local = sta->local;
        struct ieee80211_sub_if_data *sdata = sta->sdata;
-       struct station_info *sinfo;
+       struct station_info *sinfo = NULL;
        int err = 0;
 
        lockdep_assert_held(&local->sta_mtx);
 
-       sinfo = kzalloc(sizeof(struct station_info), GFP_KERNEL);
-       if (!sinfo) {
-               err = -ENOMEM;
-               goto out_err;
-       }
-
        /* check if STA exists already */
        if (sta_info_get_bss(sdata, sta->sta.addr)) {
                err = -EEXIST;
                goto out_err;
        }
 
+       sinfo = kzalloc(sizeof(struct station_info), GFP_KERNEL);
+       if (!sinfo) {
+               err = -ENOMEM;
+               goto out_err;
+       }
+
        local->num_sta++;
        local->sta_generation++;
        smp_mb();
-- 
2.7.4

Reply via email to