Skip to content

Commit

Permalink
net: percpu_counter_inc() should not be called in BH-disabled section
Browse files Browse the repository at this point in the history
Based upon a lockdep report by Alexey Dobriyan.

I checked all per_cpu_counter_xxx() usages in network tree, and I
think all call sites are BH enabled except one in
inet_csk_listen_stop().

commit dd24c00
(net: Use a percpu_counter for orphan_count)
replaced atomic_t orphan_count to a percpu_counter.

atomic_inc()/atomic_dec() can be called from any context, while
percpu_counter_xxx() should be called from a consistent state.

For orphan_count, this context can be the BH-enabled one.

Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Eric Dumazet authored and David S. Miller committed Dec 2, 2008
1 parent 422d9cd commit 6976a1d
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions net/ipv4/inet_connection_sock.c
Original file line number Diff line number Diff line change
Expand Up @@ -632,6 +632,8 @@ void inet_csk_listen_stop(struct sock *sk)

acc_req = req->dl_next;

percpu_counter_inc(sk->sk_prot->orphan_count);

local_bh_disable();
bh_lock_sock(child);
WARN_ON(sock_owned_by_user(child));
Expand All @@ -641,8 +643,6 @@ void inet_csk_listen_stop(struct sock *sk)

sock_orphan(child);

percpu_counter_inc(sk->sk_prot->orphan_count);

inet_csk_destroy_sock(child);

bh_unlock_sock(child);
Expand Down

0 comments on commit 6976a1d

Please sign in to comment.