* [PATCH net-next 1/2] ipv6: copy lwtstate in ip6_rt_copy_init() @ 2015-07-24 10:28 Nicolas Dichtel 2015-07-24 10:28 ` [PATCH net-next 2/2] lwtunnel: change prototype of lwtunnel_state_get() Nicolas Dichtel ` (3 more replies) 0 siblings, 4 replies; 8+ messages in thread From: Nicolas Dichtel @ 2015-07-24 10:28 UTC (permalink / raw) To: davem; +Cc: netdev, Nicolas Dichtel, Thomas Graf, Roopa Prabhu We need to copy this field (ip6_rt_cache_alloc() and ip6_rt_pcpu_alloc() use ip6_rt_copy_init() to build a dst). CC: Thomas Graf <tgraf@suug.ch> CC: Roopa Prabhu <roopa@cumulusnetworks.com> Fixes: 19e42e451506 ("ipv6: support for fib route lwtunnel encap attributes") Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> --- net/ipv6/route.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 67b2367126f3..ac01ab0886a5 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -2164,6 +2164,10 @@ static void ip6_rt_copy_init(struct rt6_info *rt, struct rt6_info *ort) #endif rt->rt6i_prefsrc = ort->rt6i_prefsrc; rt->rt6i_table = ort->rt6i_table; + if (ort->rt6i_lwtstate) { + lwtunnel_state_get(ort->rt6i_lwtstate); + rt->rt6i_lwtstate = ort->rt6i_lwtstate; + } } #ifdef CONFIG_IPV6_ROUTE_INFO -- 2.4.2 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH net-next 2/2] lwtunnel: change prototype of lwtunnel_state_get() 2015-07-24 10:28 [PATCH net-next 1/2] ipv6: copy lwtstate in ip6_rt_copy_init() Nicolas Dichtel @ 2015-07-24 10:28 ` Nicolas Dichtel 2015-07-24 10:41 ` Thomas Graf ` (2 more replies) 2015-07-24 10:40 ` [PATCH net-next 1/2] ipv6: copy lwtstate in ip6_rt_copy_init() Thomas Graf ` (2 subsequent siblings) 3 siblings, 3 replies; 8+ messages in thread From: Nicolas Dichtel @ 2015-07-24 10:28 UTC (permalink / raw) To: davem; +Cc: netdev, Nicolas Dichtel, Thomas Graf, Roopa Prabhu 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: Nicolas Dichtel <nicolas.dichtel@6wind.com> --- include/net/lwtunnel.h | 16 +++++++++++----- net/ipv4/fib_semantics.c | 9 ++++----- net/ipv4/route.c | 9 ++------- net/ipv6/ip6_fib.c | 2 +- net/ipv6/route.c | 8 ++------ 5 files changed, 20 insertions(+), 24 deletions(-) diff --git a/include/net/lwtunnel.h b/include/net/lwtunnel.h index bd72e82b45a1..78376da1afa2 100644 --- a/include/net/lwtunnel.h +++ b/include/net/lwtunnel.h @@ -37,12 +37,16 @@ extern const struct lwtunnel_encap_ops __rcu * lwtun_encaps[LWTUNNEL_ENCAP_MAX+1]; #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) return; @@ -76,11 +80,13 @@ int lwtunnel_output6(struct sock *sk, struct sk_buff *skb); #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) { } diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c index 6754c64b2fe0..7226df887531 100644 --- a/net/ipv4/fib_semantics.c +++ b/net/ipv4/fib_semantics.c @@ -209,7 +209,7 @@ static void free_fib_info_rcu(struct rcu_head *head) change_nexthops(fi) { if (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); rt_fibinfo_free_cpus(nexthop_nh->nh_pcpu_rth_output); rt_fibinfo_free(&nexthop_nh->nh_rth_input); @@ -512,8 +512,8 @@ static int fib_get_nhs(struct fib_info *fi, struct rtnexthop *rtnh, nla, &lwtstate); if (ret) goto errout; - lwtunnel_state_get(lwtstate); - nexthop_nh->nh_lwtstate = lwtstate; + nexthop_nh->nh_lwtstate = + lwtstate_get(lwtstate); } } @@ -969,8 +969,7 @@ struct fib_info *fib_create_info(struct fib_config *cfg) if (err) goto failure; - lwtunnel_state_get(lwtstate); - nh->nh_lwtstate = lwtstate; + nh->nh_lwtstate = lwtstate_get(lwtstate); } nh->nh_oif = cfg->fc_oif; nh->nh_gw = cfg->fc_gw; diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 519ec232818d..11096396ef4a 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -1358,7 +1358,7 @@ static void ipv4_dst_destroy(struct dst_entry *dst) list_del(&rt->rt_uncached); spin_unlock_bh(&ul->lock); } - lwtunnel_state_put(rt->rt_lwtstate); + lwtstate_put(rt->rt_lwtstate); } void rt_flush_dev(struct net_device *dev) @@ -1407,12 +1407,7 @@ static void rt_set_nexthop(struct rtable *rt, __be32 daddr, #ifdef CONFIG_IP_ROUTE_CLASSID rt->dst.tclassid = nh->nh_tclassid; #endif - if (nh->nh_lwtstate) { - lwtunnel_state_get(nh->nh_lwtstate); - rt->rt_lwtstate = nh->nh_lwtstate; - } else { - rt->rt_lwtstate = NULL; - } + rt->rt_lwtstate = lwtstate_get(nh->nh_lwtstate); if (unlikely(fnhe)) cached = rt_bind_exception(rt, fnhe, daddr); else if (!(rt->dst.flags & DST_NOCACHE)) diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c index d715f2e0c4e7..5693b5eb8482 100644 --- a/net/ipv6/ip6_fib.c +++ b/net/ipv6/ip6_fib.c @@ -178,7 +178,7 @@ static void rt6_free_pcpu(struct rt6_info *non_pcpu_rt) static void rt6_release(struct rt6_info *rt) { if (atomic_dec_and_test(&rt->rt6i_ref)) { - lwtunnel_state_put(rt->rt6i_lwtstate); + lwtstate_put(rt->rt6i_lwtstate); rt6_free_pcpu(rt); dst_free(&rt->dst); } diff --git a/net/ipv6/route.c b/net/ipv6/route.c index ac01ab0886a5..894cb18cd8ca 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -1778,8 +1778,7 @@ int ip6_route_add(struct fib6_config *cfg) cfg->fc_encap, &lwtstate); if (err) goto out; - lwtunnel_state_get(lwtstate); - rt->rt6i_lwtstate = lwtstate; + rt->rt6i_lwtstate = lwtstate_get(lwtstate); if (lwtunnel_output_redirect(rt->rt6i_lwtstate)) rt->dst.output = lwtunnel_output6; } @@ -2164,10 +2163,7 @@ static void ip6_rt_copy_init(struct rt6_info *rt, struct rt6_info *ort) #endif rt->rt6i_prefsrc = ort->rt6i_prefsrc; rt->rt6i_table = ort->rt6i_table; - if (ort->rt6i_lwtstate) { - lwtunnel_state_get(ort->rt6i_lwtstate); - rt->rt6i_lwtstate = ort->rt6i_lwtstate; - } + rt->rt6i_lwtstate = lwtstate_get(ort->rt6i_lwtstate); } #ifdef CONFIG_IPV6_ROUTE_INFO -- 2.4.2 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH net-next 2/2] lwtunnel: change prototype of lwtunnel_state_get() 2015-07-24 10:28 ` [PATCH net-next 2/2] lwtunnel: change prototype of lwtunnel_state_get() Nicolas Dichtel @ 2015-07-24 10:41 ` Thomas Graf 2015-07-24 13:53 ` roopa 2015-07-27 8:03 ` David Miller 2 siblings, 0 replies; 8+ messages in thread From: Thomas Graf @ 2015-07-24 10:41 UTC (permalink / raw) To: Nicolas Dichtel; +Cc: davem, netdev, Roopa Prabhu On 07/24/15 at 12:28pm, Nicolas Dichtel wrote: > 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: Nicolas Dichtel <nicolas.dichtel@6wind.com> Acked-by: Thomas Graf <tgraf@suug.ch> ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next 2/2] lwtunnel: change prototype of lwtunnel_state_get() 2015-07-24 10:28 ` [PATCH net-next 2/2] lwtunnel: change prototype of lwtunnel_state_get() Nicolas Dichtel 2015-07-24 10:41 ` Thomas Graf @ 2015-07-24 13:53 ` roopa 2015-07-27 8:03 ` David Miller 2 siblings, 0 replies; 8+ messages in thread From: roopa @ 2015-07-24 13:53 UTC (permalink / raw) To: Nicolas Dichtel; +Cc: davem, netdev, Thomas Graf On 7/24/15, 3:28 AM, Nicolas Dichtel wrote: > 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: Nicolas Dichtel <nicolas.dichtel@6wind.com> > Acked-by: Roopa Prabhu <roopa@cumulusnetworks.com> thanks. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next 2/2] lwtunnel: change prototype of lwtunnel_state_get() 2015-07-24 10:28 ` [PATCH net-next 2/2] lwtunnel: change prototype of lwtunnel_state_get() Nicolas Dichtel 2015-07-24 10:41 ` Thomas Graf 2015-07-24 13:53 ` roopa @ 2015-07-27 8:03 ` David Miller 2 siblings, 0 replies; 8+ messages in thread From: David Miller @ 2015-07-27 8:03 UTC (permalink / raw) To: nicolas.dichtel; +Cc: netdev, tgraf, roopa From: Nicolas Dichtel <nicolas.dichtel@6wind.com> Date: Fri, 24 Jul 2015 12:28:36 +0200 > 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: Nicolas Dichtel <nicolas.dichtel@6wind.com> Applied. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next 1/2] ipv6: copy lwtstate in ip6_rt_copy_init() 2015-07-24 10:28 [PATCH net-next 1/2] ipv6: copy lwtstate in ip6_rt_copy_init() Nicolas Dichtel 2015-07-24 10:28 ` [PATCH net-next 2/2] lwtunnel: change prototype of lwtunnel_state_get() Nicolas Dichtel @ 2015-07-24 10:40 ` Thomas Graf 2015-07-24 13:40 ` roopa 2015-07-27 8:03 ` David Miller 3 siblings, 0 replies; 8+ messages in thread From: Thomas Graf @ 2015-07-24 10:40 UTC (permalink / raw) To: Nicolas Dichtel; +Cc: davem, netdev, Roopa Prabhu On 07/24/15 at 12:28pm, Nicolas Dichtel wrote: > We need to copy this field (ip6_rt_cache_alloc() and ip6_rt_pcpu_alloc() > use ip6_rt_copy_init() to build a dst). > > CC: Thomas Graf <tgraf@suug.ch> > CC: Roopa Prabhu <roopa@cumulusnetworks.com> > Fixes: 19e42e451506 ("ipv6: support for fib route lwtunnel encap attributes") > Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Acked-by: Thomas Graf <tgraf@suug.ch> ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next 1/2] ipv6: copy lwtstate in ip6_rt_copy_init() 2015-07-24 10:28 [PATCH net-next 1/2] ipv6: copy lwtstate in ip6_rt_copy_init() Nicolas Dichtel 2015-07-24 10:28 ` [PATCH net-next 2/2] lwtunnel: change prototype of lwtunnel_state_get() Nicolas Dichtel 2015-07-24 10:40 ` [PATCH net-next 1/2] ipv6: copy lwtstate in ip6_rt_copy_init() Thomas Graf @ 2015-07-24 13:40 ` roopa 2015-07-27 8:03 ` David Miller 3 siblings, 0 replies; 8+ messages in thread From: roopa @ 2015-07-24 13:40 UTC (permalink / raw) To: Nicolas Dichtel; +Cc: davem, netdev, Thomas Graf On 7/24/15, 3:28 AM, Nicolas Dichtel wrote: > We need to copy this field (ip6_rt_cache_alloc() and ip6_rt_pcpu_alloc() > use ip6_rt_copy_init() to build a dst). > > CC: Thomas Graf <tgraf@suug.ch> > CC: Roopa Prabhu <roopa@cumulusnetworks.com> > Fixes: 19e42e451506 ("ipv6: support for fib route lwtunnel encap attributes") > Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> > Acked-by: Roopa Prabhu <roopa@cumulusnetworks.com> Thanks! ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next 1/2] ipv6: copy lwtstate in ip6_rt_copy_init() 2015-07-24 10:28 [PATCH net-next 1/2] ipv6: copy lwtstate in ip6_rt_copy_init() Nicolas Dichtel ` (2 preceding siblings ...) 2015-07-24 13:40 ` roopa @ 2015-07-27 8:03 ` David Miller 3 siblings, 0 replies; 8+ messages in thread From: David Miller @ 2015-07-27 8:03 UTC (permalink / raw) To: nicolas.dichtel; +Cc: netdev, tgraf, roopa From: Nicolas Dichtel <nicolas.dichtel@6wind.com> Date: Fri, 24 Jul 2015 12:28:35 +0200 > We need to copy this field (ip6_rt_cache_alloc() and ip6_rt_pcpu_alloc() > use ip6_rt_copy_init() to build a dst). > > CC: Thomas Graf <tgraf@suug.ch> > CC: Roopa Prabhu <roopa@cumulusnetworks.com> > Fixes: 19e42e451506 ("ipv6: support for fib route lwtunnel encap attributes") > Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Applied. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2015-07-27 8:03 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2015-07-24 10:28 [PATCH net-next 1/2] ipv6: copy lwtstate in ip6_rt_copy_init() Nicolas Dichtel 2015-07-24 10:28 ` [PATCH net-next 2/2] lwtunnel: change prototype of lwtunnel_state_get() Nicolas Dichtel 2015-07-24 10:41 ` Thomas Graf 2015-07-24 13:53 ` roopa 2015-07-27 8:03 ` David Miller 2015-07-24 10:40 ` [PATCH net-next 1/2] ipv6: copy lwtstate in ip6_rt_copy_init() Thomas Graf 2015-07-24 13:40 ` roopa 2015-07-27 8:03 ` David Miller
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).