• Jason Wang's avatar
    tuntap: correctly set SOCKWQ_ASYNC_NOSPACE · 2f3ab622
    Jason Wang authored
    When link is down, writes to the device might fail with
    -EIO. Userspace needs an indication when the status is resolved.  As a
    fix, tun_net_open() attempts to wake up writers - but that is only
    effective if SOCKWQ_ASYNC_NOSPACE has been set in the past. This is
    not the case of vhost_net which only poll for EPOLLOUT after it meets
    errors during sendmsg().
    
    This patch fixes this by making sure SOCKWQ_ASYNC_NOSPACE is set when
    socket is not writable or device is down to guarantee EPOLLOUT will be
    raised in either tun_chr_poll() or tun_sock_write_space() after device
    is up.
    
    Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
    Cc: Eric Dumazet <edumazet@google.com>
    Fixes: 1bd4978a ("tun: honor IFF_UP in tun_get_user()")
    Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    2f3ab622
tun.c 81.4 KB