Thread (8 messages) flat view 8 messages, 3 authors, 2016-09-01

Re: [RT PATCH 2/2] net: add a lock around icmp_sk()

From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: 2016-09-01 08:11:53
Also in: linux-rt-users, lkml

On 2016-08-31 09:37:43 [-0700], Eric Dumazet wrote:
quoted
--- a/net/ipv4/icmp.c
+++ b/net/ipv4/icmp.c
@@ -216,12 +219,14 @@ static inline struct sock *icmp_xmit_lock(struct net *net)
 
 	local_bh_disable();
 
+	local_lock(icmp_sk_lock);
Deadlock alert ?
Please read the comment few lines after, explaining why we have to use
spin_trylock().
Or maybe I should double check what is local_lock() in RT
On !RT local_lock() is preempt_disable().
On RT local_lock() is a per-CPU sleeping spinlock which can be taken
recursively by the owner.

On a "normal" ping reply we have
- icmp_reply()
  - icmp_xmit_lock()
    - local_lock()
  - icmp_push_reply()
 icmp_send()
    - local_lock()

so that works. I didn't manage to resolve a possible dst_link_failure()
path but I would assume it is like the above (where the owner takes the
same local_lock() multiple times).

Sebastian
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help