mac80211: only alloc mem if a station doesn't exist yet
authorKoen Vandeputte <koen.vandeputte@ncentric.com>
Wed, 14 Dec 2016 16:28:59 +0000 (17:28 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 15 Dec 2016 09:56:52 +0000 (10:56 +0100)
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 <koen.vandeputte@ncentric.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/sta_info.c

index 4ab75a9d70c7098dc499b6d2207474fb6fd6e612..f5a24b742eda717662e59be238952492ec247c79 100644 (file)
@@ -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();