SUNRPC: Avoid spurious wake-up during UDP connect processing
authorChuck Lever <chuck.lever@oracle.com>
Wed, 11 Mar 2009 18:10:21 +0000 (14:10 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 11 Mar 2009 18:10:21 +0000 (14:10 -0400)
commitfe315e76fc3a3f9f7e1581dc22fec7e7719f0896
tree15ba17ab92691d55f3e3168df8fef2fb366339c0
parent01d37c428ae080563c0a3bb8bdfa88c65a6891d3
SUNRPC: Avoid spurious wake-up during UDP connect processing

To clear out old state, the UDP connect workers unconditionally invoke
xs_close() before proceeding with a new connect.  Nowadays this causes
a spurious wake-up of the task waiting for the connect to complete.

This is a little racey, but usually harmless.  The waiting task
immediately retries the connect via a call_bind/call_connect sequence,
which usually finds the transport already in the connected state
because the connect worker has finished in the background.

To avoid a spurious wake-up, factor the xs_close() logic that resets
the underlying socket into a helper, and have the UDP connect workers
call that helper instead of xs_close().

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
net/sunrpc/xprtsock.c