cfg80211: pass netdev to change_virtual_intf
Johannes Berg [Tue, 9 Jun 2009 19:04:43 +0000 (21:04 +0200)]
If there was a reason I'm passing the ifidx I cannot
remember it any more and don't see one now, so let's
just pass the pointer itself.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

drivers/net/wireless/iwmc3200wifi/cfg80211.c
drivers/net/wireless/rndis_wlan.c
include/net/cfg80211.h
net/mac80211/cfg.c
net/wireless/nl80211.c
net/wireless/wext-compat.c

index 96f714e..bc89b1e 100644 (file)
@@ -167,20 +167,15 @@ int iwm_cfg80211_inform_bss(struct iwm_priv *iwm)
        return 0;
 }
 
-static int iwm_cfg80211_change_iface(struct wiphy *wiphy, int ifindex,
+static int iwm_cfg80211_change_iface(struct wiphy *wiphy,
+                                    struct net_device *ndev,
                                     enum nl80211_iftype type, u32 *flags,
                                     struct vif_params *params)
 {
-       struct net_device *ndev;
        struct wireless_dev *wdev;
        struct iwm_priv *iwm;
        u32 old_mode;
 
-       /* we're under RTNL */
-       ndev = __dev_get_by_index(&init_net, ifindex);
-       if (!ndev)
-               return -ENODEV;
-
        wdev = ndev->ieee80211_ptr;
        iwm = ndev_to_iwm(ndev);
        old_mode = iwm->conf.mode;
index 3bec3db..e8b0793 100644 (file)
@@ -420,7 +420,8 @@ struct rndis_wlan_private {
 /*
  * cfg80211 ops
  */
-static int rndis_change_virtual_intf(struct wiphy *wiphy, int ifindex,
+static int rndis_change_virtual_intf(struct wiphy *wiphy,
+                                       struct net_device *dev,
                                        enum nl80211_iftype type, u32 *flags,
                                        struct vif_params *params);
 
@@ -1222,20 +1223,14 @@ static void set_multicast_list(struct usbnet *usbdev)
 /*
  * cfg80211 ops
  */
-static int rndis_change_virtual_intf(struct wiphy *wiphy, int ifindex,
+static int rndis_change_virtual_intf(struct wiphy *wiphy,
+                                       struct net_device *dev,
                                        enum nl80211_iftype type, u32 *flags,
                                        struct vif_params *params)
 {
-       struct net_device *dev;
-       struct usbnet *usbdev;
+       struct usbnet *usbdev = netdev_priv(dev);
        int mode;
 
-       /* we're under RTNL */
-       dev = __dev_get_by_index(&init_net, ifindex);
-       if (!dev)
-               return -ENODEV;
-       usbdev = netdev_priv(dev);
-
        switch (type) {
        case NL80211_IFTYPE_ADHOC:
                mode = NDIS_80211_INFRA_ADHOC;
index 1a21895..90f9bfa 100644 (file)
@@ -866,7 +866,8 @@ struct cfg80211_ops {
                                    enum nl80211_iftype type, u32 *flags,
                                    struct vif_params *params);
        int     (*del_virtual_intf)(struct wiphy *wiphy, int ifindex);
-       int     (*change_virtual_intf)(struct wiphy *wiphy, int ifindex,
+       int     (*change_virtual_intf)(struct wiphy *wiphy,
+                                      struct net_device *dev,
                                       enum nl80211_iftype type, u32 *flags,
                                       struct vif_params *params);
 
index 3f47276..eb93eb6 100644 (file)
@@ -74,19 +74,14 @@ static int ieee80211_del_iface(struct wiphy *wiphy, int ifindex)
        return 0;
 }
 
-static int ieee80211_change_iface(struct wiphy *wiphy, int ifindex,
+static int ieee80211_change_iface(struct wiphy *wiphy,
+                                 struct net_device *dev,
                                  enum nl80211_iftype type, u32 *flags,
                                  struct vif_params *params)
 {
-       struct net_device *dev;
        struct ieee80211_sub_if_data *sdata;
        int ret;
 
-       /* we're under RTNL */
-       dev = __dev_get_by_index(&init_net, ifindex);
-       if (!dev)
-               return -ENODEV;
-
        if (!nl80211_type_check(type))
                return -EINVAL;
 
index 43bdb13..f91e5d4 100644 (file)
@@ -767,7 +767,7 @@ static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info)
 {
        struct cfg80211_registered_device *drv;
        struct vif_params params;
-       int err, ifindex;
+       int err;
        enum nl80211_iftype otype, ntype;
        struct net_device *dev;
        u32 _flags, *flags = NULL;
@@ -781,9 +781,7 @@ static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info)
        if (err)
                goto unlock_rtnl;
 
-       ifindex = dev->ifindex;
        otype = ntype = dev->ieee80211_ptr->iftype;
-       dev_put(dev);
 
        if (info->attrs[NL80211_ATTR_IFTYPE]) {
                ntype = nla_get_u32(info->attrs[NL80211_ATTR_IFTYPE]);
@@ -826,20 +824,20 @@ static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info)
        }
 
        if (change)
-               err = drv->ops->change_virtual_intf(&drv->wiphy, ifindex,
+               err = drv->ops->change_virtual_intf(&drv->wiphy, dev,
                                                    ntype, flags, &params);
        else
                err = 0;
 
-       dev = __dev_get_by_index(&init_net, ifindex);
-       WARN_ON(!dev || (!err && dev->ieee80211_ptr->iftype != ntype));
+       WARN_ON(!err && dev->ieee80211_ptr->iftype != ntype);
 
-       if (dev && !err && (ntype != otype)) {
+       if (!err && (ntype != otype)) {
                if (otype == NL80211_IFTYPE_ADHOC)
                        cfg80211_clear_ibss(dev, false);
        }
 
  unlock:
+       dev_put(dev);
        cfg80211_put_dev(drv);
  unlock_rtnl:
        rtnl_unlock();
index d030c53..9e56f35 100644 (file)
@@ -103,7 +103,7 @@ int cfg80211_wext_siwmode(struct net_device *dev, struct iw_request_info *info,
 
        memset(&vifparams, 0, sizeof(vifparams));
 
-       ret = rdev->ops->change_virtual_intf(wdev->wiphy, dev->ifindex, type,
+       ret = rdev->ops->change_virtual_intf(wdev->wiphy, dev, type,
                                             NULL, &vifparams);
        WARN_ON(!ret && wdev->iftype != type);