|
@@ -1593,17 +1593,18 @@ static int __ip6_del_rt(struct rt6_info *rt, struct nl_info *info)
|
|
struct fib6_table *table;
|
|
struct fib6_table *table;
|
|
struct net *net = dev_net(rt->dst.dev);
|
|
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;
|
|
table = rt->rt6i_table;
|
|
write_lock_bh(&table->tb6_lock);
|
|
write_lock_bh(&table->tb6_lock);
|
|
-
|
|
|
|
err = fib6_del(rt, info);
|
|
err = fib6_del(rt, info);
|
|
- dst_release(&rt->dst);
|
|
|
|
-
|
|
|
|
write_unlock_bh(&table->tb6_lock);
|
|
write_unlock_bh(&table->tb6_lock);
|
|
|
|
|
|
|
|
+out:
|
|
|
|
+ dst_release(&rt->dst);
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|
|
|
|
|