diff options
| author | Jeff Garzik <jeff@garzik.org> | 2007-09-25 15:47:12 -0400 |
|---|---|---|
| committer | Jeff Garzik <jeff@garzik.org> | 2007-09-25 15:47:12 -0400 |
| commit | 2aee6198652b32e5eaef29a8f8330a9dd15b8efd (patch) | |
| tree | a95da0809e23f506639309d584468edb87f60212 | |
| parent | 402c79fb1944c8e003a32d07f31504b769fe2b52 (diff) | |
| parent | d59952d532ed8fc93ccb98186f73d9ce5cfcb93d (diff) | |
Merge branch 'fixes-jgarzik' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6 into upstream-fixes
| -rw-r--r-- | fs/compat_ioctl.c | 2 | ||||
| -rw-r--r-- | net/ieee80211/softmac/ieee80211softmac_assoc.c | 2 | ||||
| -rw-r--r-- | net/ieee80211/softmac/ieee80211softmac_wx.c | 54 |
3 files changed, 22 insertions, 36 deletions
diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c index 5a5b7116cefb..37310b0e8107 100644 --- a/fs/compat_ioctl.c +++ b/fs/compat_ioctl.c | |||
| @@ -3190,6 +3190,8 @@ COMPATIBLE_IOCTL(SIOCSIWRETRY) | |||
| 3190 | COMPATIBLE_IOCTL(SIOCGIWRETRY) | 3190 | COMPATIBLE_IOCTL(SIOCGIWRETRY) |
| 3191 | COMPATIBLE_IOCTL(SIOCSIWPOWER) | 3191 | COMPATIBLE_IOCTL(SIOCSIWPOWER) |
| 3192 | COMPATIBLE_IOCTL(SIOCGIWPOWER) | 3192 | COMPATIBLE_IOCTL(SIOCGIWPOWER) |
| 3193 | COMPATIBLE_IOCTL(SIOCSIWAUTH) | ||
| 3194 | COMPATIBLE_IOCTL(SIOCGIWAUTH) | ||
| 3193 | /* hiddev */ | 3195 | /* hiddev */ |
| 3194 | COMPATIBLE_IOCTL(HIDIOCGVERSION) | 3196 | COMPATIBLE_IOCTL(HIDIOCGVERSION) |
| 3195 | COMPATIBLE_IOCTL(HIDIOCAPPLICATION) | 3197 | COMPATIBLE_IOCTL(HIDIOCAPPLICATION) |
diff --git a/net/ieee80211/softmac/ieee80211softmac_assoc.c b/net/ieee80211/softmac/ieee80211softmac_assoc.c index afb6c6698b27..e475f2e1be13 100644 --- a/net/ieee80211/softmac/ieee80211softmac_assoc.c +++ b/net/ieee80211/softmac/ieee80211softmac_assoc.c | |||
| @@ -273,8 +273,6 @@ ieee80211softmac_assoc_work(struct work_struct *work) | |||
| 273 | ieee80211softmac_notify(mac->dev, IEEE80211SOFTMAC_EVENT_SCAN_FINISHED, ieee80211softmac_assoc_notify_scan, NULL); | 273 | ieee80211softmac_notify(mac->dev, IEEE80211SOFTMAC_EVENT_SCAN_FINISHED, ieee80211softmac_assoc_notify_scan, NULL); |
| 274 | if (ieee80211softmac_start_scan(mac)) { | 274 | if (ieee80211softmac_start_scan(mac)) { |
| 275 | dprintk(KERN_INFO PFX "Associate: failed to initiate scan. Is device up?\n"); | 275 | dprintk(KERN_INFO PFX "Associate: failed to initiate scan. Is device up?\n"); |
| 276 | mac->associnfo.associating = 0; | ||
| 277 | mac->associnfo.associated = 0; | ||
| 278 | } | 276 | } |
| 279 | goto out; | 277 | goto out; |
| 280 | } else { | 278 | } else { |
diff --git a/net/ieee80211/softmac/ieee80211softmac_wx.c b/net/ieee80211/softmac/ieee80211softmac_wx.c index d054e9224b3e..442b9875f3fb 100644 --- a/net/ieee80211/softmac/ieee80211softmac_wx.c +++ b/net/ieee80211/softmac/ieee80211softmac_wx.c | |||
| @@ -70,44 +70,30 @@ ieee80211softmac_wx_set_essid(struct net_device *net_dev, | |||
| 70 | char *extra) | 70 | char *extra) |
| 71 | { | 71 | { |
| 72 | struct ieee80211softmac_device *sm = ieee80211_priv(net_dev); | 72 | struct ieee80211softmac_device *sm = ieee80211_priv(net_dev); |
| 73 | struct ieee80211softmac_network *n; | ||
| 74 | struct ieee80211softmac_auth_queue_item *authptr; | 73 | struct ieee80211softmac_auth_queue_item *authptr; |
| 75 | int length = 0; | 74 | int length = 0; |
| 76 | 75 | ||
| 77 | check_assoc_again: | 76 | check_assoc_again: |
| 78 | mutex_lock(&sm->associnfo.mutex); | 77 | mutex_lock(&sm->associnfo.mutex); |
| 79 | /* Check if we're already associating to this or another network | ||
| 80 | * If it's another network, cancel and start over with our new network | ||
| 81 | * If it's our network, ignore the change, we're already doing it! | ||
| 82 | */ | ||
| 83 | if((sm->associnfo.associating || sm->associnfo.associated) && | 78 | if((sm->associnfo.associating || sm->associnfo.associated) && |
| 84 | (data->essid.flags && data->essid.length)) { | 79 | (data->essid.flags && data->essid.length)) { |
| 85 | /* Get the associating network */ | 80 | dprintk(KERN_INFO PFX "Canceling existing associate request!\n"); |
| 86 | n = ieee80211softmac_get_network_by_bssid(sm, sm->associnfo.bssid); | 81 | /* Cancel assoc work */ |
| 87 | if(n && n->essid.len == data->essid.length && | 82 | cancel_delayed_work(&sm->associnfo.work); |
| 88 | !memcmp(n->essid.data, extra, n->essid.len)) { | 83 | /* We don't have to do this, but it's a little cleaner */ |
| 89 | dprintk(KERN_INFO PFX "Already associating or associated to "MAC_FMT"\n", | 84 | list_for_each_entry(authptr, &sm->auth_queue, list) |
| 90 | MAC_ARG(sm->associnfo.bssid)); | 85 | cancel_delayed_work(&authptr->work); |
| 91 | goto out; | 86 | sm->associnfo.bssvalid = 0; |
| 92 | } else { | 87 | sm->associnfo.bssfixed = 0; |
| 93 | dprintk(KERN_INFO PFX "Canceling existing associate request!\n"); | 88 | sm->associnfo.associating = 0; |
| 94 | /* Cancel assoc work */ | 89 | sm->associnfo.associated = 0; |
| 95 | cancel_delayed_work(&sm->associnfo.work); | 90 | /* We must unlock to avoid deadlocks with the assoc workqueue |
| 96 | /* We don't have to do this, but it's a little cleaner */ | 91 | * on the associnfo.mutex */ |
| 97 | list_for_each_entry(authptr, &sm->auth_queue, list) | 92 | mutex_unlock(&sm->associnfo.mutex); |
| 98 | cancel_delayed_work(&authptr->work); | 93 | flush_scheduled_work(); |
| 99 | sm->associnfo.bssvalid = 0; | 94 | /* Avoid race! Check assoc status again. Maybe someone started an |
| 100 | sm->associnfo.bssfixed = 0; | 95 | * association while we flushed. */ |
| 101 | sm->associnfo.associating = 0; | 96 | goto check_assoc_again; |
| 102 | sm->associnfo.associated = 0; | ||
| 103 | /* We must unlock to avoid deadlocks with the assoc workqueue | ||
| 104 | * on the associnfo.mutex */ | ||
| 105 | mutex_unlock(&sm->associnfo.mutex); | ||
| 106 | flush_scheduled_work(); | ||
| 107 | /* Avoid race! Check assoc status again. Maybe someone started an | ||
| 108 | * association while we flushed. */ | ||
| 109 | goto check_assoc_again; | ||
| 110 | } | ||
| 111 | } | 97 | } |
| 112 | 98 | ||
| 113 | sm->associnfo.static_essid = 0; | 99 | sm->associnfo.static_essid = 0; |
| @@ -153,13 +139,13 @@ ieee80211softmac_wx_get_essid(struct net_device *net_dev, | |||
| 153 | data->essid.length = sm->associnfo.req_essid.len; | 139 | data->essid.length = sm->associnfo.req_essid.len; |
| 154 | data->essid.flags = 1; /* active */ | 140 | data->essid.flags = 1; /* active */ |
| 155 | memcpy(extra, sm->associnfo.req_essid.data, sm->associnfo.req_essid.len); | 141 | memcpy(extra, sm->associnfo.req_essid.data, sm->associnfo.req_essid.len); |
| 156 | } | 142 | dprintk(KERN_INFO PFX "Getting essid from req_essid\n"); |
| 157 | 143 | } else if (sm->associnfo.associated || sm->associnfo.associating) { | |
| 158 | /* If we're associating/associated, return that */ | 144 | /* If we're associating/associated, return that */ |
| 159 | if (sm->associnfo.associated || sm->associnfo.associating) { | ||
| 160 | data->essid.length = sm->associnfo.associate_essid.len; | 145 | data->essid.length = sm->associnfo.associate_essid.len; |
| 161 | data->essid.flags = 1; /* active */ | 146 | data->essid.flags = 1; /* active */ |
| 162 | memcpy(extra, sm->associnfo.associate_essid.data, sm->associnfo.associate_essid.len); | 147 | memcpy(extra, sm->associnfo.associate_essid.data, sm->associnfo.associate_essid.len); |
| 148 | dprintk(KERN_INFO PFX "Getting essid from associate_essid\n"); | ||
| 163 | } | 149 | } |
| 164 | mutex_unlock(&sm->associnfo.mutex); | 150 | mutex_unlock(&sm->associnfo.mutex); |
| 165 | 151 | ||
