tipc: fix socket flow control accounting error at tipc_send_stream
authorParthasarathy Bhuvaragan <parthasarathy.bhuvaragan@ericsson.com>
Mon, 24 Apr 2017 13:00:42 +0000 (15:00 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 25 Apr 2017 15:45:37 +0000 (11:45 -0400)
Until now in tipc_send_stream(), we return -1 when the socket
encounters link congestion even if the socket had successfully
sent partial data. This is incorrect as the application resends
the same the partial data leading to data corruption at
receiver's end.

In this commit, we return the partially sent bytes as the return
value at link congestion.

Fixes: 10724cc7bb78 ("tipc: redesign connection-level flow control")
Signed-off-by: Parthasarathy Bhuvaragan <parthasarathy.bhuvaragan@ericsson.com>
Reviewed-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/tipc/socket.c

index 7130e73bd42c21758e88b24b875da4bd97b3c4d2..b28e94f1c73987be50f716f1358467478cee1a6b 100644 (file)
@@ -1083,7 +1083,7 @@ static int __tipc_sendstream(struct socket *sock, struct msghdr *m, size_t dlen)
                }
        } while (sent < dlen && !rc);
 
-       return rc ? rc : sent;
+       return sent ? sent : rc;
 }
 
 /**