mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
net: TCP early demux cleanup
early_demux() handlers should be called in RCU context, and as we use skb_dst_set_noref(skb, dst), caller must not exit from RCU context before dst use (skb_dst(skb)) or release (skb_drop(dst)) Therefore, rcu_read_lock()/rcu_read_unlock() pairs around ->early_demux() are confusing and not needed : Protocol handlers are already in an RCU read lock section. (__netif_receive_skb() does the rcu_read_lock() ) Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8bbb181308
commit
cca32e4bf9
2 changed files with 0 additions and 4 deletions
|
@ -325,14 +325,12 @@ static int ip_rcv_finish(struct sk_buff *skb)
|
||||||
const struct net_protocol *ipprot;
|
const struct net_protocol *ipprot;
|
||||||
int protocol = iph->protocol;
|
int protocol = iph->protocol;
|
||||||
|
|
||||||
rcu_read_lock();
|
|
||||||
ipprot = rcu_dereference(inet_protos[protocol]);
|
ipprot = rcu_dereference(inet_protos[protocol]);
|
||||||
if (ipprot && ipprot->early_demux) {
|
if (ipprot && ipprot->early_demux) {
|
||||||
ipprot->early_demux(skb);
|
ipprot->early_demux(skb);
|
||||||
/* must reload iph, skb->head might have changed */
|
/* must reload iph, skb->head might have changed */
|
||||||
iph = ip_hdr(skb);
|
iph = ip_hdr(skb);
|
||||||
}
|
}
|
||||||
rcu_read_unlock();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -52,11 +52,9 @@ int ip6_rcv_finish(struct sk_buff *skb)
|
||||||
if (sysctl_ip_early_demux && !skb_dst(skb)) {
|
if (sysctl_ip_early_demux && !skb_dst(skb)) {
|
||||||
const struct inet6_protocol *ipprot;
|
const struct inet6_protocol *ipprot;
|
||||||
|
|
||||||
rcu_read_lock();
|
|
||||||
ipprot = rcu_dereference(inet6_protos[ipv6_hdr(skb)->nexthdr]);
|
ipprot = rcu_dereference(inet6_protos[ipv6_hdr(skb)->nexthdr]);
|
||||||
if (ipprot && ipprot->early_demux)
|
if (ipprot && ipprot->early_demux)
|
||||||
ipprot->early_demux(skb);
|
ipprot->early_demux(skb);
|
||||||
rcu_read_unlock();
|
|
||||||
}
|
}
|
||||||
if (!skb_dst(skb))
|
if (!skb_dst(skb))
|
||||||
ip6_route_input(skb);
|
ip6_route_input(skb);
|
||||||
|
|
Loading…
Reference in a new issue