OLD | NEW |
1 /* | 1 /* |
2 * cfg80211 scan result handling | 2 * cfg80211 scan result handling |
3 * | 3 * |
4 * Copyright 2008 Johannes Berg <johannes@sipsolutions.net> | 4 * Copyright 2008 Johannes Berg <johannes@sipsolutions.net> |
5 */ | 5 */ |
6 #include <linux/kernel.h> | 6 #include <linux/kernel.h> |
7 #include <linux/slab.h> | 7 #include <linux/slab.h> |
8 #include <linux/module.h> | 8 #include <linux/module.h> |
9 #include <linux/netdevice.h> | 9 #include <linux/netdevice.h> |
10 #include <linux/wireless.h> | 10 #include <linux/wireless.h> |
(...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
653 { | 653 { |
654 struct cfg80211_registered_device *dev = wiphy_to_dev(wiphy); | 654 struct cfg80211_registered_device *dev = wiphy_to_dev(wiphy); |
655 struct cfg80211_internal_bss *bss; | 655 struct cfg80211_internal_bss *bss; |
656 | 656 |
657 if (WARN_ON(!pub)) | 657 if (WARN_ON(!pub)) |
658 return; | 658 return; |
659 | 659 |
660 bss = container_of(pub, struct cfg80211_internal_bss, pub); | 660 bss = container_of(pub, struct cfg80211_internal_bss, pub); |
661 | 661 |
662 spin_lock_bh(&dev->bss_lock); | 662 spin_lock_bh(&dev->bss_lock); |
| 663 if (!list_empty(&bss->list)) { |
| 664 list_del_init(&bss->list); |
| 665 dev->bss_generation++; |
| 666 rb_erase(&bss->rbn, &dev->bss_tree); |
663 | 667 |
664 » list_del(&bss->list); | 668 » » kref_put(&bss->ref, bss_release); |
665 » dev->bss_generation++; | 669 » } |
666 » rb_erase(&bss->rbn, &dev->bss_tree); | |
667 | |
668 spin_unlock_bh(&dev->bss_lock); | 670 spin_unlock_bh(&dev->bss_lock); |
669 | |
670 kref_put(&bss->ref, bss_release); | |
671 } | 671 } |
672 EXPORT_SYMBOL(cfg80211_unlink_bss); | 672 EXPORT_SYMBOL(cfg80211_unlink_bss); |
673 | 673 |
674 #ifdef CONFIG_CFG80211_WEXT | 674 #ifdef CONFIG_CFG80211_WEXT |
675 int cfg80211_wext_siwscan(struct net_device *dev, | 675 int cfg80211_wext_siwscan(struct net_device *dev, |
676 struct iw_request_info *info, | 676 struct iw_request_info *info, |
677 union iwreq_data *wrqu, char *extra) | 677 union iwreq_data *wrqu, char *extra) |
678 { | 678 { |
679 struct cfg80211_registered_device *rdev; | 679 struct cfg80211_registered_device *rdev; |
680 struct wiphy *wiphy; | 680 struct wiphy *wiphy; |
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1108 data->length = res; | 1108 data->length = res; |
1109 res = 0; | 1109 res = 0; |
1110 } | 1110 } |
1111 | 1111 |
1112 out: | 1112 out: |
1113 cfg80211_unlock_rdev(rdev); | 1113 cfg80211_unlock_rdev(rdev); |
1114 return res; | 1114 return res; |
1115 } | 1115 } |
1116 EXPORT_SYMBOL_GPL(cfg80211_wext_giwscan); | 1116 EXPORT_SYMBOL_GPL(cfg80211_wext_giwscan); |
1117 #endif | 1117 #endif |
OLD | NEW |