once: add DO_ONCE_SLOW() for sleepable contexts
stable inclusion from stable-v4.19.262 commit f5686a03b138f6330eeda082ee4f96c8109f56f3 category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/I5ZXGL CVE: NA -------------------------------- [ Upstream commit 62c07983 ] Christophe Leroy reported a ~80ms latency spike happening at first TCP connect() time. This is because __inet_hash_connect() uses get_random_once() to populate a perturbation table which became quite big after commit 4c2c8f03 ("tcp: increase source port perturb table to 2^16") get_random_once() uses DO_ONCE(), which block hard irqs for the duration of the operation. This patch adds DO_ONCE_SLOW() which uses a mutex instead of a spinlock for operations where we prefer to stay in process context. Then __inet_hash_connect() can use get_random_slow_once() to populate its perturbation table. Fixes: 4c2c8f03 ("tcp: increase source port perturb table to 2^16") Fixes: 190cc824 ("tcp: change source port randomizarion at connect() time") Reported-by:Christophe Leroy <christophe.leroy@csgroup.eu> Link: https://lore.kernel.org/netdev/CANn89iLAEYBaoYajy0Y9UmGFff5GPxDUoG-ErVB2jDdRNQ5Tug@mail.gmail.com/T/#t Signed-off-by:
Eric Dumazet <edumazet@google.com> Cc: Willy Tarreau <w@1wt.eu> Tested-by:
Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by:
David S. Miller <davem@davemloft.net> Signed-off-by:
Sasha Levin <sashal@kernel.org> One conflict occurs because the commit 4c2c8f03 ("tcp: increase source port perturb table to 2^16") is integrated but the commit e9261476 ("tcp: dynamically allocate the perturb table used by source port") is not integrated. One conflict occurs because the commit 1027b96e ("once: Fix panic when module unload") is not integrated. Conflicts: net/ipv4/inet_hashtables.c lib/once.c Signed-off-by:
Liu Jian <liujian56@huawei.com> Reviewed-by:
Yue Haibing <yuehaibing@huawei.com> Signed-off-by:
Yongqiang Liu <liuyongqiang13@huawei.com>
Loading
Please sign in to comment