net: pending_confirm is not used anymore
authorJulian Anastasov <ja@ssi.bg>
Mon, 6 Feb 2017 21:14:17 +0000 (23:14 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 7 Feb 2017 18:07:47 +0000 (13:07 -0500)
When same struct dst_entry can be used for many different
neighbours we can not use it for pending confirmations.
As last step, we can remove the pending_confirm flag.

Reported-by: YueHaibing <yuehaibing@huawei.com>
Fixes: 5110effee8fd ("net: Do delayed neigh confirmation.")
Fixes: f2bb4bedf35d ("ipv4: Cache output routes in fib_info nexthops.")
Signed-off-by: Julian Anastasov <ja@ssi.bg>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/dst.h
net/core/dst.c

index 3a3b34b..84a1043 100644 (file)
@@ -59,8 +59,6 @@ struct dst_entry {
 #define DST_XFRM_QUEUE         0x0100
 #define DST_METADATA           0x0200
 
-       unsigned short          pending_confirm;
-
        short                   error;
 
        /* A non-zero value of dst->obsolete forces by-hand validation
@@ -78,6 +76,8 @@ struct dst_entry {
 #define DST_OBSOLETE_KILL      -2
        unsigned short          header_len;     /* more space at head required */
        unsigned short          trailer_len;    /* space to reserve at tail */
+       unsigned short          __pad3;
+
 #ifdef CONFIG_IP_ROUTE_CLASSID
        __u32                   tclassid;
 #else
@@ -440,7 +440,6 @@ static inline void dst_rcu_free(struct rcu_head *head)
 
 static inline void dst_confirm(struct dst_entry *dst)
 {
-       dst->pending_confirm = 1;
 }
 
 static inline int dst_neigh_output(struct dst_entry *dst, struct neighbour *n,
@@ -448,15 +447,6 @@ static inline int dst_neigh_output(struct dst_entry *dst, struct neighbour *n,
 {
        const struct hh_cache *hh;
 
-       if (dst->pending_confirm) {
-               unsigned long now = jiffies;
-
-               dst->pending_confirm = 0;
-               /* avoid dirtying neighbour */
-               if (n->confirmed != now)
-                       n->confirmed = now;
-       }
-
        hh = &n->hh;
        if ((n->nud_state & NUD_CONNECTED) && hh->hh_len)
                return neigh_hh_output(hh, skb);
index b5cbbe0..960e503 100644 (file)
@@ -190,7 +190,6 @@ void dst_init(struct dst_entry *dst, struct dst_ops *ops,
        dst->__use = 0;
        dst->lastuse = jiffies;
        dst->flags = flags;
-       dst->pending_confirm = 0;
        dst->next = NULL;
        if (!(flags & DST_NOCOUNT))
                dst_entries_add(ops, 1);