• Tony Lu's avatar
    net/smc: Send directly when TCP_CORK is cleared · ea785a1a
    Tony Lu authored
    According to the man page of TCP_CORK [1], if set, don't send out
    partial frames. All queued partial frames are sent when option is
    cleared again.
    
    When applications call setsockopt to disable TCP_CORK, this call is
    protected by lock_sock(), and tries to mod_delayed_work() to 0, in order
    to send pending data right now. However, the delayed work smc_tx_work is
    also protected by lock_sock(). There introduces lock contention for
    sending data.
    
    To fix it, send pending data directly which acts like TCP, without
    lock_sock() protected in the context of setsockopt (already lock_sock()ed),
    and cancel unnecessary dealyed work, which is protected by lock.
    
    [1] https://linux.die.net/man/7/tcpSigned-off-by: default avatarTony Lu <tonylu@linux.alibaba.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    ea785a1a
smc_tx.c 19.4 KB