All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC][PATCH] sunrpc: cancel delayed connect working after connceting success
@ 2010-08-24 10:20 Mi Jinlong
  0 siblings, 0 replies; only message in thread
From: Mi Jinlong @ 2010-08-24 10:20 UTC (permalink / raw)
  To: NFSv3 list; +Cc: J. Bruce Fields, Trond.Myklebust, Chuck Lever

The SUNRPC's TCP connecting is asynchronous, but the tcp_connect()
only send a SYN but don't waiting for the ACK reply.

The below will cause a delayed connect working exist after connecting success.

    CLIENT                                   SERVER

  1. The first connecting

    |-xs_connect()
     |-kernel_connect(O_NONBLOCK)
       |-tcp_connet()  -------- SYN --------->

   xs_connect() return with EINPROGRESS and the ACK have not reply. 

  2. a reconnecting of 1
    |-xs_connect()
        queue_delayed_work(rpciod_workqueue,
                            &transport->connect_worker,
                            xprt->reestablish_timeout);

              <---------------ACK SYN--------------

   After the reconnecting have put the connect working to connect_worker,
   the ACK-SYN for the first connecting reply.

At this instance, a delayed connect working will be exist at connect_worker
after connecting success, we should cancel the working.

Signed-off-by: Mi Jinlong <mijinlong@cn.fujitsu.com>

---
 net/sunrpc/xprtsock.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 49a62f0..823f1db 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -1324,6 +1324,10 @@ static void xs_tcp_state_change(struct sock *sk)
 			transport->tcp_flags =
 				TCP_RCV_COPY_FRAGHDR | TCP_RCV_COPY_XID;
 
+			if (xprt_connecting(xprt) &&
+			      cancel_delayed_work(&transport->connect_worker))
+				xprt_clear_connecting(xprt);
+
 			xprt_wake_pending_tasks(xprt, -EAGAIN);
 		}
 		spin_unlock_bh(&xprt->transport_lock);
-- 1.7.0


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2010-08-24 10:18 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-08-24 10:20 [RFC][PATCH] sunrpc: cancel delayed connect working after connceting success Mi Jinlong

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.