Re: [PATCH net v2] net: erspan: set lltx to avoid sch_direct_xmit deadlock
From: Zhou, Yun <hidden>
Date: 2026-07-20 08:25:46
Also in:
lkml
On 7/20/26 15:53, Ido Schimmel wrote:
CAUTION: This email comes from a non Wind River email account! Do not click links or open attachments unless you recognize the sender and know the content is safe. On Mon, Jul 13, 2026 at 11:14:35PM +0800, Yun Zhou wrote:quoted
erspan_xmit() re-enters the network stack via ip_tunnel_xmit(), causing nested acquisition of _xmit_lock on the underlay device while already holding the ERSPAN device's _xmit_lock. Both are ARPHRD_ETHER and share the same lockdep class, creating an ABBA deadlock: sch_direct_xmit [lock erspan] -> erspan_xmit -> ip_tunnel_xmit -> ip_output -> __dev_queue_xmit -> sch_direct_xmit [lock underlay] Set dev->lltx = true so HARD_TX_LOCK() skips the spinlock for ERSPAN. This is safe as erspan_xmit() has no shared mutable state: o_seqno is atomic, stats use atomic_long_inc, and dst_cache is per-CPU. GRETAP, the sibling device with identical xmit structure, already sets lltx.erspan_xmit() (unlike gre_tap_xmit()) is performing non-atomic __clear_bit() on shared tunnel flags and KCSAN will probably flag it. Eric had a patch [1] that changes erspan_xmit() to use a private copy of these flags. I think it's better to wait for Eric's patch to be merged before setting lltx. Eric, can you please submit v2 of your patch to net? Also, doesn't ip6erspan suffer from the same problem? Please try to reproduce and fix.
Yes, ip6erspan has the same problem. I will fix it in v3. Thanks, Yun