Commit 5a6228a0 authored by Nicolas Dichtel's avatar Nicolas Dichtel Committed by David S. Miller

lwtunnel: change prototype of lwtunnel_state_get()

It saves some lines and simplify a bit the code when the state is returning
by this function. It's also useful to handle a NULL entry.

To avoid too long lines, I've also renamed lwtunnel_state_get() and
lwtunnel_state_put() to lwtstate_get() and lwtstate_put().

CC: Thomas Graf <tgraf@suug.ch>
CC: Roopa Prabhu <roopa@cumulusnetworks.com>
Signed-off-by: default avatarNicolas Dichtel <nicolas.dichtel@6wind.com>
Acked-by: default avatarThomas Graf <tgraf@suug.ch>
Acked-by: default avatarRoopa Prabhu <roopa@cumulusnetworks.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d9436595
...@@ -35,12 +35,16 @@ extern const struct lwtunnel_encap_ops __rcu * ...@@ -35,12 +35,16 @@ extern const struct lwtunnel_encap_ops __rcu *
lwtun_encaps[LWTUNNEL_ENCAP_MAX+1]; lwtun_encaps[LWTUNNEL_ENCAP_MAX+1];
#ifdef CONFIG_LWTUNNEL #ifdef CONFIG_LWTUNNEL
static inline void lwtunnel_state_get(struct lwtunnel_state *lws) static inline struct lwtunnel_state *
lwtstate_get(struct lwtunnel_state *lws)
{ {
atomic_inc(&lws->refcnt); if (lws)
atomic_inc(&lws->refcnt);
return lws;
} }
static inline void lwtunnel_state_put(struct lwtunnel_state *lws) static inline void lwtstate_put(struct lwtunnel_state *lws)
{ {
if (!lws) if (!lws)
return; return;
...@@ -74,11 +78,13 @@ int lwtunnel_output6(struct sock *sk, struct sk_buff *skb); ...@@ -74,11 +78,13 @@ int lwtunnel_output6(struct sock *sk, struct sk_buff *skb);
#else #else
static inline void lwtunnel_state_get(struct lwtunnel_state *lws) static inline struct lwtunnel_state *
lwtstate_get(struct lwtunnel_state *lws)
{ {
return lws;
} }
static inline void lwtunnel_state_put(struct lwtunnel_state *lws) static inline void lwtstate_put(struct lwtunnel_state *lws)
{ {
} }
......
...@@ -209,7 +209,7 @@ static void free_fib_info_rcu(struct rcu_head *head) ...@@ -209,7 +209,7 @@ static void free_fib_info_rcu(struct rcu_head *head)
change_nexthops(fi) { change_nexthops(fi) {
if (nexthop_nh->nh_dev) if (nexthop_nh->nh_dev)
dev_put(nexthop_nh->nh_dev); dev_put(nexthop_nh->nh_dev);
lwtunnel_state_put(nexthop_nh->nh_lwtstate); lwtstate_put(nexthop_nh->nh_lwtstate);
free_nh_exceptions(nexthop_nh); free_nh_exceptions(nexthop_nh);
rt_fibinfo_free_cpus(nexthop_nh->nh_pcpu_rth_output); rt_fibinfo_free_cpus(nexthop_nh->nh_pcpu_rth_output);
rt_fibinfo_free(&nexthop_nh->nh_rth_input); rt_fibinfo_free(&nexthop_nh->nh_rth_input);
...@@ -514,8 +514,8 @@ static int fib_get_nhs(struct fib_info *fi, struct rtnexthop *rtnh, ...@@ -514,8 +514,8 @@ static int fib_get_nhs(struct fib_info *fi, struct rtnexthop *rtnh,
nla, &lwtstate); nla, &lwtstate);
if (ret) if (ret)
goto errout; goto errout;
lwtunnel_state_get(lwtstate); nexthop_nh->nh_lwtstate =
nexthop_nh->nh_lwtstate = lwtstate; lwtstate_get(lwtstate);
} }
} }
...@@ -971,8 +971,7 @@ struct fib_info *fib_create_info(struct fib_config *cfg) ...@@ -971,8 +971,7 @@ struct fib_info *fib_create_info(struct fib_config *cfg)
if (err) if (err)
goto failure; goto failure;
lwtunnel_state_get(lwtstate); nh->nh_lwtstate = lwtstate_get(lwtstate);
nh->nh_lwtstate = lwtstate;
} }
nh->nh_oif = cfg->fc_oif; nh->nh_oif = cfg->fc_oif;
nh->nh_gw = cfg->fc_gw; nh->nh_gw = cfg->fc_gw;
......
...@@ -1358,7 +1358,7 @@ static void ipv4_dst_destroy(struct dst_entry *dst) ...@@ -1358,7 +1358,7 @@ static void ipv4_dst_destroy(struct dst_entry *dst)
list_del(&rt->rt_uncached); list_del(&rt->rt_uncached);
spin_unlock_bh(&ul->lock); spin_unlock_bh(&ul->lock);
} }
lwtunnel_state_put(rt->rt_lwtstate); lwtstate_put(rt->rt_lwtstate);
} }
void rt_flush_dev(struct net_device *dev) void rt_flush_dev(struct net_device *dev)
...@@ -1407,12 +1407,7 @@ static void rt_set_nexthop(struct rtable *rt, __be32 daddr, ...@@ -1407,12 +1407,7 @@ static void rt_set_nexthop(struct rtable *rt, __be32 daddr,
#ifdef CONFIG_IP_ROUTE_CLASSID #ifdef CONFIG_IP_ROUTE_CLASSID
rt->dst.tclassid = nh->nh_tclassid; rt->dst.tclassid = nh->nh_tclassid;
#endif #endif
if (nh->nh_lwtstate) { rt->rt_lwtstate = lwtstate_get(nh->nh_lwtstate);
lwtunnel_state_get(nh->nh_lwtstate);
rt->rt_lwtstate = nh->nh_lwtstate;
} else {
rt->rt_lwtstate = NULL;
}
if (unlikely(fnhe)) if (unlikely(fnhe))
cached = rt_bind_exception(rt, fnhe, daddr); cached = rt_bind_exception(rt, fnhe, daddr);
else if (!(rt->dst.flags & DST_NOCACHE)) else if (!(rt->dst.flags & DST_NOCACHE))
......
...@@ -178,7 +178,7 @@ static void rt6_free_pcpu(struct rt6_info *non_pcpu_rt) ...@@ -178,7 +178,7 @@ static void rt6_free_pcpu(struct rt6_info *non_pcpu_rt)
static void rt6_release(struct rt6_info *rt) static void rt6_release(struct rt6_info *rt)
{ {
if (atomic_dec_and_test(&rt->rt6i_ref)) { if (atomic_dec_and_test(&rt->rt6i_ref)) {
lwtunnel_state_put(rt->rt6i_lwtstate); lwtstate_put(rt->rt6i_lwtstate);
rt6_free_pcpu(rt); rt6_free_pcpu(rt);
dst_free(&rt->dst); dst_free(&rt->dst);
} }
......
...@@ -1778,8 +1778,7 @@ int ip6_route_add(struct fib6_config *cfg) ...@@ -1778,8 +1778,7 @@ int ip6_route_add(struct fib6_config *cfg)
cfg->fc_encap, &lwtstate); cfg->fc_encap, &lwtstate);
if (err) if (err)
goto out; goto out;
lwtunnel_state_get(lwtstate); rt->rt6i_lwtstate = lwtstate_get(lwtstate);
rt->rt6i_lwtstate = lwtstate;
if (lwtunnel_output_redirect(rt->rt6i_lwtstate)) if (lwtunnel_output_redirect(rt->rt6i_lwtstate))
rt->dst.output = lwtunnel_output6; rt->dst.output = lwtunnel_output6;
} }
...@@ -2161,10 +2160,7 @@ static void ip6_rt_copy_init(struct rt6_info *rt, struct rt6_info *ort) ...@@ -2161,10 +2160,7 @@ static void ip6_rt_copy_init(struct rt6_info *rt, struct rt6_info *ort)
#endif #endif
rt->rt6i_prefsrc = ort->rt6i_prefsrc; rt->rt6i_prefsrc = ort->rt6i_prefsrc;
rt->rt6i_table = ort->rt6i_table; rt->rt6i_table = ort->rt6i_table;
if (ort->rt6i_lwtstate) { rt->rt6i_lwtstate = lwtstate_get(ort->rt6i_lwtstate);
lwtunnel_state_get(ort->rt6i_lwtstate);
rt->rt6i_lwtstate = ort->rt6i_lwtstate;
}
} }
#ifdef CONFIG_IPV6_ROUTE_INFO #ifdef CONFIG_IPV6_ROUTE_INFO
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment