From patchwork Thu Sep 20 05:25:34 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: ipv6: release referenct of ip6_null_entry's dst entry in __ip6_del_rt Date: Wed, 19 Sep 2012 19:25:34 -0000 From: Gao feng X-Patchwork-Id: 185310 Message-Id: <1348118734-2967-1-git-send-email-gaofeng@cn.fujitsu.com> To: davem@davemloft.net Cc: netdev@vger.kernel.org, Gao feng as we hold dst_entry before we call __ip6_del_rt, so we should alse call dst_release not only return -ENOENT when the rt6_info is ip6_null_entry. and we already hold the dst entry, so I think it's safe to call dst_release out of the write-read lock. Signed-off-by: Gao feng --- net/ipv6/route.c | 11 ++++++----- 1 files changed, 6 insertions(+), 5 deletions(-) diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 854e401..46eff42 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -1589,17 +1589,18 @@ static int __ip6_del_rt(struct rt6_info *rt, struct nl_info *info) struct fib6_table *table; struct net *net = dev_net(rt->dst.dev); - if (rt == net->ipv6.ip6_null_entry) - return -ENOENT; + if (rt == net->ipv6.ip6_null_entry) { + err = -ENOENT; + goto out; + } table = rt->rt6i_table; write_lock_bh(&table->tb6_lock); - err = fib6_del(rt, info); - dst_release(&rt->dst); - write_unlock_bh(&table->tb6_lock); +out: + dst_release(&rt->dst); return err; }