diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2011-01-18 07:46:52 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-01-18 21:33:05 -0800 |
commit | 80f8f1027b99660897bdeaeae73002185d829906 (patch) | |
tree | b8aafe71974b2b7295f20eeb1fad6191fadd8551 /net | |
parent | d6ae3bae3d1bf7a8bf367e29f2cac0788dcd0db5 (diff) | |
download | linux-rpi-80f8f1027b99660897bdeaeae73002185d829906.tar.gz linux-rpi-80f8f1027b99660897bdeaeae73002185d829906.tar.bz2 linux-rpi-80f8f1027b99660897bdeaeae73002185d829906.zip |
net: filter: dont block softirqs in sk_run_filter()
Packet filter (BPF) doesnt need to disable softirqs, being fully
re-entrant and lock-less.
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/core/filter.c | 6 | ||||
-rw-r--r-- | net/packet/af_packet.c | 6 |
2 files changed, 6 insertions, 6 deletions
diff --git a/net/core/filter.c b/net/core/filter.c index afc58374ca96..232b1873bb28 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -142,14 +142,14 @@ int sk_filter(struct sock *sk, struct sk_buff *skb) if (err) return err; - rcu_read_lock_bh(); - filter = rcu_dereference_bh(sk->sk_filter); + rcu_read_lock(); + filter = rcu_dereference(sk->sk_filter); if (filter) { unsigned int pkt_len = sk_run_filter(skb, filter->insns); err = pkt_len ? pskb_trim(skb, pkt_len) : -EPERM; } - rcu_read_unlock_bh(); + rcu_read_unlock(); return err; } diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 91cb1d71f018..c3fc7b70a879 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -523,11 +523,11 @@ static inline unsigned int run_filter(const struct sk_buff *skb, { struct sk_filter *filter; - rcu_read_lock_bh(); - filter = rcu_dereference_bh(sk->sk_filter); + rcu_read_lock(); + filter = rcu_dereference(sk->sk_filter); if (filter != NULL) res = sk_run_filter(skb, filter->insns); - rcu_read_unlock_bh(); + rcu_read_unlock(); return res; } |