diff options
author | Linus Torvalds <torvalds@woody.osdl.org> | 2006-12-07 20:09:52 +0300 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2006-12-07 20:09:52 +0300 |
commit | 0a01707b289853f56d1c000057b27e243c039722 (patch) | |
tree | fe9aff3073e7232e2f786a4faf8f0974b65fdfb0 /net | |
parent | 2685b267bce34c9b66626cb11664509c32a761a5 (diff) | |
parent | 0ae851352a87db3f829511816a2da227860bf585 (diff) | |
download | linux-0a01707b289853f56d1c000057b27e243c039722.tar.xz |
Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6
* 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6: (43 commits)
[wireless] zd1211rw: workqueue-related build fixes
[netdrvr] netxen: workqueue-related build fixes
[PATCH] sky2: sparse warnings
[PATCH] skge: fix sparse warnings
[PATCH] myri10ge: write as 2 32-byte blocks in myri10ge_submit_8rx
[PATCH] sky2: receive queue watermark tweak
[PATCH] sky2: beter ram buffer partitioning
[PATCH] sky2: add comments to PCI ids
[PATCH] sky2: add PCI for 88ec033
[PATCH] AT91RM9200 Ethernet: Use dev_alloc_skb()
[PATCH] AT91RM9200 Ethernet: Add netpoll / netconsole support
[PATCH] AT91RM9200 Ethernet: Move check_timer variable and use mod_timer()
[PATCH] AT91RM9200 Ethernet: Remove 'at91_dev' and use netdev_priv()
[PATCH] ipw2200: Fix debug output endian issue
[PATCH] ipw2200: Fix a typo
[PATCH] ipw2200: Update version stamp to 1.2.0
[PATCH] ipw2200: Add IEEE80211_RADIOTAP_TSFT for promiscuous mode
[PATCH] softmac: fix unbalanced mutex_lock/unlock in ieee80211softmac_wx_set_mlme
[PATCH] softmac: Fixed handling of deassociation from AP
[PATCH] ipw2200: replace kmalloc+memset with kcalloc
...
Diffstat (limited to 'net')
-rw-r--r-- | net/ieee80211/softmac/ieee80211softmac_assoc.c | 14 | ||||
-rw-r--r-- | net/ieee80211/softmac/ieee80211softmac_auth.c | 2 | ||||
-rw-r--r-- | net/ieee80211/softmac/ieee80211softmac_priv.h | 2 | ||||
-rw-r--r-- | net/ieee80211/softmac/ieee80211softmac_wx.c | 3 |
4 files changed, 18 insertions, 3 deletions
diff --git a/net/ieee80211/softmac/ieee80211softmac_assoc.c b/net/ieee80211/softmac/ieee80211softmac_assoc.c index 08386c102954..eec1a1dd91da 100644 --- a/net/ieee80211/softmac/ieee80211softmac_assoc.c +++ b/net/ieee80211/softmac/ieee80211softmac_assoc.c @@ -431,6 +431,17 @@ ieee80211softmac_handle_assoc_response(struct net_device * dev, return 0; } +void +ieee80211softmac_try_reassoc(struct ieee80211softmac_device *mac) +{ + unsigned long flags; + + spin_lock_irqsave(&mac->lock, flags); + mac->associnfo.associating = 1; + schedule_work(&mac->associnfo.work); + spin_unlock_irqrestore(&mac->lock, flags); +} + int ieee80211softmac_handle_disassoc(struct net_device * dev, struct ieee80211_disassoc *disassoc) @@ -449,8 +460,7 @@ ieee80211softmac_handle_disassoc(struct net_device * dev, dprintk(KERN_INFO PFX "got disassoc frame\n"); ieee80211softmac_disassoc(mac); - /* try to reassociate */ - schedule_delayed_work(&mac->associnfo.work, 0); + ieee80211softmac_try_reassoc(mac); return 0; } diff --git a/net/ieee80211/softmac/ieee80211softmac_auth.c b/net/ieee80211/softmac/ieee80211softmac_auth.c index 6012705aa4f8..8ed3e59b8024 100644 --- a/net/ieee80211/softmac/ieee80211softmac_auth.c +++ b/net/ieee80211/softmac/ieee80211softmac_auth.c @@ -337,6 +337,8 @@ ieee80211softmac_deauth_from_net(struct ieee80211softmac_device *mac, /* can't transmit data right now... */ netif_carrier_off(mac->dev); spin_unlock_irqrestore(&mac->lock, flags); + + ieee80211softmac_try_reassoc(mac); } /* diff --git a/net/ieee80211/softmac/ieee80211softmac_priv.h b/net/ieee80211/softmac/ieee80211softmac_priv.h index c0dbe070e548..4c2bba34d328 100644 --- a/net/ieee80211/softmac/ieee80211softmac_priv.h +++ b/net/ieee80211/softmac/ieee80211softmac_priv.h @@ -239,4 +239,6 @@ void ieee80211softmac_call_events_locked(struct ieee80211softmac_device *mac, in int ieee80211softmac_notify_internal(struct ieee80211softmac_device *mac, int event, void *event_context, notify_function_ptr fun, void *context, gfp_t gfp_mask); +void ieee80211softmac_try_reassoc(struct ieee80211softmac_device *mac); + #endif /* IEEE80211SOFTMAC_PRIV_H_ */ diff --git a/net/ieee80211/softmac/ieee80211softmac_wx.c b/net/ieee80211/softmac/ieee80211softmac_wx.c index 2ffaebd21c53..480d72c7a42c 100644 --- a/net/ieee80211/softmac/ieee80211softmac_wx.c +++ b/net/ieee80211/softmac/ieee80211softmac_wx.c @@ -495,7 +495,8 @@ ieee80211softmac_wx_set_mlme(struct net_device *dev, printk(KERN_DEBUG PFX "wx_set_mlme: we should know the net here...\n"); goto out; } - return ieee80211softmac_deauth_req(mac, net, reason); + err = ieee80211softmac_deauth_req(mac, net, reason); + goto out; case IW_MLME_DISASSOC: ieee80211softmac_send_disassoc_req(mac, reason); mac->associnfo.associated = 0; |