• E
    net: remove a WARN_ON() in net_enable_timestamp() · 9979a55a
    Eric Dumazet 提交于
    The WARN_ON(in_interrupt()) in net_enable_timestamp() can get false
    positive, in socket clone path, run from softirq context :
    
    [ 3641.624425] WARNING: at net/core/dev.c:1532 net_enable_timestamp+0x7b/0x80()
    [ 3641.668811] Call Trace:
    [ 3641.671254]  <IRQ>  [<ffffffff80286817>] warn_slowpath_common+0x87/0xc0
    [ 3641.677871]  [<ffffffff8028686a>] warn_slowpath_null+0x1a/0x20
    [ 3641.683683]  [<ffffffff80742f8b>] net_enable_timestamp+0x7b/0x80
    [ 3641.689668]  [<ffffffff80732ce5>] sk_clone_lock+0x425/0x450
    [ 3641.695222]  [<ffffffff8078db36>] inet_csk_clone_lock+0x16/0x170
    [ 3641.701213]  [<ffffffff807ae449>] tcp_create_openreq_child+0x29/0x820
    [ 3641.707663]  [<ffffffff807d62e2>] ? ipt_do_table+0x222/0x670
    [ 3641.713354]  [<ffffffff807aaf5b>] tcp_v4_syn_recv_sock+0xab/0x3d0
    [ 3641.719425]  [<ffffffff807af63a>] tcp_check_req+0x3da/0x530
    [ 3641.724979]  [<ffffffff8078b400>] ? inet_hashinfo_init+0x60/0x80
    [ 3641.730964]  [<ffffffff807ade6f>] ? tcp_v4_rcv+0x79f/0xbe0
    [ 3641.736430]  [<ffffffff807ab9bd>] tcp_v4_do_rcv+0x38d/0x4f0
    [ 3641.741985]  [<ffffffff807ae14a>] tcp_v4_rcv+0xa7a/0xbe0
    
    Its safe at this point because the parent socket owns a reference
    on the netstamp_needed, so we cant have a 0 -> 1 transition, which
    requires to lock a mutex.
    
    Instead of refining the check, lets remove it, as all known callers
    are safe. If it ever changes in the future, static_key_slow_inc()
    will complain anyway.
    Reported-by: NLaurent Chavey <chavey@google.com>
    Signed-off-by: NEric Dumazet <edumazet@google.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    9979a55a
dev.c 153.9 KB