lkml.org 
[lkml]   [2019]   [Dec]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 225/321] net/smc: dont wait for send buffer space when data was already sent
    Date
    From: Karsten Graul <kgraul@linux.ibm.com>

    [ Upstream commit 6889b36da78a21a312d8b462c1fa25a03c2ff192 ]

    When there is no more send buffer space and at least 1 byte was already
    sent then return to user space. The wait is only done when no data was
    sent by the sendmsg() call.
    This fixes smc_tx_sendmsg() which tried to always send all user data and
    started to wait for free send buffer space when needed. During this wait
    the user space program was blocked in the sendmsg() call and hence not
    able to receive incoming data. When both sides were in such a situation
    then the connection stalled forever.

    Signed-off-by: Karsten Graul <kgraul@linux.ibm.com>
    Signed-off-by: Ursula Braun <ubraun@linux.ibm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/smc/smc_tx.c | 7 +++----
    1 file changed, 3 insertions(+), 4 deletions(-)

    diff --git a/net/smc/smc_tx.c b/net/smc/smc_tx.c
    index 28361aef99825..f1f621675db01 100644
    --- a/net/smc/smc_tx.c
    +++ b/net/smc/smc_tx.c
    @@ -163,12 +163,11 @@ int smc_tx_sendmsg(struct smc_sock *smc, struct msghdr *msg, size_t len)
    conn->local_tx_ctrl.prod_flags.urg_data_pending = 1;

    if (!atomic_read(&conn->sndbuf_space) || conn->urg_tx_pend) {
    + if (send_done)
    + return send_done;
    rc = smc_tx_wait(smc, msg->msg_flags);
    - if (rc) {
    - if (send_done)
    - return send_done;
    + if (rc)
    goto out_err;
    - }
    continue;
    }

    --
    2.20.1


    \
     
     \ /
      Last update: 2019-12-03 23:55    [W:2.116 / U:0.584 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site