raw: convert raw sockets to RCU
authorEric Dumazet <edumazet@google.com>
Sat, 18 Jun 2022 03:47:05 +0000 (20:47 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sun, 19 Jun 2022 09:00:02 +0000 (10:00 +0100)
commit0daf07e527095e64ee8927ce297ab626643e9f51
treec74d50c59f37ae3e636d6976734762811e118c27
parentba44f8182ec299c5d1c8a72fc0fde4ec127b5a6d
raw: convert raw sockets to RCU

Using rwlock in networking code is extremely risky.
writers can starve if enough readers are constantly
grabing the rwlock.

I thought rwlock were at fault and sent this patch:

https://lkml.org/lkml/2022/6/17/272

But Peter and Linus essentially told me rwlock had to be unfair.

We need to get rid of rwlock in networking code.

Without this fix, following script triggers soft lockups:

for i in {1..48}
do
 ping -f -n -q 127.0.0.1 &
 sleep 0.1
done

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/raw.h
include/net/rawv6.h
net/ipv4/af_inet.c
net/ipv4/raw.c
net/ipv4/raw_diag.c
net/ipv6/af_inet6.c
net/ipv6/raw.c