sunrpc: Allow xprt->ops->timer method to sleep
authorChuck Lever <chuck.lever@oracle.com>
Wed, 8 Feb 2017 22:00:51 +0000 (17:00 -0500)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Fri, 10 Feb 2017 19:02:37 +0000 (14:02 -0500)
commitb977b644ccf821ab1269582f7efe1d0d85faa1f6
tree9c2f0a3512ea55bfacf9f1ef6926c1f964a16444
parent9a5c63e9c4056de8a73555131e6f698ddb0b9e0d
sunrpc: Allow xprt->ops->timer method to sleep

The transport lock is needed to protect the xprt_adjust_cwnd() call
in xs_udp_timer, but it is not necessary for accessing the
rq_reply_bytes_recvd or tk_status fields. It is correct to sublimate
the lock into UDP's xs_udp_timer method, where it is required.

The ->timer method has to take the transport lock if needed, but it
can now sleep safely, or even call back into the RPC scheduler.

This is more a clean-up than a fix, but the "issue" was introduced
by my transport switch patches back in 2005.

Fixes: 46c0ee8bc4ad ("RPC: separate xprt_timer implementations")
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
net/sunrpc/xprt.c
net/sunrpc/xprtsock.c