• Sunil Muthuswamy's avatar
    hv_sock: Add support for delayed close · a9eeb998
    Sunil Muthuswamy authored
    Currently, hvsock does not implement any delayed or background close
    logic. Whenever the hvsock socket is closed, a FIN is sent to the peer, and
    the last reference to the socket is dropped, which leads to a call to
    .destruct where the socket can hang indefinitely waiting for the peer to
    close it's side. The can cause the user application to hang in the close()
    call.
    
    This change implements proper STREAM(TCP) closing handshake mechanism by
    sending the FIN to the peer and the waiting for the peer's FIN to arrive
    for a given timeout. On timeout, it will try to terminate the connection
    (i.e. a RST). This is in-line with other socket providers such as virtio.
    
    This change does not address the hang in the vmbus_hvsock_device_unregister
    where it waits indefinitely for the host to rescind the channel. That
    should be taken up as a separate fix.
    Signed-off-by: default avatarSunil Muthuswamy <sunilmut@microsoft.com>
    Reviewed-by: default avatarDexuan Cui <decui@microsoft.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    a9eeb998
hyperv_transport.c 23.8 KB