]> www.infradead.org Git - users/jedix/linux-maple.git/commit
SUNRPC: avoid soft lockup when transmitting UDP to reachable server.
authorNeilBrown <neilb@suse.de>
Wed, 19 Jun 2024 01:05:13 +0000 (11:05 +1000)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Mon, 8 Jul 2024 17:47:24 +0000 (13:47 -0400)
commit6258cf25d5e3155c3219ab5a79b970eef7996356
tree4766a377f688ce32725fa1aebf927f111c311f2b
parent0e13dd9ea8be46f980a46c3ffd8cb786f3e2fb5b
SUNRPC: avoid soft lockup when transmitting UDP to reachable server.

Prior to the commit identified below, call_transmit_status() would
handle -EPERM and other errors related to an unreachable server by
falling through to call_status() which added a 3-second delay and
handled the failure as a timeout.

Since that commit, call_transmit_status() falls through to
handle_bind().  For UDP this moves straight on to handle_connect() and
handle_transmit() so we immediately retransmit - and likely get the same
error.

This results in an indefinite loop in __rpc_execute() which triggers a
soft-lockup warning.

For the errors that indicate an unreachable server,
call_transmit_status() should fall back to call_status() as it did
before.  This cannot cause the thundering herd that the previous patch
was avoiding, as the call_status() will insert a delay.

Fixes: ed7dc973bd91 ("SUNRPC: Prevent thundering herd when the socket is not connected")
Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
net/sunrpc/clnt.c