net: call dev_alloc_name from register_netdevice

Force dev_alloc_name() to be called from register_netdevice() by
dev_get_valid_name(). That allows to remove multiple explicit
dev_alloc_name() calls.

The possibility to call dev_alloc_name in advance remains.

This also fixes veth creation regresion caused by
84c49d8c3e

Signed-off-by: Jiri Pirko <jpirko@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Jiri Pirko 2011-04-30 01:21:32 +00:00 committed by David S. Miller
parent e892067497
commit 1c5cae815d
20 changed files with 12 additions and 134 deletions

View File

@ -393,16 +393,6 @@ static int __devinit ieee802154fake_probe(struct platform_device *pdev)
priv = netdev_priv(dev); priv = netdev_priv(dev);
priv->phy = phy; priv->phy = phy;
/*
* If the name is a format string the caller wants us to do a
* name allocation.
*/
if (strchr(dev->name, '%')) {
err = dev_alloc_name(dev, dev->name);
if (err < 0)
goto out;
}
wpan_phy_set_dev(phy, &pdev->dev); wpan_phy_set_dev(phy, &pdev->dev);
SET_NETDEV_DEV(dev, &phy->dev); SET_NETDEV_DEV(dev, &phy->dev);

View File

@ -4917,8 +4917,9 @@ int bond_create(struct net *net, const char *name)
rtnl_lock(); rtnl_lock();
bond_dev = alloc_netdev_mq(sizeof(struct bonding), name ? name : "", bond_dev = alloc_netdev_mq(sizeof(struct bonding),
bond_setup, tx_queues); name ? name : "bond%d",
bond_setup, tx_queues);
if (!bond_dev) { if (!bond_dev) {
pr_err("%s: eek! can't alloc netdev!\n", name); pr_err("%s: eek! can't alloc netdev!\n", name);
rtnl_unlock(); rtnl_unlock();
@ -4928,26 +4929,10 @@ int bond_create(struct net *net, const char *name)
dev_net_set(bond_dev, net); dev_net_set(bond_dev, net);
bond_dev->rtnl_link_ops = &bond_link_ops; bond_dev->rtnl_link_ops = &bond_link_ops;
if (!name) {
res = dev_alloc_name(bond_dev, "bond%d");
if (res < 0)
goto out;
} else {
/*
* If we're given a name to register
* we need to ensure that its not already
* registered
*/
res = -EEXIST;
if (__dev_get_by_name(net, name) != NULL)
goto out;
}
res = register_netdevice(bond_dev); res = register_netdevice(bond_dev);
netif_carrier_off(bond_dev); netif_carrier_off(bond_dev);
out:
rtnl_unlock(); rtnl_unlock();
if (res < 0) if (res < 0)
bond_destructor(bond_dev); bond_destructor(bond_dev);

View File

@ -168,10 +168,6 @@ static int __init dummy_init_one(void)
if (!dev_dummy) if (!dev_dummy)
return -ENOMEM; return -ENOMEM;
err = dev_alloc_name(dev_dummy, dev_dummy->name);
if (err < 0)
goto err;
dev_dummy->rtnl_link_ops = &dummy_link_ops; dev_dummy->rtnl_link_ops = &dummy_link_ops;
err = register_netdevice(dev_dummy); err = register_netdevice(dev_dummy);
if (err < 0) if (err < 0)

View File

@ -516,10 +516,6 @@ static int bpq_new_device(struct net_device *edev)
memcpy(bpq->dest_addr, bcast_addr, sizeof(bpq_eth_addr)); memcpy(bpq->dest_addr, bcast_addr, sizeof(bpq_eth_addr));
memcpy(bpq->acpt_addr, bcast_addr, sizeof(bpq_eth_addr)); memcpy(bpq->acpt_addr, bcast_addr, sizeof(bpq_eth_addr));
err = dev_alloc_name(ndev, ndev->name);
if (err < 0)
goto error;
err = register_netdevice(ndev); err = register_netdevice(ndev);
if (err) if (err)
goto error; goto error;

View File

@ -233,10 +233,6 @@ static int __init ifb_init_one(int index)
if (!dev_ifb) if (!dev_ifb)
return -ENOMEM; return -ENOMEM;
err = dev_alloc_name(dev_ifb, dev_ifb->name);
if (err < 0)
goto err;
dev_ifb->rtnl_link_ops = &ifb_link_ops; dev_ifb->rtnl_link_ops = &ifb_link_ops;
err = register_netdevice(dev_ifb); err = register_netdevice(dev_ifb);
if (err < 0) if (err < 0)

View File

@ -1099,12 +1099,6 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr)
tun_net_init(dev); tun_net_init(dev);
if (strchr(dev->name, '%')) {
err = dev_alloc_name(dev, dev->name);
if (err < 0)
goto err_free_sk;
}
dev->hw_features = NETIF_F_SG | NETIF_F_FRAGLIST | dev->hw_features = NETIF_F_SG | NETIF_F_FRAGLIST |
TUN_USER_FEATURES; TUN_USER_FEATURES;
dev->features = dev->hw_features; dev->features = dev->hw_features;

View File

@ -341,10 +341,6 @@ static int dlci_add(struct dlci_add *dlci)
} }
} }
err = dev_alloc_name(master, master->name);
if (err < 0)
goto err2;
*(short *)(master->dev_addr) = dlci->dlci; *(short *)(master->dev_addr) = dlci->dlci;
dlp = netdev_priv(master); dlp = netdev_priv(master);

View File

@ -1070,7 +1070,7 @@ static int fr_add_pvc(struct net_device *frad, unsigned int dlci, int type)
hdlc_device *hdlc = dev_to_hdlc(frad); hdlc_device *hdlc = dev_to_hdlc(frad);
pvc_device *pvc; pvc_device *pvc;
struct net_device *dev; struct net_device *dev;
int result, used; int used;
if ((pvc = add_pvc(frad, dlci)) == NULL) { if ((pvc = add_pvc(frad, dlci)) == NULL) {
printk(KERN_WARNING "%s: Memory squeeze on fr_add_pvc()\n", printk(KERN_WARNING "%s: Memory squeeze on fr_add_pvc()\n",
@ -1106,13 +1106,6 @@ static int fr_add_pvc(struct net_device *frad, unsigned int dlci, int type)
dev->tx_queue_len = 0; dev->tx_queue_len = 0;
dev->ml_priv = pvc; dev->ml_priv = pvc;
result = dev_alloc_name(dev, dev->name);
if (result < 0) {
free_netdev(dev);
delete_unused_pvcs(hdlc);
return result;
}
if (register_netdevice(dev) != 0) { if (register_netdevice(dev) != 0) {
free_netdev(dev); free_netdev(dev);
delete_unused_pvcs(hdlc); delete_unused_pvcs(hdlc);

View File

@ -338,10 +338,6 @@ static int lapbeth_new_device(struct net_device *dev)
dev_hold(dev); dev_hold(dev);
lapbeth->ethdev = dev; lapbeth->ethdev = dev;
rc = dev_alloc_name(ndev, ndev->name);
if (rc < 0)
goto fail;
rc = -EIO; rc = -EIO;
if (register_netdevice(ndev)) if (register_netdevice(ndev))
goto fail; goto fail;

View File

@ -79,13 +79,8 @@ struct net_device * hostap_add_interface(struct local_info *local,
if (!rtnl_locked) if (!rtnl_locked)
rtnl_lock(); rtnl_lock();
ret = 0;
if (strchr(dev->name, '%'))
ret = dev_alloc_name(dev, dev->name);
SET_NETDEV_DEV(dev, mdev->dev.parent); SET_NETDEV_DEV(dev, mdev->dev.parent);
if (ret >= 0) ret = register_netdevice(dev);
ret = register_netdevice(dev);
if (!rtnl_locked) if (!rtnl_locked)
rtnl_unlock(); rtnl_unlock();

View File

@ -1515,19 +1515,10 @@ static int __init init_mac80211_hwsim(void)
if (hwsim_mon == NULL) if (hwsim_mon == NULL)
goto failed; goto failed;
rtnl_lock(); err = register_netdev(hwsim_mon);
err = dev_alloc_name(hwsim_mon, hwsim_mon->name);
if (err < 0) if (err < 0)
goto failed_mon; goto failed_mon;
err = register_netdevice(hwsim_mon);
if (err < 0)
goto failed_mon;
rtnl_unlock();
return 0; return 0;
failed_mon: failed_mon:

View File

@ -706,10 +706,6 @@ static struct mwifiex_private *mwifiex_add_interface(
dev_err(adapter->dev, "no memory available for netdevice\n"); dev_err(adapter->dev, "no memory available for netdevice\n");
goto error; goto error;
} }
if (dev_alloc_name(dev, dev->name)) {
dev_err(adapter->dev, "unable to alloc name for netdevice\n");
goto error;
}
if (mwifiex_register_cfg80211(dev, adapter->priv[bss_index]->curr_addr, if (mwifiex_register_cfg80211(dev, adapter->priv[bss_index]->curr_addr,
adapter->priv[bss_index]) != 0) { adapter->priv[bss_index]) != 0) {

View File

@ -1994,8 +1994,6 @@ static struct net_device *netiucv_init_netdevice(char *username)
netiucv_setup_netdevice); netiucv_setup_netdevice);
if (!dev) if (!dev)
return NULL; return NULL;
if (dev_alloc_name(dev, dev->name) < 0)
goto out_netdev;
privptr = netdev_priv(dev); privptr = netdev_priv(dev);
privptr->fsm = init_fsm("netiucvdev", dev_state_names, privptr->fsm = init_fsm("netiucvdev", dev_state_names,

View File

@ -948,7 +948,7 @@ int dev_alloc_name(struct net_device *dev, const char *name)
} }
EXPORT_SYMBOL(dev_alloc_name); EXPORT_SYMBOL(dev_alloc_name);
static int dev_get_valid_name(struct net_device *dev, const char *name, bool fmt) static int dev_get_valid_name(struct net_device *dev, const char *name)
{ {
struct net *net; struct net *net;
@ -958,7 +958,7 @@ static int dev_get_valid_name(struct net_device *dev, const char *name, bool fmt
if (!dev_valid_name(name)) if (!dev_valid_name(name))
return -EINVAL; return -EINVAL;
if (fmt && strchr(name, '%')) if (strchr(name, '%'))
return dev_alloc_name(dev, name); return dev_alloc_name(dev, name);
else if (__dev_get_by_name(net, name)) else if (__dev_get_by_name(net, name))
return -EEXIST; return -EEXIST;
@ -995,7 +995,7 @@ int dev_change_name(struct net_device *dev, const char *newname)
memcpy(oldname, dev->name, IFNAMSIZ); memcpy(oldname, dev->name, IFNAMSIZ);
err = dev_get_valid_name(dev, newname, 1); err = dev_get_valid_name(dev, newname);
if (err < 0) if (err < 0)
return err; return err;
@ -5420,8 +5420,8 @@ int register_netdevice(struct net_device *dev)
} }
} }
ret = dev_get_valid_name(dev, dev->name, 0); ret = dev_get_valid_name(dev, dev->name);
if (ret) if (ret < 0)
goto err_uninit; goto err_uninit;
dev->ifindex = dev_new_index(net); dev->ifindex = dev_new_index(net);
@ -5562,19 +5562,7 @@ int register_netdev(struct net_device *dev)
int err; int err;
rtnl_lock(); rtnl_lock();
/*
* If the name is a format string the caller wants us to do a
* name allocation.
*/
if (strchr(dev->name, '%')) {
err = dev_alloc_name(dev, dev->name);
if (err < 0)
goto out;
}
err = register_netdevice(dev); err = register_netdevice(dev);
out:
rtnl_unlock(); rtnl_unlock();
return err; return err;
} }
@ -6056,7 +6044,7 @@ int dev_change_net_namespace(struct net_device *dev, struct net *net, const char
/* We get here if we can't use the current device name */ /* We get here if we can't use the current device name */
if (!pat) if (!pat)
goto out; goto out;
if (dev_get_valid_name(dev, pat, 1)) if (dev_get_valid_name(dev, pat) < 0)
goto out; goto out;
} }

View File

@ -1572,12 +1572,6 @@ struct net_device *rtnl_create_link(struct net *src_net, struct net *net,
dev->rtnl_link_state = RTNL_LINK_INITIALIZING; dev->rtnl_link_state = RTNL_LINK_INITIALIZING;
dev->real_num_tx_queues = real_num_queues; dev->real_num_tx_queues = real_num_queues;
if (strchr(dev->name, '%')) {
err = dev_alloc_name(dev, dev->name);
if (err < 0)
goto err_free;
}
if (tb[IFLA_MTU]) if (tb[IFLA_MTU])
dev->mtu = nla_get_u32(tb[IFLA_MTU]); dev->mtu = nla_get_u32(tb[IFLA_MTU]);
if (tb[IFLA_ADDRESS]) if (tb[IFLA_ADDRESS])
@ -1597,8 +1591,6 @@ struct net_device *rtnl_create_link(struct net *src_net, struct net *net,
return dev; return dev;
err_free:
free_netdev(dev);
err: err:
return ERR_PTR(err); return ERR_PTR(err);
} }

View File

@ -413,11 +413,6 @@ static struct ip_tunnel *ipgre_tunnel_locate(struct net *net,
dev_net_set(dev, net); dev_net_set(dev, net);
if (strchr(name, '%')) {
if (dev_alloc_name(dev, name) < 0)
goto failed_free;
}
nt = netdev_priv(dev); nt = netdev_priv(dev);
nt->parms = *parms; nt->parms = *parms;
dev->rtnl_link_ops = &ipgre_link_ops; dev->rtnl_link_ops = &ipgre_link_ops;

View File

@ -276,11 +276,6 @@ static struct ip_tunnel * ipip_tunnel_locate(struct net *net,
dev_net_set(dev, net); dev_net_set(dev, net);
if (strchr(name, '%')) {
if (dev_alloc_name(dev, name) < 0)
goto failed_free;
}
nt = netdev_priv(dev); nt = netdev_priv(dev);
nt->parms = *parms; nt->parms = *parms;

View File

@ -280,11 +280,6 @@ static struct ip6_tnl *ip6_tnl_create(struct net *net, struct ip6_tnl_parm *p)
dev_net_set(dev, net); dev_net_set(dev, net);
if (strchr(name, '%')) {
if (dev_alloc_name(dev, name) < 0)
goto failed_free;
}
t = netdev_priv(dev); t = netdev_priv(dev);
t->parms = *p; t->parms = *p;
err = ip6_tnl_dev_init(dev); err = ip6_tnl_dev_init(dev);

View File

@ -250,11 +250,6 @@ static struct ip_tunnel *ipip6_tunnel_locate(struct net *net,
dev_net_set(dev, net); dev_net_set(dev, net);
if (strchr(name, '%')) {
if (dev_alloc_name(dev, name) < 0)
goto failed_free;
}
nt = netdev_priv(dev); nt = netdev_priv(dev);
nt->parms = *parms; nt->parms = *parms;

View File

@ -1144,10 +1144,6 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name,
+ IEEE80211_ENCRYPT_HEADROOM; + IEEE80211_ENCRYPT_HEADROOM;
ndev->needed_tailroom = IEEE80211_ENCRYPT_TAILROOM; ndev->needed_tailroom = IEEE80211_ENCRYPT_TAILROOM;
ret = dev_alloc_name(ndev, ndev->name);
if (ret < 0)
goto fail;
ieee80211_assign_perm_addr(local, ndev, type); ieee80211_assign_perm_addr(local, ndev, type);
memcpy(ndev->dev_addr, ndev->perm_addr, ETH_ALEN); memcpy(ndev->dev_addr, ndev->perm_addr, ETH_ALEN);
SET_NETDEV_DEV(ndev, wiphy_dev(local->hw.wiphy)); SET_NETDEV_DEV(ndev, wiphy_dev(local->hw.wiphy));