summaryrefslogtreecommitdiff
path: root/net/core/dst.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2011-04-28 14:31:47 -0700
committerDavid S. Miller <davem@davemloft.net>2011-04-28 22:26:00 -0700
commitcf91166223772ef4a2ed98b9874958bf6a2470df (patch)
treef8c86cc60798db9e4469031a8dceb5fcb512fb81 /net/core/dst.c
parent5c1e6aa300a7a669dc469d2dcb20172c6bd8fed9 (diff)
net: Use non-zero allocations in dst_alloc().
Make dst_alloc() and it's users explicitly initialize the entire entry. The zero'ing done by kmem_cache_zalloc() was almost entirely redundant. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/dst.c')
-rw-r--r--net/core/dst.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/net/core/dst.c b/net/core/dst.c
index 9505778ec800..30f009327b62 100644
--- a/net/core/dst.c
+++ b/net/core/dst.c
@@ -175,22 +175,36 @@ void *dst_alloc(struct dst_ops *ops, struct net_device *dev,
if (ops->gc(ops))
return NULL;
}
- dst = kmem_cache_zalloc(ops->kmem_cachep, GFP_ATOMIC);
+ dst = kmem_cache_alloc(ops->kmem_cachep, GFP_ATOMIC);
if (!dst)
return NULL;
- dst->ops = ops;
+ dst->child = NULL;
dst->dev = dev;
if (dev)
dev_hold(dev);
+ dst->ops = ops;
dst_init_metrics(dst, dst_default_metrics, true);
+ dst->expires = 0UL;
dst->path = dst;
+ dst->neighbour = NULL;
+ dst->hh = NULL;
+#ifdef CONFIG_XFRM
+ dst->xfrm = NULL;
+#endif
dst->input = dst_discard;
dst->output = dst_discard;
-
+ dst->error = 0;
dst->obsolete = initial_obsolete;
+ dst->header_len = 0;
+ dst->trailer_len = 0;
+#ifdef CONFIG_IP_ROUTE_CLASSID
+ dst->tclassid = 0;
+#endif
atomic_set(&dst->__refcnt, initial_ref);
+ dst->__use = 0;
dst->lastuse = jiffies;
dst->flags = flags;
+ dst->next = NULL;
#if RT_CACHE_DEBUG >= 2
atomic_inc(&dst_total);
#endif