Unverified Commit 602a68e1 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!12648 net: do not delay dst_entries_add() in dst_release()

parents 62cc7977 d3e3c516
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -109,9 +109,6 @@ struct dst_entry *dst_destroy(struct dst_entry * dst)
		child = xdst->child;
	}
#endif
	if (!(dst->flags & DST_NOCOUNT))
		dst_entries_add(dst->ops, -1);

	if (dst->ops->destroy)
		dst->ops->destroy(dst);
	netdev_put(dst->dev, &dst->dev_tracker);
@@ -161,18 +158,28 @@ void dst_dev_put(struct dst_entry *dst)
}
EXPORT_SYMBOL(dst_dev_put);

static void dst_count_dec(struct dst_entry *dst)
{
	if (!(dst->flags & DST_NOCOUNT))
		dst_entries_add(dst->ops, -1);
}

void dst_release(struct dst_entry *dst)
{
	if (dst && rcuref_put(&dst->__rcuref))
	if (dst && rcuref_put(&dst->__rcuref)) {
		dst_count_dec(dst);
		call_rcu_hurry(&dst->rcu_head, dst_destroy_rcu);
	}
}
EXPORT_SYMBOL(dst_release);

void dst_release_immediate(struct dst_entry *dst)
{
	if (dst && rcuref_put(&dst->__rcuref))
	if (dst && rcuref_put(&dst->__rcuref)) {
		dst_count_dec(dst);
		dst_destroy(dst);
	}
}
EXPORT_SYMBOL(dst_release_immediate);

u32 *dst_cow_metrics_generic(struct dst_entry *dst, unsigned long old)