tipc: Don't reset the timeout when restarting
authorArnaldo Carvalho de Melo <acme@kernel.org>
Fri, 23 May 2014 19:55:12 +0000 (15:55 -0400)
committerDavid S. Miller <davem@davemloft.net>
Sat, 24 May 2014 18:11:41 +0000 (14:11 -0400)
As it may then take longer than what the user specified using
setsockopt(SO_RCVTIMEO).

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/tipc/socket.c

index ac08966f285867673b55b62a83d7f9beb57f2a4c..08d87fc80b10de342d752b13814262105471b2cb 100644 (file)
@@ -985,10 +985,11 @@ static int anc_data_recv(struct msghdr *m, struct tipc_msg *msg,
        return 0;
 }
 
-static int tipc_wait_for_rcvmsg(struct socket *sock, long timeo)
+static int tipc_wait_for_rcvmsg(struct socket *sock, long *timeop)
 {
        struct sock *sk = sock->sk;
        DEFINE_WAIT(wait);
+       long timeo = *timeop;
        int err;
 
        for (;;) {
@@ -1013,6 +1014,7 @@ static int tipc_wait_for_rcvmsg(struct socket *sock, long timeo)
                        break;
        }
        finish_wait(sk_sleep(sk), &wait);
+       *timeop = timeo;
        return err;
 }
 
@@ -1056,7 +1058,7 @@ static int tipc_recvmsg(struct kiocb *iocb, struct socket *sock,
 restart:
 
        /* Look for a message in receive queue; wait if necessary */
-       res = tipc_wait_for_rcvmsg(sock, timeo);
+       res = tipc_wait_for_rcvmsg(sock, &timeo);
        if (res)
                goto exit;
 
@@ -1154,7 +1156,7 @@ static int tipc_recv_stream(struct kiocb *iocb, struct socket *sock,
 
 restart:
        /* Look for a message in receive queue; wait if necessary */
-       res = tipc_wait_for_rcvmsg(sock, timeo);
+       res = tipc_wait_for_rcvmsg(sock, &timeo);
        if (res)
                goto exit;