From d7b870eaa3e8ef4245023415766fd607abd3f44a Mon Sep 17 00:00:00 2001 From: nbd Date: Wed, 9 Sep 2009 00:17:13 +0000 Subject: madwifi: fix several noderef and ibss merge issues that led to memory leaks and high system load git-svn-id: svn://svn.openwrt.org/openwrt/trunk@17545 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../madwifi/patches/441-fix_ibss_node_handling.patch | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'package/madwifi/patches/441-fix_ibss_node_handling.patch') diff --git a/package/madwifi/patches/441-fix_ibss_node_handling.patch b/package/madwifi/patches/441-fix_ibss_node_handling.patch index a98fe42d2..e4ef20a20 100644 --- a/package/madwifi/patches/441-fix_ibss_node_handling.patch +++ b/package/madwifi/patches/441-fix_ibss_node_handling.patch @@ -44,7 +44,7 @@ if (dir != IEEE80211_FC1_DIR_NODS) { IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY, wh, "data", "invalid dir 0x%x", dir); -@@ -3552,6 +3557,11 @@ ieee80211_recv_mgmt(struct ieee80211vap +@@ -3555,6 +3560,11 @@ ieee80211_recv_mgmt(struct ieee80211vap } else if (vap->iv_opmode == IEEE80211_M_WDS) { found = 1; ni = ni_or_null = vap->iv_wdsnode; @@ -56,7 +56,7 @@ } IEEE80211_UNLOCK_IRQ(vap->iv_ic); -@@ -3676,19 +3686,8 @@ ieee80211_recv_mgmt(struct ieee80211vap +@@ -3683,19 +3693,8 @@ ieee80211_recv_mgmt(struct ieee80211vap vap->iv_stats.is_rx_ssidmismatch++; /*XXX*/ return; } @@ -80,11 +80,23 @@ allocbs = 1; --- a/net80211/ieee80211_node.c +++ b/net80211/ieee80211_node.c -@@ -601,6 +601,7 @@ ieee80211_ibss_merge(struct ieee80211_no +@@ -601,6 +601,8 @@ ieee80211_ibss_merge(struct ieee80211_no ic->ic_flags & IEEE80211_F_SHPREAMBLE ? "short" : "long", ic->ic_flags & IEEE80211_F_SHSLOT ? "short" : "long", ic->ic_flags & IEEE80211_F_USEPROT ? ", protection" : ""); -+ ieee80211_node_table_reset(&vap->iv_ic->ic_sta, vap); ++ if (!IEEE80211_ADDR_EQ(ni->ni_bssid, vap->iv_bssid)) ++ ieee80211_node_table_reset(&vap->iv_ic->ic_sta, vap); return ieee80211_sta_join1(ieee80211_ref_node(ni)); } EXPORT_SYMBOL(ieee80211_ibss_merge); +@@ -1378,9 +1380,7 @@ ieee80211_add_neighbor(struct ieee80211v + if (sp->ath != NULL) + ieee80211_saveath(ni, sp->ath); + +- /* NB: must be after ni_chan is setup */ +- ieee80211_setup_rates(ni, sp->rates, sp->xrates, IEEE80211_F_DOSORT); +- ++ ni->ni_rates = vap->iv_bss->ni_rates; + if (ic->ic_newassoc != NULL) + ic->ic_newassoc(ni, 1); + /* XXX not right for 802.1x/WPA */ -- cgit v1.2.3