|
@@ -301,12 +301,13 @@ void dst_release(struct dst_entry *dst)
|
|
{
|
|
{
|
|
if (dst) {
|
|
if (dst) {
|
|
int newrefcnt;
|
|
int newrefcnt;
|
|
|
|
+ unsigned short nocache = dst->flags & DST_NOCACHE;
|
|
|
|
|
|
newrefcnt = atomic_dec_return(&dst->__refcnt);
|
|
newrefcnt = atomic_dec_return(&dst->__refcnt);
|
|
if (unlikely(newrefcnt < 0))
|
|
if (unlikely(newrefcnt < 0))
|
|
net_warn_ratelimited("%s: dst:%p refcnt:%d\n",
|
|
net_warn_ratelimited("%s: dst:%p refcnt:%d\n",
|
|
__func__, dst, newrefcnt);
|
|
__func__, dst, newrefcnt);
|
|
- if (!newrefcnt && unlikely(dst->flags & DST_NOCACHE))
|
|
|
|
|
|
+ if (!newrefcnt && unlikely(nocache))
|
|
call_rcu(&dst->rcu_head, dst_destroy_rcu);
|
|
call_rcu(&dst->rcu_head, dst_destroy_rcu);
|
|
}
|
|
}
|
|
}
|
|
}
|