linux/net/sunrpc
NeilBrown 9d69338c8c sunrpc/cache: handle missing listeners better.
If no handler (such as rpc.mountd) has opened
a cache 'channel', the sunrpc cache responds to
all lookup requests with -ENOENT.  This is particularly
important for the auth.unix.gid cache which is
optional.

If the channel was open briefly and an upcall was written to it,
this upcall remains pending even when the handler closes the
channel.  When an upcall is pending, the code currently
doesn't check if there are still listeners, it only performs
that check before sending an upcall.

As the cache treads a recently closes channel (closed less than
30 seconds ago) as "potentially still open", there is a
reasonable sized window when a request can become pending
in a closed channel, and thereby block lookups indefinitely.

This can easily be demonstrated by running
  cat /proc/net/rpc/auth.unix.gid/channel

and then trying to mount an NFS filesystem from this host.  It
will block indefinitely (unless mountd is run with --manage-gids,
or krb5 is used).

When cache_check() finds that an upcall is pending, it should
perform the "cache_listeners_exist()" exist test.  If no
listeners do exist, the request should be negated.

With this change in place, there can still be a 30second wait on
mount, until the cache gives up waiting for a handler to come
back, but this is much better than an indefinite wait.

Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
2019-04-24 09:46:34 -04:00
..
auth_gss SUNRPC: Convert remaining GFP_NOIO, and GFP_NOWAIT sites in sunrpc 2019-03-02 16:25:26 -05:00
xprtrdma Miscellaneous NFS server fixes. Probably the most visible bug is one 2019-03-12 15:06:54 -07:00
addr.c replace strict_strto calls 2014-07-12 18:45:49 -04:00
auth_null.c SUNRPC: Add rpc_auth::au_ralign field 2019-02-14 11:48:36 -05:00
auth_unix.c NFSoRDMA client updates for 5.1 2019-02-25 09:35:49 -05:00
auth.c SUNRPC: Use struct xdr_stream when decoding RPC Reply header 2019-02-14 09:11:18 -05:00
backchannel_rqst.c SUNRPC: Allow dynamic allocation of back channel slots 2019-03-02 16:25:26 -05:00
cache.c sunrpc/cache: handle missing listeners better. 2019-04-24 09:46:34 -04:00
clnt.c SUNRPC: Don't let RPC_SOFTCONN tasks time out if the transport is connected 2019-03-23 11:51:22 -04:00
debugfs.c rpc: properly check debugfs dentry before using it 2019-02-12 15:51:39 -05:00
Kconfig SUNRPC: Add build option to disable support for insecure enctypes 2019-02-13 13:33:12 -05: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 SUNRPC: Remove redundant calls to RPC_IS_QUEUED() 2019-03-09 16:22:58 -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_syms.c net: Drop pernet_operations::async 2018-03-27 13:18:09 -04:00
sunrpc.h sunrpc: whitespace fixes 2018-07-31 12:53:40 -04:00
svc_xprt.c svcrpc: fix unlikely races preventing queueing of sockets 2019-02-06 15:37:14 -05:00
svc.c SUNRPC: Remove rpc_xprt::tsh_size 2019-02-13 13:14:35 -05:00
svcauth_unix.c SUNRPC: Make server side AUTH_UNIX use lockless lookups 2018-10-29 16:58:04 -04:00
svcauth.c SUNRPC: Add lockless lookup of the server's auth domain 2018-10-03 11:32:59 -04:00
svcsock.c svcrpc: fix UDP on servers with lots of threads 2019-02-21 10:17:36 -05:00
sysctl.c Remove 'type' argument from access_ok() function 2019-01-03 18:57:57 -08:00
timer.c
xdr.c NFS: Account for XDR pad of buf->pages 2019-02-14 10:13:49 -05:00
xprt.c SUNRPC: Use the ENOTCONN error on socket disconnect 2019-03-15 13:08:20 -04:00
xprtmultipath.c SUNRPC: Fix some kernel doc complaints 2019-01-02 12:05:18 -05:00
xprtsock.c SUNRPC: fix uninitialized variable warning 2019-03-26 13:04:32 -07:00