]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - net/core/dev.c
netdev_printk/netif_printk: Remove a superfluous logging colon
[mirror_ubuntu-bionic-kernel.git] / net / core / dev.c
index a39354ee14322e5b300646f3866329d22fc20bc8..cb9d43be07e7ee7e998c743cbf37ad9200b14c32 100644 (file)
@@ -1642,6 +1642,19 @@ static inline int deliver_skb(struct sk_buff *skb,
        return pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
 }
 
+static inline bool skb_loop_sk(struct packet_type *ptype, struct sk_buff *skb)
+{
+       if (ptype->af_packet_priv == NULL)
+               return false;
+
+       if (ptype->id_match)
+               return ptype->id_match(ptype, skb->sk);
+       else if ((struct sock *)ptype->af_packet_priv == skb->sk)
+               return true;
+
+       return false;
+}
+
 /*
  *     Support routine. Sends outgoing frames to any network
  *     taps currently in use.
@@ -1659,8 +1672,7 @@ static void dev_queue_xmit_nit(struct sk_buff *skb, struct net_device *dev)
                 * they originated from - MvS (miquels@drinkel.ow.org)
                 */
                if ((ptype->dev == dev || !ptype->dev) &&
-                   (ptype->af_packet_priv == NULL ||
-                    (struct sock *)ptype->af_packet_priv != skb->sk)) {
+                   (!skb_loop_sk(ptype, skb))) {
                        if (pt_prev) {
                                deliver_skb(skb2, pt_prev, skb->dev);
                                pt_prev = ptype;
@@ -2635,15 +2647,16 @@ void __skb_get_rxhash(struct sk_buff *skb)
        if (!skb_flow_dissect(skb, &keys))
                return;
 
-       if (keys.ports) {
-               if ((__force u16)keys.port16[1] < (__force u16)keys.port16[0])
-                       swap(keys.port16[0], keys.port16[1]);
+       if (keys.ports)
                skb->l4_rxhash = 1;
-       }
 
        /* get a consistent hash (same value on both flow directions) */
-       if ((__force u32)keys.dst < (__force u32)keys.src)
+       if (((__force u32)keys.dst < (__force u32)keys.src) ||
+           (((__force u32)keys.dst == (__force u32)keys.src) &&
+            ((__force u16)keys.port16[1] < (__force u16)keys.port16[0]))) {
                swap(keys.dst, keys.src);
+               swap(keys.port16[0], keys.port16[1]);
+       }
 
        hash = jhash_3words((__force u32)keys.dst,
                            (__force u32)keys.src,
@@ -5732,6 +5745,7 @@ EXPORT_SYMBOL(netdev_refcnt_read);
 
 /**
  * netdev_wait_allrefs - wait until all references are gone.
+ * @dev: target net_device
  *
  * This is called when unregistering network devices.
  *
@@ -6409,22 +6423,30 @@ const char *netdev_drivername(const struct net_device *dev)
        return empty;
 }
 
-int __netdev_printk(const char *level, const struct net_device *dev,
+static int __netdev_printk(const char *level, const struct net_device *dev,
                           struct va_format *vaf)
 {
        int r;
 
-       if (dev && dev->dev.parent)
-               r = dev_printk(level, dev->dev.parent, "%s: %pV",
-                              netdev_name(dev), vaf);
-       else if (dev)
+       if (dev && dev->dev.parent) {
+               char dict[128];
+               size_t dictlen = create_syslog_header(dev->dev.parent,
+                                                     dict, sizeof(dict));
+
+               r = printk_emit(0, level[1] - '0',
+                               dictlen ? dict : NULL, dictlen,
+                               "%s %s %s: %pV",
+                               dev_driver_string(dev->dev.parent),
+                               dev_name(dev->dev.parent),
+                               netdev_name(dev), vaf);
+       } else if (dev) {
                r = printk("%s%s: %pV", level, netdev_name(dev), vaf);
-       else
+       } else {
                r = printk("%s(NULL net_device): %pV", level, vaf);
+       }
 
        return r;
 }
-EXPORT_SYMBOL(__netdev_printk);
 
 int netdev_printk(const char *level, const struct net_device *dev,
                  const char *format, ...)
@@ -6439,6 +6461,7 @@ int netdev_printk(const char *level, const struct net_device *dev,
        vaf.va = &args;
 
        r = __netdev_printk(level, dev, &vaf);
+
        va_end(args);
 
        return r;
@@ -6458,6 +6481,7 @@ int func(const struct net_device *dev, const char *fmt, ...)      \
        vaf.va = &args;                                         \
                                                                \
        r = __netdev_printk(level, dev, &vaf);                  \
+                                                               \
        va_end(args);                                           \
                                                                \
        return r;                                               \