• Ilya Maximets's avatar
    xdp: fix hang while unregistering device bound to xdp socket · 455302d1
    Ilya Maximets authored
    Device that bound to XDP socket will not have zero refcount until the
    userspace application will not close it. This leads to hang inside
    'netdev_wait_allrefs()' if device unregistering requested:
    
      # ip link del p1
      < hang on recvmsg on netlink socket >
    
      # ps -x | grep ip
      5126  pts/0    D+   0:00 ip link del p1
    
      # journalctl -b
    
      Jun 05 07:19:16 kernel:
      unregister_netdevice: waiting for p1 to become free. Usage count = 1
    
      Jun 05 07:19:27 kernel:
      unregister_netdevice: waiting for p1 to become free. Usage count = 1
      ...
    
    Fix that by implementing NETDEV_UNREGISTER event notification handler
    to properly clean up all the resources and unref device.
    
    This should also allow socket killing via ss(8) utility.
    
    Fixes: 965a9909 ("xsk: add support for bind for Rx")
    Signed-off-by: default avatarIlya Maximets <i.maximets@samsung.com>
    Acked-by: default avatarJonathan Lemon <jonathan.lemon@gmail.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    455302d1
xsk.c 18.6 KB