aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/core/dev.c')
-rw-r--r--net/core/dev.c146
1 files changed, 115 insertions, 31 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index 367a586d0c8a..cf8a95f48cff 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -132,6 +132,7 @@
132#include <linux/hashtable.h> 132#include <linux/hashtable.h>
133#include <linux/vmalloc.h> 133#include <linux/vmalloc.h>
134#include <linux/if_macvlan.h> 134#include <linux/if_macvlan.h>
135#include <linux/errqueue.h>
135 136
136#include "net-sysfs.h" 137#include "net-sysfs.h"
137 138
@@ -1085,6 +1086,7 @@ static int dev_get_valid_name(struct net *net,
1085 */ 1086 */
1086int dev_change_name(struct net_device *dev, const char *newname) 1087int dev_change_name(struct net_device *dev, const char *newname)
1087{ 1088{
1089 unsigned char old_assign_type;
1088 char oldname[IFNAMSIZ]; 1090 char oldname[IFNAMSIZ];
1089 int err = 0; 1091 int err = 0;
1090 int ret; 1092 int ret;
@@ -1112,10 +1114,17 @@ int dev_change_name(struct net_device *dev, const char *newname)
1112 return err; 1114 return err;
1113 } 1115 }
1114 1116
1117 if (oldname[0] && !strchr(oldname, '%'))
1118 netdev_info(dev, "renamed from %s\n", oldname);
1119
1120 old_assign_type = dev->name_assign_type;
1121 dev->name_assign_type = NET_NAME_RENAMED;
1122
1115rollback: 1123rollback:
1116 ret = device_rename(&dev->dev, dev->name); 1124 ret = device_rename(&dev->dev, dev->name);
1117 if (ret) { 1125 if (ret) {
1118 memcpy(dev->name, oldname, IFNAMSIZ); 1126 memcpy(dev->name, oldname, IFNAMSIZ);
1127 dev->name_assign_type = old_assign_type;
1119 write_seqcount_end(&devnet_rename_seq); 1128 write_seqcount_end(&devnet_rename_seq);
1120 return ret; 1129 return ret;
1121 } 1130 }
@@ -1144,6 +1153,8 @@ rollback:
1144 write_seqcount_begin(&devnet_rename_seq); 1153 write_seqcount_begin(&devnet_rename_seq);
1145 memcpy(dev->name, oldname, IFNAMSIZ); 1154 memcpy(dev->name, oldname, IFNAMSIZ);
1146 memcpy(oldname, newname, IFNAMSIZ); 1155 memcpy(oldname, newname, IFNAMSIZ);
1156 dev->name_assign_type = old_assign_type;
1157 old_assign_type = NET_NAME_RENAMED;
1147 goto rollback; 1158 goto rollback;
1148 } else { 1159 } else {
1149 pr_err("%s: name change rollback failed: %d\n", 1160 pr_err("%s: name change rollback failed: %d\n",
@@ -2316,7 +2327,7 @@ __be16 skb_network_protocol(struct sk_buff *skb, int *depth)
2316 */ 2327 */
2317 if (type == htons(ETH_P_8021Q) || type == htons(ETH_P_8021AD)) { 2328 if (type == htons(ETH_P_8021Q) || type == htons(ETH_P_8021AD)) {
2318 if (vlan_depth) { 2329 if (vlan_depth) {
2319 if (unlikely(WARN_ON(vlan_depth < VLAN_HLEN))) 2330 if (WARN_ON(vlan_depth < VLAN_HLEN))
2320 return 0; 2331 return 0;
2321 vlan_depth -= VLAN_HLEN; 2332 vlan_depth -= VLAN_HLEN;
2322 } else { 2333 } else {
@@ -2414,8 +2425,8 @@ struct sk_buff *__skb_gso_segment(struct sk_buff *skb,
2414 2425
2415 skb_warn_bad_offload(skb); 2426 skb_warn_bad_offload(skb);
2416 2427
2417 if (skb_header_cloned(skb) && 2428 err = skb_cow_head(skb, 0);
2418 (err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC))) 2429 if (err < 0)
2419 return ERR_PTR(err); 2430 return ERR_PTR(err);
2420 } 2431 }
2421 2432
@@ -2576,13 +2587,19 @@ netdev_features_t netif_skb_features(struct sk_buff *skb)
2576 return harmonize_features(skb, features); 2587 return harmonize_features(skb, features);
2577 } 2588 }
2578 2589
2579 features &= (skb->dev->vlan_features | NETIF_F_HW_VLAN_CTAG_TX | 2590 features = netdev_intersect_features(features,
2580 NETIF_F_HW_VLAN_STAG_TX); 2591 skb->dev->vlan_features |
2592 NETIF_F_HW_VLAN_CTAG_TX |
2593 NETIF_F_HW_VLAN_STAG_TX);
2581 2594
2582 if (protocol == htons(ETH_P_8021Q) || protocol == htons(ETH_P_8021AD)) 2595 if (protocol == htons(ETH_P_8021Q) || protocol == htons(ETH_P_8021AD))
2583 features &= NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST | 2596 features = netdev_intersect_features(features,
2584 NETIF_F_GEN_CSUM | NETIF_F_HW_VLAN_CTAG_TX | 2597 NETIF_F_SG |
2585 NETIF_F_HW_VLAN_STAG_TX; 2598 NETIF_F_HIGHDMA |
2599 NETIF_F_FRAGLIST |
2600 NETIF_F_GEN_CSUM |
2601 NETIF_F_HW_VLAN_CTAG_TX |
2602 NETIF_F_HW_VLAN_STAG_TX);
2586 2603
2587 return harmonize_features(skb, features); 2604 return harmonize_features(skb, features);
2588} 2605}
@@ -2745,8 +2762,8 @@ static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q,
2745 /* 2762 /*
2746 * Heuristic to force contended enqueues to serialize on a 2763 * Heuristic to force contended enqueues to serialize on a
2747 * separate lock before trying to get qdisc main lock. 2764 * separate lock before trying to get qdisc main lock.
2748 * This permits __QDISC_STATE_RUNNING owner to get the lock more often 2765 * This permits __QDISC___STATE_RUNNING owner to get the lock more
2749 * and dequeue packets faster. 2766 * often and dequeue packets faster.
2750 */ 2767 */
2751 contended = qdisc_is_running(q); 2768 contended = qdisc_is_running(q);
2752 if (unlikely(contended)) 2769 if (unlikely(contended))
@@ -2866,6 +2883,9 @@ static int __dev_queue_xmit(struct sk_buff *skb, void *accel_priv)
2866 2883
2867 skb_reset_mac_header(skb); 2884 skb_reset_mac_header(skb);
2868 2885
2886 if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_SCHED_TSTAMP))
2887 __skb_tstamp_tx(skb, NULL, skb->sk, SCM_TSTAMP_SCHED);
2888
2869 /* Disable soft irqs for various locks below. Also 2889 /* Disable soft irqs for various locks below. Also
2870 * stops preemption for RCU. 2890 * stops preemption for RCU.
2871 */ 2891 */
@@ -3588,7 +3608,7 @@ another_round:
3588 3608
3589 if (skb->protocol == cpu_to_be16(ETH_P_8021Q) || 3609 if (skb->protocol == cpu_to_be16(ETH_P_8021Q) ||
3590 skb->protocol == cpu_to_be16(ETH_P_8021AD)) { 3610 skb->protocol == cpu_to_be16(ETH_P_8021AD)) {
3591 skb = vlan_untag(skb); 3611 skb = skb_vlan_untag(skb);
3592 if (unlikely(!skb)) 3612 if (unlikely(!skb))
3593 goto unlock; 3613 goto unlock;
3594 } 3614 }
@@ -4789,9 +4809,14 @@ static void netdev_adjacent_sysfs_del(struct net_device *dev,
4789 sysfs_remove_link(&(dev->dev.kobj), linkname); 4809 sysfs_remove_link(&(dev->dev.kobj), linkname);
4790} 4810}
4791 4811
4792#define netdev_adjacent_is_neigh_list(dev, dev_list) \ 4812static inline bool netdev_adjacent_is_neigh_list(struct net_device *dev,
4793 (dev_list == &dev->adj_list.upper || \ 4813 struct net_device *adj_dev,
4794 dev_list == &dev->adj_list.lower) 4814 struct list_head *dev_list)
4815{
4816 return (dev_list == &dev->adj_list.upper ||
4817 dev_list == &dev->adj_list.lower) &&
4818 net_eq(dev_net(dev), dev_net(adj_dev));
4819}
4795 4820
4796static int __netdev_adjacent_dev_insert(struct net_device *dev, 4821static int __netdev_adjacent_dev_insert(struct net_device *dev,
4797 struct net_device *adj_dev, 4822 struct net_device *adj_dev,
@@ -4821,7 +4846,7 @@ static int __netdev_adjacent_dev_insert(struct net_device *dev,
4821 pr_debug("dev_hold for %s, because of link added from %s to %s\n", 4846 pr_debug("dev_hold for %s, because of link added from %s to %s\n",
4822 adj_dev->name, dev->name, adj_dev->name); 4847 adj_dev->name, dev->name, adj_dev->name);
4823 4848
4824 if (netdev_adjacent_is_neigh_list(dev, dev_list)) { 4849 if (netdev_adjacent_is_neigh_list(dev, adj_dev, dev_list)) {
4825 ret = netdev_adjacent_sysfs_add(dev, adj_dev, dev_list); 4850 ret = netdev_adjacent_sysfs_add(dev, adj_dev, dev_list);
4826 if (ret) 4851 if (ret)
4827 goto free_adj; 4852 goto free_adj;
@@ -4842,7 +4867,7 @@ static int __netdev_adjacent_dev_insert(struct net_device *dev,
4842 return 0; 4867 return 0;
4843 4868
4844remove_symlinks: 4869remove_symlinks:
4845 if (netdev_adjacent_is_neigh_list(dev, dev_list)) 4870 if (netdev_adjacent_is_neigh_list(dev, adj_dev, dev_list))
4846 netdev_adjacent_sysfs_del(dev, adj_dev->name, dev_list); 4871 netdev_adjacent_sysfs_del(dev, adj_dev->name, dev_list);
4847free_adj: 4872free_adj:
4848 kfree(adj); 4873 kfree(adj);
@@ -4875,7 +4900,7 @@ static void __netdev_adjacent_dev_remove(struct net_device *dev,
4875 if (adj->master) 4900 if (adj->master)
4876 sysfs_remove_link(&(dev->dev.kobj), "master"); 4901 sysfs_remove_link(&(dev->dev.kobj), "master");
4877 4902
4878 if (netdev_adjacent_is_neigh_list(dev, dev_list)) 4903 if (netdev_adjacent_is_neigh_list(dev, adj_dev, dev_list))
4879 netdev_adjacent_sysfs_del(dev, adj_dev->name, dev_list); 4904 netdev_adjacent_sysfs_del(dev, adj_dev->name, dev_list);
4880 4905
4881 list_del_rcu(&adj->list); 4906 list_del_rcu(&adj->list);
@@ -5145,11 +5170,65 @@ void netdev_upper_dev_unlink(struct net_device *dev,
5145} 5170}
5146EXPORT_SYMBOL(netdev_upper_dev_unlink); 5171EXPORT_SYMBOL(netdev_upper_dev_unlink);
5147 5172
5173void netdev_adjacent_add_links(struct net_device *dev)
5174{
5175 struct netdev_adjacent *iter;
5176
5177 struct net *net = dev_net(dev);
5178
5179 list_for_each_entry(iter, &dev->adj_list.upper, list) {
5180 if (!net_eq(net,dev_net(iter->dev)))
5181 continue;
5182 netdev_adjacent_sysfs_add(iter->dev, dev,
5183 &iter->dev->adj_list.lower);
5184 netdev_adjacent_sysfs_add(dev, iter->dev,
5185 &dev->adj_list.upper);
5186 }
5187
5188 list_for_each_entry(iter, &dev->adj_list.lower, list) {
5189 if (!net_eq(net,dev_net(iter->dev)))
5190 continue;
5191 netdev_adjacent_sysfs_add(iter->dev, dev,
5192 &iter->dev->adj_list.upper);
5193 netdev_adjacent_sysfs_add(dev, iter->dev,
5194 &dev->adj_list.lower);
5195 }
5196}
5197
5198void netdev_adjacent_del_links(struct net_device *dev)
5199{
5200 struct netdev_adjacent *iter;
5201
5202 struct net *net = dev_net(dev);
5203
5204 list_for_each_entry(iter, &dev->adj_list.upper, list) {
5205 if (!net_eq(net,dev_net(iter->dev)))
5206 continue;
5207 netdev_adjacent_sysfs_del(iter->dev, dev->name,
5208 &iter->dev->adj_list.lower);
5209 netdev_adjacent_sysfs_del(dev, iter->dev->name,
5210 &dev->adj_list.upper);
5211 }
5212
5213 list_for_each_entry(iter, &dev->adj_list.lower, list) {
5214 if (!net_eq(net,dev_net(iter->dev)))
5215 continue;
5216 netdev_adjacent_sysfs_del(iter->dev, dev->name,
5217 &iter->dev->adj_list.upper);
5218 netdev_adjacent_sysfs_del(dev, iter->dev->name,
5219 &dev->adj_list.lower);
5220 }
5221}
5222
5148void netdev_adjacent_rename_links(struct net_device *dev, char *oldname) 5223void netdev_adjacent_rename_links(struct net_device *dev, char *oldname)
5149{ 5224{
5150 struct netdev_adjacent *iter; 5225 struct netdev_adjacent *iter;
5151 5226
5227 struct net *net = dev_net(dev);
5228
5152 list_for_each_entry(iter, &dev->adj_list.upper, list) { 5229 list_for_each_entry(iter, &dev->adj_list.upper, list) {
5230 if (!net_eq(net,dev_net(iter->dev)))
5231 continue;
5153 netdev_adjacent_sysfs_del(iter->dev, oldname, 5232 netdev_adjacent_sysfs_del(iter->dev, oldname,
5154 &iter->dev->adj_list.lower); 5233 &iter->dev->adj_list.lower);
5155 netdev_adjacent_sysfs_add(iter->dev, dev, 5234 netdev_adjacent_sysfs_add(iter->dev, dev,
@@ -5157,6 +5236,8 @@ void netdev_adjacent_rename_links(struct net_device *dev, char *oldname)
5157 } 5236 }
5158 5237
5159 list_for_each_entry(iter, &dev->adj_list.lower, list) { 5238 list_for_each_entry(iter, &dev->adj_list.lower, list) {
5239 if (!net_eq(net,dev_net(iter->dev)))
5240 continue;
5160 netdev_adjacent_sysfs_del(iter->dev, oldname, 5241 netdev_adjacent_sysfs_del(iter->dev, oldname,
5161 &iter->dev->adj_list.upper); 5242 &iter->dev->adj_list.upper);
5162 netdev_adjacent_sysfs_add(iter->dev, dev, 5243 netdev_adjacent_sysfs_add(iter->dev, dev,
@@ -5440,13 +5521,9 @@ int __dev_change_flags(struct net_device *dev, unsigned int flags)
5440 */ 5521 */
5441 5522
5442 ret = 0; 5523 ret = 0;
5443 if ((old_flags ^ flags) & IFF_UP) { /* Bit is different ? */ 5524 if ((old_flags ^ flags) & IFF_UP)
5444 ret = ((old_flags & IFF_UP) ? __dev_close : __dev_open)(dev); 5525 ret = ((old_flags & IFF_UP) ? __dev_close : __dev_open)(dev);
5445 5526
5446 if (!ret)
5447 dev_set_rx_mode(dev);
5448 }
5449
5450 if ((flags ^ dev->gflags) & IFF_PROMISC) { 5527 if ((flags ^ dev->gflags) & IFF_PROMISC) {
5451 int inc = (flags & IFF_PROMISC) ? 1 : -1; 5528 int inc = (flags & IFF_PROMISC) ? 1 : -1;
5452 unsigned int old_flags = dev->flags; 5529 unsigned int old_flags = dev->flags;
@@ -6446,17 +6523,19 @@ void netdev_freemem(struct net_device *dev)
6446 6523
6447/** 6524/**
6448 * alloc_netdev_mqs - allocate network device 6525 * alloc_netdev_mqs - allocate network device
6449 * @sizeof_priv: size of private data to allocate space for 6526 * @sizeof_priv: size of private data to allocate space for
6450 * @name: device name format string 6527 * @name: device name format string
6451 * @setup: callback to initialize device 6528 * @name_assign_type: origin of device name
6452 * @txqs: the number of TX subqueues to allocate 6529 * @setup: callback to initialize device
6453 * @rxqs: the number of RX subqueues to allocate 6530 * @txqs: the number of TX subqueues to allocate
6531 * @rxqs: the number of RX subqueues to allocate
6454 * 6532 *
6455 * Allocates a struct net_device with private data area for driver use 6533 * Allocates a struct net_device with private data area for driver use
6456 * and performs basic initialization. Also allocates subqueue structs 6534 * and performs basic initialization. Also allocates subqueue structs
6457 * for each queue on the device. 6535 * for each queue on the device.
6458 */ 6536 */
6459struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name, 6537struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name,
6538 unsigned char name_assign_type,
6460 void (*setup)(struct net_device *), 6539 void (*setup)(struct net_device *),
6461 unsigned int txqs, unsigned int rxqs) 6540 unsigned int txqs, unsigned int rxqs)
6462{ 6541{
@@ -6535,6 +6614,7 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name,
6535#endif 6614#endif
6536 6615
6537 strcpy(dev->name, name); 6616 strcpy(dev->name, name);
6617 dev->name_assign_type = name_assign_type;
6538 dev->group = INIT_NETDEV_GROUP; 6618 dev->group = INIT_NETDEV_GROUP;
6539 if (!dev->ethtool_ops) 6619 if (!dev->ethtool_ops)
6540 dev->ethtool_ops = &default_ethtool_ops; 6620 dev->ethtool_ops = &default_ethtool_ops;
@@ -6760,6 +6840,7 @@ int dev_change_net_namespace(struct net_device *dev, struct net *net, const char
6760 6840
6761 /* Send a netdev-removed uevent to the old namespace */ 6841 /* Send a netdev-removed uevent to the old namespace */
6762 kobject_uevent(&dev->dev.kobj, KOBJ_REMOVE); 6842 kobject_uevent(&dev->dev.kobj, KOBJ_REMOVE);
6843 netdev_adjacent_del_links(dev);
6763 6844
6764 /* Actually switch the network namespace */ 6845 /* Actually switch the network namespace */
6765 dev_net_set(dev, net); 6846 dev_net_set(dev, net);
@@ -6774,6 +6855,7 @@ int dev_change_net_namespace(struct net_device *dev, struct net *net, const char
6774 6855
6775 /* Send a netdev-add uevent to the new namespace */ 6856 /* Send a netdev-add uevent to the new namespace */
6776 kobject_uevent(&dev->dev.kobj, KOBJ_ADD); 6857 kobject_uevent(&dev->dev.kobj, KOBJ_ADD);
6858 netdev_adjacent_add_links(dev);
6777 6859
6778 /* Fixup kobjects */ 6860 /* Fixup kobjects */
6779 err = device_rename(&dev->dev, dev->name); 6861 err = device_rename(&dev->dev, dev->name);
@@ -6946,12 +7028,14 @@ static int __netdev_printk(const char *level, const struct net_device *dev,
6946 if (dev && dev->dev.parent) { 7028 if (dev && dev->dev.parent) {
6947 r = dev_printk_emit(level[1] - '0', 7029 r = dev_printk_emit(level[1] - '0',
6948 dev->dev.parent, 7030 dev->dev.parent,
6949 "%s %s %s: %pV", 7031 "%s %s %s%s: %pV",
6950 dev_driver_string(dev->dev.parent), 7032 dev_driver_string(dev->dev.parent),
6951 dev_name(dev->dev.parent), 7033 dev_name(dev->dev.parent),
6952 netdev_name(dev), vaf); 7034 netdev_name(dev), netdev_reg_state(dev),
7035 vaf);
6953 } else if (dev) { 7036 } else if (dev) {
6954 r = printk("%s%s: %pV", level, netdev_name(dev), vaf); 7037 r = printk("%s%s%s: %pV", level, netdev_name(dev),
7038 netdev_reg_state(dev), vaf);
6955 } else { 7039 } else {
6956 r = printk("%s(NULL net_device): %pV", level, vaf); 7040 r = printk("%s(NULL net_device): %pV", level, vaf);
6957 } 7041 }
@@ -7103,7 +7187,7 @@ static void __net_exit default_device_exit_batch(struct list_head *net_list)
7103 rtnl_lock_unregistering(net_list); 7187 rtnl_lock_unregistering(net_list);
7104 list_for_each_entry(net, net_list, exit_list) { 7188 list_for_each_entry(net, net_list, exit_list) {
7105 for_each_netdev_reverse(net, dev) { 7189 for_each_netdev_reverse(net, dev) {
7106 if (dev->rtnl_link_ops) 7190 if (dev->rtnl_link_ops && dev->rtnl_link_ops->dellink)
7107 dev->rtnl_link_ops->dellink(dev, &dev_kill_list); 7191 dev->rtnl_link_ops->dellink(dev, &dev_kill_list);
7108 else 7192 else
7109 unregister_netdevice_queue(dev, &dev_kill_list); 7193 unregister_netdevice_queue(dev, &dev_kill_list);