Commit 0baef284 authored by Johannes Berg's avatar Johannes Berg
Browse files

mac80211: refactor freeing the next_beacon



We have this code seven times, refactor it into a
separate function.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent ee0e2f51
Loading
Loading
Loading
Loading
+18 −27
Original line number Diff line number Diff line
@@ -1348,6 +1348,16 @@ static int ieee80211_change_beacon(struct wiphy *wiphy, struct net_device *dev,
	return 0;
}

static void ieee80211_free_next_beacon(struct ieee80211_sub_if_data *sdata)
{
	if (!sdata->u.ap.next_beacon)
		return;

	kfree(sdata->u.ap.next_beacon->mbssid_ies);
	kfree(sdata->u.ap.next_beacon);
	sdata->u.ap.next_beacon = NULL;
}

static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev)
{
	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
@@ -1382,11 +1392,7 @@ static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev)

	mutex_unlock(&local->mtx);

	if (sdata->u.ap.next_beacon) {
		kfree(sdata->u.ap.next_beacon->mbssid_ies);
		kfree(sdata->u.ap.next_beacon);
		sdata->u.ap.next_beacon = NULL;
	}
	ieee80211_free_next_beacon(sdata);

	/* turn off carrier for this interface and dependent VLANs */
	list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
@@ -3321,9 +3327,7 @@ static int ieee80211_set_after_csa_beacon(struct ieee80211_sub_if_data *sdata,

		err = ieee80211_assign_beacon(sdata, sdata->u.ap.next_beacon,
					      NULL, NULL);
		kfree(sdata->u.ap.next_beacon->mbssid_ies);
		kfree(sdata->u.ap.next_beacon);
		sdata->u.ap.next_beacon = NULL;
		ieee80211_free_next_beacon(sdata);

		if (err < 0)
			return err;
@@ -3479,9 +3483,7 @@ static int ieee80211_set_csa_beacon(struct ieee80211_sub_if_data *sdata,
		     IEEE80211_MAX_CNTDWN_COUNTERS_NUM) ||
		    (params->n_counter_offsets_presp >
		     IEEE80211_MAX_CNTDWN_COUNTERS_NUM)) {
			kfree(sdata->u.ap.next_beacon->mbssid_ies);
			kfree(sdata->u.ap.next_beacon);
			sdata->u.ap.next_beacon = NULL;
			ieee80211_free_next_beacon(sdata);
			return -EINVAL;
		}

@@ -3493,9 +3495,7 @@ static int ieee80211_set_csa_beacon(struct ieee80211_sub_if_data *sdata,

		err = ieee80211_assign_beacon(sdata, &params->beacon_csa, &csa, NULL);
		if (err < 0) {
			kfree(sdata->u.ap.next_beacon->mbssid_ies);
			kfree(sdata->u.ap.next_beacon);
			sdata->u.ap.next_beacon = NULL;
			ieee80211_free_next_beacon(sdata);
			return err;
		}
		*changed |= err;
@@ -3585,11 +3585,8 @@ static int ieee80211_set_csa_beacon(struct ieee80211_sub_if_data *sdata,
static void ieee80211_color_change_abort(struct ieee80211_sub_if_data  *sdata)
{
	sdata->vif.color_change_active = false;
	if (sdata->u.ap.next_beacon) {
		kfree(sdata->u.ap.next_beacon->mbssid_ies);
		kfree(sdata->u.ap.next_beacon);
		sdata->u.ap.next_beacon = NULL;
	}

	ieee80211_free_next_beacon(sdata);

	cfg80211_color_change_aborted_notify(sdata->dev);
}
@@ -4330,9 +4327,7 @@ ieee80211_set_after_color_change_beacon(struct ieee80211_sub_if_data *sdata,

		ret = ieee80211_assign_beacon(sdata, sdata->u.ap.next_beacon,
					      NULL, NULL);
		kfree(sdata->u.ap.next_beacon->mbssid_ies);
		kfree(sdata->u.ap.next_beacon);
		sdata->u.ap.next_beacon = NULL;
		ieee80211_free_next_beacon(sdata);

		if (ret < 0)
			return ret;
@@ -4375,11 +4370,7 @@ ieee80211_set_color_change_beacon(struct ieee80211_sub_if_data *sdata,
		err = ieee80211_assign_beacon(sdata, &params->beacon_color_change,
					      NULL, &color_change);
		if (err < 0) {
			if (sdata->u.ap.next_beacon) {
				kfree(sdata->u.ap.next_beacon->mbssid_ies);
				kfree(sdata->u.ap.next_beacon);
				sdata->u.ap.next_beacon = NULL;
			}
			ieee80211_free_next_beacon(sdata);
			return err;
		}
		*changed |= err;