diff options
Diffstat (limited to 'net/core/dev.c')
-rw-r--r-- | net/core/dev.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index ab9b8d0d115e..ae00b894e675 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -2403,17 +2403,20 @@ static void skb_warn_bad_offload(const struct sk_buff *skb) | |||
2403 | { | 2403 | { |
2404 | static const netdev_features_t null_features = 0; | 2404 | static const netdev_features_t null_features = 0; |
2405 | struct net_device *dev = skb->dev; | 2405 | struct net_device *dev = skb->dev; |
2406 | const char *driver = ""; | 2406 | const char *name = ""; |
2407 | 2407 | ||
2408 | if (!net_ratelimit()) | 2408 | if (!net_ratelimit()) |
2409 | return; | 2409 | return; |
2410 | 2410 | ||
2411 | if (dev && dev->dev.parent) | 2411 | if (dev) { |
2412 | driver = dev_driver_string(dev->dev.parent); | 2412 | if (dev->dev.parent) |
2413 | 2413 | name = dev_driver_string(dev->dev.parent); | |
2414 | else | ||
2415 | name = netdev_name(dev); | ||
2416 | } | ||
2414 | WARN(1, "%s: caps=(%pNF, %pNF) len=%d data_len=%d gso_size=%d " | 2417 | WARN(1, "%s: caps=(%pNF, %pNF) len=%d data_len=%d gso_size=%d " |
2415 | "gso_type=%d ip_summed=%d\n", | 2418 | "gso_type=%d ip_summed=%d\n", |
2416 | driver, dev ? &dev->features : &null_features, | 2419 | name, dev ? &dev->features : &null_features, |
2417 | skb->sk ? &skb->sk->sk_route_caps : &null_features, | 2420 | skb->sk ? &skb->sk->sk_route_caps : &null_features, |
2418 | skb->len, skb->data_len, skb_shinfo(skb)->gso_size, | 2421 | skb->len, skb->data_len, skb_shinfo(skb)->gso_size, |
2419 | skb_shinfo(skb)->gso_type, skb->ip_summed); | 2422 | skb_shinfo(skb)->gso_type, skb->ip_summed); |
@@ -6426,11 +6429,16 @@ int __netdev_update_features(struct net_device *dev) | |||
6426 | 6429 | ||
6427 | if (dev->netdev_ops->ndo_set_features) | 6430 | if (dev->netdev_ops->ndo_set_features) |
6428 | err = dev->netdev_ops->ndo_set_features(dev, features); | 6431 | err = dev->netdev_ops->ndo_set_features(dev, features); |
6432 | else | ||
6433 | err = 0; | ||
6429 | 6434 | ||
6430 | if (unlikely(err < 0)) { | 6435 | if (unlikely(err < 0)) { |
6431 | netdev_err(dev, | 6436 | netdev_err(dev, |
6432 | "set_features() failed (%d); wanted %pNF, left %pNF\n", | 6437 | "set_features() failed (%d); wanted %pNF, left %pNF\n", |
6433 | err, &features, &dev->features); | 6438 | err, &features, &dev->features); |
6439 | /* return non-0 since some features might have changed and | ||
6440 | * it's better to fire a spurious notification than miss it | ||
6441 | */ | ||
6434 | return -1; | 6442 | return -1; |
6435 | } | 6443 | } |
6436 | 6444 | ||