aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless/nl80211.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2010-12-03 03:20:42 -0500
committerJohn W. Linville <linville@tuxdriver.com>2010-12-06 16:01:28 -0500
commitf9e10ce4cf86945eb5efcab31284c971877ed012 (patch)
treea56ec8ed84019901bf92aa969e366afb8b8ce36b /net/wireless/nl80211.c
parent09b174702601079c3a04806754be30ffbd70db4d (diff)
cfg80211: require add_virtual_intf to return new dev
cfg80211 used to do all its bookkeeping in the notifier, but some new stuff will have to use local variables so make the callback return the netdev pointer. Tested-by: Javier Cardona <javier@cozybit.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/wireless/nl80211.c')
-rw-r--r--net/wireless/nl80211.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 0b90cab5da2f..cc2e5d6163de 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -1368,6 +1368,7 @@ static int nl80211_new_interface(struct sk_buff *skb, struct genl_info *info)
1368{ 1368{
1369 struct cfg80211_registered_device *rdev = info->user_ptr[0]; 1369 struct cfg80211_registered_device *rdev = info->user_ptr[0];
1370 struct vif_params params; 1370 struct vif_params params;
1371 struct net_device *dev;
1371 int err; 1372 int err;
1372 enum nl80211_iftype type = NL80211_IFTYPE_UNSPECIFIED; 1373 enum nl80211_iftype type = NL80211_IFTYPE_UNSPECIFIED;
1373 u32 flags; 1374 u32 flags;
@@ -1403,11 +1404,13 @@ static int nl80211_new_interface(struct sk_buff *skb, struct genl_info *info)
1403 err = parse_monitor_flags(type == NL80211_IFTYPE_MONITOR ? 1404 err = parse_monitor_flags(type == NL80211_IFTYPE_MONITOR ?
1404 info->attrs[NL80211_ATTR_MNTR_FLAGS] : NULL, 1405 info->attrs[NL80211_ATTR_MNTR_FLAGS] : NULL,
1405 &flags); 1406 &flags);
1406 err = rdev->ops->add_virtual_intf(&rdev->wiphy, 1407 dev = rdev->ops->add_virtual_intf(&rdev->wiphy,
1407 nla_data(info->attrs[NL80211_ATTR_IFNAME]), 1408 nla_data(info->attrs[NL80211_ATTR_IFNAME]),
1408 type, err ? NULL : &flags, &params); 1409 type, err ? NULL : &flags, &params);
1410 if (IS_ERR(dev))
1411 return PTR_ERR(dev);
1409 1412
1410 return err; 1413 return 0;
1411} 1414}
1412 1415
1413static int nl80211_del_interface(struct sk_buff *skb, struct genl_info *info) 1416static int nl80211_del_interface(struct sk_buff *skb, struct genl_info *info)