aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless/nl80211.c
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2014-02-13 14:43:02 -0500
committerJohn W. Linville <linville@tuxdriver.com>2014-02-13 14:43:02 -0500
commit0e028ab0fb2da47fd235dafd4159859892e73d08 (patch)
treee9e1348372b413e6b1b503209582b03c9005f614 /net/wireless/nl80211.c
parente57f1734d87aa0e9a00905ed08888f0c62f56227 (diff)
parent348f7d4adee97f222e3ad9ff97956ca3793d11c6 (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
Diffstat (limited to 'net/wireless/nl80211.c')
-rw-r--r--net/wireless/nl80211.c32
1 files changed, 12 insertions, 20 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index ebea1a197afb..8e6b6a2d35cb 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -1740,9 +1740,10 @@ static int nl80211_dump_wiphy(struct sk_buff *skb, struct netlink_callback *cb)
1740 * We can then retry with the larger buffer. 1740 * We can then retry with the larger buffer.
1741 */ 1741 */
1742 if ((ret == -ENOBUFS || ret == -EMSGSIZE) && 1742 if ((ret == -ENOBUFS || ret == -EMSGSIZE) &&
1743 !skb->len && 1743 !skb->len && !state->split &&
1744 cb->min_dump_alloc < 4096) { 1744 cb->min_dump_alloc < 4096) {
1745 cb->min_dump_alloc = 4096; 1745 cb->min_dump_alloc = 4096;
1746 state->split_start = 0;
1746 rtnl_unlock(); 1747 rtnl_unlock();
1747 return 1; 1748 return 1;
1748 } 1749 }
@@ -5274,7 +5275,7 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
5274 if (!rdev->ops->scan) 5275 if (!rdev->ops->scan)
5275 return -EOPNOTSUPP; 5276 return -EOPNOTSUPP;
5276 5277
5277 if (rdev->scan_req) { 5278 if (rdev->scan_req || rdev->scan_msg) {
5278 err = -EBUSY; 5279 err = -EBUSY;
5279 goto unlock; 5280 goto unlock;
5280 } 5281 }
@@ -10116,40 +10117,31 @@ void nl80211_send_scan_start(struct cfg80211_registered_device *rdev,
10116 NL80211_MCGRP_SCAN, GFP_KERNEL); 10117 NL80211_MCGRP_SCAN, GFP_KERNEL);
10117} 10118}
10118 10119
10119void nl80211_send_scan_done(struct cfg80211_registered_device *rdev, 10120struct sk_buff *nl80211_build_scan_msg(struct cfg80211_registered_device *rdev,
10120 struct wireless_dev *wdev) 10121 struct wireless_dev *wdev, bool aborted)
10121{ 10122{
10122 struct sk_buff *msg; 10123 struct sk_buff *msg;
10123 10124
10124 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); 10125 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
10125 if (!msg) 10126 if (!msg)
10126 return; 10127 return NULL;
10127 10128
10128 if (nl80211_send_scan_msg(msg, rdev, wdev, 0, 0, 0, 10129 if (nl80211_send_scan_msg(msg, rdev, wdev, 0, 0, 0,
10129 NL80211_CMD_NEW_SCAN_RESULTS) < 0) { 10130 aborted ? NL80211_CMD_SCAN_ABORTED :
10131 NL80211_CMD_NEW_SCAN_RESULTS) < 0) {
10130 nlmsg_free(msg); 10132 nlmsg_free(msg);
10131 return; 10133 return NULL;
10132 } 10134 }
10133 10135
10134 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, 10136 return msg;
10135 NL80211_MCGRP_SCAN, GFP_KERNEL);
10136} 10137}
10137 10138
10138void nl80211_send_scan_aborted(struct cfg80211_registered_device *rdev, 10139void nl80211_send_scan_result(struct cfg80211_registered_device *rdev,
10139 struct wireless_dev *wdev) 10140 struct sk_buff *msg)
10140{ 10141{
10141 struct sk_buff *msg;
10142
10143 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
10144 if (!msg) 10142 if (!msg)
10145 return; 10143 return;
10146 10144
10147 if (nl80211_send_scan_msg(msg, rdev, wdev, 0, 0, 0,
10148 NL80211_CMD_SCAN_ABORTED) < 0) {
10149 nlmsg_free(msg);
10150 return;
10151 }
10152
10153 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, 10145 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0,
10154 NL80211_MCGRP_SCAN, GFP_KERNEL); 10146 NL80211_MCGRP_SCAN, GFP_KERNEL);
10155} 10147}