neigh: Do not set tbl->entry_size in ipv4/ipv6 neigh tables.
[firefly-linux-kernel-4.4.55.git] / net / atm / clip.c
index 852394072fa151956cec3e819da113024fbb6971..b1c7ada83b83a1c0620b02167c8fa0b91310f605 100644 (file)
@@ -189,6 +189,13 @@ static void clip_push(struct atm_vcc *vcc, struct sk_buff *skb)
        struct clip_vcc *clip_vcc = CLIP_VCC(vcc);
 
        pr_debug("\n");
+
+       if (!clip_devs) {
+               atm_return(vcc, skb->truesize);
+               kfree_skb(skb);
+               return;
+       }
+
        if (!skb) {
                pr_debug("removing VCC %p\n", clip_vcc);
                if (clip_vcc->entry)
@@ -315,7 +322,6 @@ static u32 clip_hash(const void *pkey, const struct net_device *dev, __u32 rnd)
 
 static struct neigh_table clip_tbl = {
        .family         = AF_INET,
-       .entry_size     = sizeof(struct neighbour)+sizeof(struct atmarp_entry),
        .key_len        = 4,
        .hash           = clip_hash,
        .constructor    = clip_constructor,
@@ -329,7 +335,7 @@ static struct neigh_table clip_tbl = {
                .gc_staletime           = 60 * HZ,
                .reachable_time         = 30 * HZ,
                .delay_probe_time       = 5 * HZ,
-               .queue_len              = 3,
+               .queue_len_bytes        = 64 * 1024,
                .ucast_probes           = 3,
                .mcast_probes           = 3,
                .anycast_delay          = 1 * HZ,
@@ -448,10 +454,7 @@ static netdev_tx_t clip_start_xmit(struct sk_buff *skb,
 
 static int clip_mkip(struct atm_vcc *vcc, int timeout)
 {
-       struct sk_buff_head *rq, queue;
        struct clip_vcc *clip_vcc;
-       struct sk_buff *skb, *tmp;
-       unsigned long flags;
 
        if (!vcc->push)
                return -EBADFD;
@@ -472,29 +475,9 @@ static int clip_mkip(struct atm_vcc *vcc, int timeout)
        vcc->push = clip_push;
        vcc->pop = clip_pop;
 
-       __skb_queue_head_init(&queue);
-       rq = &sk_atm(vcc)->sk_receive_queue;
-
-       spin_lock_irqsave(&rq->lock, flags);
-       skb_queue_splice_init(rq, &queue);
-       spin_unlock_irqrestore(&rq->lock, flags);
-
        /* re-process everything received between connection setup and MKIP */
-       skb_queue_walk_safe(&queue, skb, tmp) {
-               if (!clip_devs) {
-                       atm_return(vcc, skb->truesize);
-                       kfree_skb(skb);
-               } else {
-                       struct net_device *dev = skb->dev;
-                       unsigned int len = skb->len;
-
-                       skb_get(skb);
-                       clip_push(vcc, skb);
-                       dev->stats.rx_packets--;
-                       dev->stats.rx_bytes -= len;
-                       kfree_skb(skb);
-               }
-       }
+       vcc_process_recv_queue(vcc);
+
        return 0;
 }
 
@@ -551,6 +534,7 @@ static void clip_setup(struct net_device *dev)
 {
        dev->netdev_ops = &clip_netdev_ops;
        dev->type = ARPHRD_ATM;
+       dev->neigh_priv_len = sizeof(struct atmarp_entry);
        dev->hard_header_len = RFC1483LLC_LEN;
        dev->mtu = RFC1626_MTU;
        dev->tx_queue_len = 100;        /* "normal" queue (packets) */