diff --git a/[refs] b/[refs] index a1b3b8b59fe7..ec2a836d949c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f30ab418a1d3c5a8b83493e7d70d6876a74aa0ce +refs/heads/master: ef711cf1d156428d4c2911b8c86c6ce90519dc45 diff --git a/trunk/net/core/dst.c b/trunk/net/core/dst.c index 09c1530f4681..57bc4d5b8d08 100644 --- a/trunk/net/core/dst.c +++ b/trunk/net/core/dst.c @@ -263,9 +263,11 @@ struct dst_entry *dst_destroy(struct dst_entry * dst) void dst_release(struct dst_entry *dst) { if (dst) { - WARN_ON(atomic_read(&dst->__refcnt) < 1); + int newrefcnt; + smp_mb__before_atomic_dec(); - atomic_dec(&dst->__refcnt); + newrefcnt = atomic_dec_return(&dst->__refcnt); + WARN_ON(newrefcnt < 0); } } EXPORT_SYMBOL(dst_release);