summary refs log tree commit diff
path: root/net/core/dst.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2012-07-02 02:21:03 -0700
committerDavid S. Miller <davem@davemloft.net>2012-07-05 01:03:06 -0700
commit5110effee8fde2edfacac9cd12a9960ab2dc39ea (patch)
treef74fff97af20ffdf805fedc56f0c8f88bbef2df7 /net/core/dst.c
parent60d354ebebd9d0f760cb6c3b9f53a7ade0f8cd0e (diff)
downloadlinux-5110effee8fde2edfacac9cd12a9960ab2dc39ea.tar.gz
net: Do delayed neigh confirmation.
When a dst_confirm() happens, mark the confirmation as pending in the
dst.  Then on the next packet out, when we have the neigh in-hand, do
the update.

This removes the dependency in dst_confirm() of dst's having an
attached neigh.

While we're here, remove the explicit 'dst' NULL check, all except 2
or 3 call sites ensure it's not NULL.  So just fix those cases up.

Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/dst.c')
-rw-r--r--net/core/dst.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/core/dst.c b/net/core/dst.c
index 43d94cedbf7c..a6e19a23a745 100644
--- a/net/core/dst.c
+++ b/net/core/dst.c
@@ -152,7 +152,7 @@ EXPORT_SYMBOL(dst_discard);
 const u32 dst_default_metrics[RTAX_MAX];
 
 void *dst_alloc(struct dst_ops *ops, struct net_device *dev,
-		int initial_ref, int initial_obsolete, int flags)
+		int initial_ref, int initial_obsolete, unsigned short flags)
 {
 	struct dst_entry *dst;
 
@@ -188,6 +188,7 @@ void *dst_alloc(struct dst_ops *ops, struct net_device *dev,
 	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);