linux-stable/net/sunrpc
J. Bruce Fields 95503d295a svcrpc: fix unlikely races preventing queueing of sockets
In the rpc server, When something happens that might be reason to wake
up a thread to do something, what we do is

	- modify xpt_flags, sk_sock->flags, xpt_reserved, or
	  xpt_nr_rqsts to indicate the new situation
	- call svc_xprt_enqueue() to decide whether to wake up a thread.

svc_xprt_enqueue may require multiple conditions to be true before
queueing up a thread to handle the xprt.  In the SMP case, one of the
other CPU's may have set another required condition, and in that case,
although both CPUs run svc_xprt_enqueue(), it's possible that neither
call sees the writes done by the other CPU in time, and neither one
recognizes that all the required conditions have been set.  A socket
could therefore be ignored indefinitely.

Add memory barries to ensure that any svc_xprt_enqueue() call will
always see the conditions changed by other CPUs before deciding to
ignore a socket.

I've never seen this race reported.  In the unlikely event it happens,
another event will usually come along and the problem will fix itself.
So I don't think this is worth backporting to stable.

Chuck tried this patch and said "I don't see any performance
regressions, but my server has only a single last-level CPU cache."

Tested-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
2019-02-06 15:37:14 -05:00
..
auth_gss SUNRPC: Ensure we respect the RPCSEC_GSS sequence number limit 2019-01-15 15:32:21 -05:00
xprtrdma svcrpc: fix unlikely races preventing queueing of sockets 2019-02-06 15:37:14 -05:00
addr.c
auth.c sunrpc: kernel BUG at kernel/cred.c:825! 2019-01-09 16:54:23 -05:00
auth_null.c SUNRPC: remove crbind rpc_cred operation 2018-12-19 13:52:46 -05:00
auth_unix.c SUNRPC: simplify auth_unix. 2018-12-19 13:52:46 -05:00
backchannel_rqst.c SUNRPC: Fix some kernel doc complaints 2019-01-02 12:05:18 -05:00
cache.c sunrpc: fix cache_head leak due to queued request 2018-12-04 15:42:08 -05:00
clnt.c SUNRPC: Ensure we respect the RPCSEC_GSS sequence number limit 2019-01-15 15:32:21 -05:00
debugfs.c net: Use octal not symbolic permissions 2018-03-26 12:07:48 -04:00
Kconfig IB: Revert "remove redundant INFINIBAND kconfig dependencies" 2018-05-28 10:40:16 -06:00
Makefile SUNRPC: remove generic cred code. 2018-12-19 13:52:46 -05:00
netns.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
rpc_pipe.c sunrpc: convert to DEFINE_SHOW_ATTRIBUTE 2019-01-02 12:05:49 -05:00
rpcb_clnt.c sunrpc: convert unnecessary GFP_ATOMIC to GFP_NOFS 2019-01-02 12:05:19 -05:00
sched.c NFS/NFSD/SUNRPC: replace generic creds with 'struct cred'. 2018-12-19 13:52:46 -05:00
socklib.c net: dump more useful information in netdev_rx_csum_fault() 2018-11-15 11:37:04 -08:00
stats.c sunrpc: whitespace fixes 2018-07-31 12:53:40 -04:00
sunrpc.h sunrpc: whitespace fixes 2018-07-31 12:53:40 -04:00
sunrpc_syms.c net: Drop pernet_operations::async 2018-03-27 13:18:09 -04:00
svc.c sunrpc: make visible processing error in bc_svc_process() 2018-12-27 21:01:41 -05:00
svc_xprt.c svcrpc: fix unlikely races preventing queueing of sockets 2019-02-06 15:37:14 -05:00
svcauth.c SUNRPC: Add lockless lookup of the server's auth domain 2018-10-03 11:32:59 -04:00
svcauth_unix.c SUNRPC: Make server side AUTH_UNIX use lockless lookups 2018-10-29 16:58:04 -04:00
svcsock.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2019-01-03 12:53:47 -08:00
sysctl.c Remove 'type' argument from access_ok() function 2019-01-03 18:57:57 -08:00
timer.c
xdr.c SUNRPC: drop pointless static qualifier in xdr_get_next_encode_buffer() 2018-11-08 12:12:23 -05:00
xprt.c SUNRPC: Address Kerberos performance/behavior regression 2019-01-15 15:36:41 -05:00
xprtmultipath.c SUNRPC: Fix some kernel doc complaints 2019-01-02 12:05:18 -05:00
xprtsock.c SUNRPC: Fix TCP receive code on archs with flush_dcache_page() 2019-01-08 12:44:51 -05:00