Please ignore this patch and
'tipc: Fix missing connection request handling'.

They dont belong to this series and they are not the right version.

/Partha

On 03/13/2017 06:57 PM, Parthasarathy Bhuvaragan wrote:
> In this commit, we fix the following two errors:
> 1. In tipc_send_stream(), fix the return value during congestion
>    when the send is partially successful. Until now, we return -1
>    instead of returning the partial sent bytes.
> 2. In tipc_recv_stream(), we update the rcv_unack not based on the
>    message size, but on sz. Usually they are the same, but in cases
>    where the socket receivers buffer is smaller than the incoming
>    message, these two parameters differ greatly. This introduces a
>    slack in accounting leading to permanent congestion. In this
>    commit, we perform accounting always based on the incoming message.
>
> Signed-off-by: Parthasarathy Bhuvaragan 
> <parthasarathy.bhuvara...@ericsson.com>
> ---
>  net/tipc/socket.c | 9 ++++-----
>  1 file changed, 4 insertions(+), 5 deletions(-)
>
> diff --git a/net/tipc/socket.c b/net/tipc/socket.c
> index 6b09a778cc71..79e628cd08a9 100644
> --- a/net/tipc/socket.c
> +++ b/net/tipc/socket.c
> @@ -1080,7 +1080,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;
>  }
>
>  /**
> @@ -1481,16 +1481,15 @@ static int tipc_recv_stream(struct socket *sock, 
> struct msghdr *m,
>       if (unlikely(flags & MSG_PEEK))
>               goto exit;
>
> -     tsk->rcv_unacked += tsk_inc(tsk, hlen + sz);
> +     tsk->rcv_unacked += tsk_inc(tsk, hlen + msg_data_sz(msg));
>       if (unlikely(tsk->rcv_unacked >= (tsk->rcv_win / 4)))
>               tipc_sk_send_ack(tsk);
>       tsk_advance_rx_queue(sk);
>
>       /* Loop around if more data is required */
> -     if ((sz_copied < buf_len) &&    /* didn't get all requested data */
> +     if ((!err) && (sz_copied < buf_len) &&
>           (!skb_queue_empty(&sk->sk_receive_queue) ||
> -         (sz_copied < target)) &&    /* and more is ready or required */
> -         (!err))                     /* and haven't reached a FIN */
> +          (sz_copied < target)))
>               goto restart;
>
>  exit:
>

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
tipc-discussion mailing list
tipc-discussion@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tipc-discussion

Reply via email to