summaryrefslogtreecommitdiffstats
path: root/sys/net80211/ieee80211_rssadapt.c
diff options
context:
space:
mode:
authorrpaulo <rpaulo@FreeBSD.org>2010-04-09 12:06:19 +0000
committerrpaulo <rpaulo@FreeBSD.org>2010-04-09 12:06:19 +0000
commit6e781e21dbc7cd56e89be117eca5be95fa79b65b (patch)
tree4b433dd899472acc3a80500bf822820189e50cc1 /sys/net80211/ieee80211_rssadapt.c
parenta5b2b30f957074bb4016f69e20d7b2520e658b46 (diff)
downloadFreeBSD-src-6e781e21dbc7cd56e89be117eca5be95fa79b65b.zip
FreeBSD-src-6e781e21dbc7cd56e89be117eca5be95fa79b65b.tar.gz
Use M_NOWAIT instead of M_WAITOK to avoid race conditions.
MFC after: 1 month
Diffstat (limited to 'sys/net80211/ieee80211_rssadapt.c')
-rw-r--r--sys/net80211/ieee80211_rssadapt.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/sys/net80211/ieee80211_rssadapt.c b/sys/net80211/ieee80211_rssadapt.c
index e90ad57..ad329e0 100644
--- a/sys/net80211/ieee80211_rssadapt.c
+++ b/sys/net80211/ieee80211_rssadapt.c
@@ -128,9 +128,12 @@ rssadapt_init(struct ieee80211vap *vap)
KASSERT(vap->iv_rs == NULL, ("%s: iv_rs already initialized",
__func__));
- rs = malloc(sizeof(struct ieee80211_rssadapt), M_80211_RATECTL,
- M_WAITOK|M_ZERO);
- vap->iv_rs = rs;
+ vap->iv_rs = rs = malloc(sizeof(struct ieee80211_rssadapt),
+ M_80211_RATECTL, M_NOWAIT|M_ZERO);
+ if (rs == NULL) {
+ if_printf(vap->iv_ifp, "couldn't alloc ratectl structure\n");
+ return;
+ }
rs->vap = vap;
rssadapt_setinterval(vap, 500 /* msecs */);
rssadapt_sysctlattach(vap, vap->iv_sysctl, vap->iv_oid);
@@ -162,12 +165,17 @@ static void
rssadapt_node_init(struct ieee80211_node *ni)
{
struct ieee80211_rssadapt_node *ra;
- struct ieee80211_rssadapt *rsa = ni->ni_vap->iv_rs;
+ struct ieee80211vap *vap = ni->ni_vap;
+ struct ieee80211_rssadapt *rsa = vap->iv_rs;
const struct ieee80211_rateset *rs = &ni->ni_rates;
- ra = malloc(sizeof(struct ieee80211_rssadapt_node), M_80211_RATECTL,
- M_WAITOK|M_ZERO);
- ni->ni_rctls = ra;
+ ni->ni_rctls = ra = malloc(sizeof(struct ieee80211_rssadapt_node),
+ M_80211_RATECTL, M_NOWAIT|M_ZERO);
+ if (ra == NULL) {
+ if_printf(vap->iv_ifp, "couldn't alloc per-node ratectl "
+ "structure\n");
+ return;
+ }
ra->ra_rs = rsa;
ra->ra_rates = *rs;
rssadapt_updatestats(ra);
OpenPOWER on IntegriCloud