android_kernel_sony_sdm845/include/linux/sunrpc
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Bill Baker b5bc39d4ff NFSv4 client live hangs after live data migration recovery
commit 0f90be132cbf1537d87a6a8b9e80867adac892f6 upstream.

After a live data migration event at the NFS server, the client may send
I/O requests to the wrong server, causing a live hang due to repeated
recovery events.  On the wire, this will appear as an I/O request failing
with NFS4ERR_BADSESSION, followed by successful CREATE_SESSION, repeatedly.
NFS4ERR_BADSSESSION is returned because the session ID being used was
issued by the other server and is not valid at the old server.

The failure is caused by async worker threads having cached the transport
(xprt) in the rpc_task structure.  After the migration recovery completes,
the task is redispatched and the task resends the request to the wrong
server based on the old value still present in tk_xprt.

The solution is to recompute the tk_xprt field of the rpc_task structure
so that the request goes to the correct server.

Signed-off-by: Bill Baker <bill.baker@oracle.com>
Reviewed-by: Chuck Lever <chuck.lever@oracle.com>
Tested-by: Helen Chao <helen.chao@oracle.com>
Fixes: fb43d17210 ("SUNRPC: Use the multipath iterator to assign a ...")
Cc: stable@vger.kernel.org # v4.9+
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-09-09 20:01:23 +02:00
..
addr.h
auth.h sunrpc: add hash_cred() function to rpc_authops struct 2016-09-30 15:28:46 -04:00
auth_gss.h
bc_xprt.h
cache.h sunrpc: remove 'inuse' flag from struct cache_detail. 2016-07-13 15:32:47 -04:00
clnt.h NFSv4 client live hangs after live data migration recovery 2018-09-09 20:01:23 +02:00
debug.h
gss_api.h xprtrdma: No direct data placement with krb5i and krb5p 2016-07-11 15:50:43 -04:00
gss_asn1.h
gss_err.h
gss_krb5.h
gss_krb5_enctypes.h
metrics.h
msg_prot.h sunrpc: Update RPCBIND_MAXNETIDLEN 2016-05-17 15:47:56 -04:00
rpc_pipe_fs.h
rpc_rdma.h rpcrdma: RDMA/CM private message data structure 2016-09-23 10:18:53 -04:00
sched.h SUNRPC: Generalize the RPC buffer release API 2016-09-19 13:08:37 -04:00
stats.h
svc.h NFSv4: Fix callback server shutdown 2017-09-27 14:39:18 +02:00
svc_rdma.h svcrdma: support Remote Invalidation 2016-09-23 10:18:54 -04:00
svc_xprt.h sunrpc: don't call sleeping functions from the notifier block callbacks 2017-01-26 08:24:37 +01:00
svcauth.h vfs: make the string hashes salt the hash 2016-06-10 20:21:46 -07:00
svcauth_gss.h
svcsock.h
timer.h
types.h
xdr.h SUNRPC: Refactor rpc_xdr_buf_init() 2016-09-19 13:08:37 -04:00
xprt.h SUNRPC: Add a transport-specific private field in rpc_rqst 2016-09-19 13:08:37 -04:00
xprtmultipath.h SUNRPC search xprt switch for sockaddr 2016-09-19 13:08:36 -04:00
xprtrdma.h xprtrdma: Support larger inline thresholds 2016-09-19 13:08:38 -04:00
xprtsock.h SUNRPC: Small optimisation of client receive 2016-06-13 12:35:51 -04:00