SUNRPC: Use the ENOTCONN error on socket disconnect
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Fri, 15 Mar 2019 12:01:16 +0000 (08:01 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Fri, 15 Mar 2019 17:08:20 +0000 (13:08 -0400)
When the socket is closed, we currently send an EAGAIN error to all
pending requests in order to ask them to retransmit. Use ENOTCONN
instead, to ensure that they try to reconnect before attempting to
transmit.
This also helps SOFTCONN tasks to behave correctly in this
situation.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
net/sunrpc/xprt.c

index e096c5a725dff123a347741bffcfdef13227218f..d7117d24146017e477f0e4ec39dbc6f2c08b11e1 100644 (file)
@@ -664,7 +664,7 @@ void xprt_disconnect_done(struct rpc_xprt *xprt)
        spin_lock_bh(&xprt->transport_lock);
        xprt_clear_connected(xprt);
        xprt_clear_write_space_locked(xprt);
-       xprt_wake_pending_tasks(xprt, -EAGAIN);
+       xprt_wake_pending_tasks(xprt, -ENOTCONN);
        spin_unlock_bh(&xprt->transport_lock);
 }
 EXPORT_SYMBOL_GPL(xprt_disconnect_done);