Commit ae388462 authored by Chuck Lever's avatar Chuck Lever Committed by Trond Myklebust

[PATCH] RPC: kick off socket connect operations faster

 Make the socket transport kick the event queue to start socket connects
 immediately.  This should improve responsiveness of applications that are
 sensitive to slow mount operations (like automounters).

 We are now also careful to cancel the connect worker before destroying
 the xprt.  This eliminates a race where xprt_destroy can finish before
 the connect worker is even allowed to run.

 Test-plan:
 Destructive testing (unplugging the network temporarily).  Connectathon
 with UDP and TCP.  Hard-code impossibly small connect timeout.

 Version: Fri, 29 Apr 2005 15:32:01 -0400
Signed-off-by: default avatarChuck Lever <cel@netapp.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 20e5ac82
...@@ -569,8 +569,11 @@ void xprt_connect(struct rpc_task *task) ...@@ -569,8 +569,11 @@ void xprt_connect(struct rpc_task *task)
if (xprt->sock != NULL) if (xprt->sock != NULL)
schedule_delayed_work(&xprt->sock_connect, schedule_delayed_work(&xprt->sock_connect,
RPC_REESTABLISH_TIMEOUT); RPC_REESTABLISH_TIMEOUT);
else else {
schedule_work(&xprt->sock_connect); schedule_work(&xprt->sock_connect);
if (!RPC_IS_ASYNC(task))
flush_scheduled_work();
}
} }
return; return;
out_write: out_write:
...@@ -1685,6 +1688,10 @@ xprt_shutdown(struct rpc_xprt *xprt) ...@@ -1685,6 +1688,10 @@ xprt_shutdown(struct rpc_xprt *xprt)
rpc_wake_up(&xprt->backlog); rpc_wake_up(&xprt->backlog);
wake_up(&xprt->cong_wait); wake_up(&xprt->cong_wait);
del_timer_sync(&xprt->timer); del_timer_sync(&xprt->timer);
/* synchronously wait for connect worker to finish */
cancel_delayed_work(&xprt->sock_connect);
flush_scheduled_work();
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment