unregister_netdevice:等待eth1免费?

时间:2015-05-08 01:16:11

标签: linux networking

我用vconfig创建了两个vlan,phy0.1和phy0.2 并改变他们的名字,

ip link set dev phy0.1 name eth0  (for Router lan)
ip link set dev phy0.2 name eth1. (for Router wan).

现在,出于某种目的,我必须提醒phy0.1 但是,当我通过以下命令重新eth1时,

ifconfig eth1 down
vconfig rem eth1.

它不能很好地工作,并得到以下信息,

unregister_netdevice: waiting for eth1 to become free. Usage count = 1

现在我如何找出使用eth1的过程 或者,如果还有其他方法可以提醒eth1

2 个答案:

答案 0 :(得分:5)

这看起来像" When the blue whale sinks"通过 Bernardo Donadio ,并报告initially in 2014 in a docker context

  

这个问题在Docker代码本身中并不存在,而是在Linux内核代码中   它不仅影响Docker,还影响使用Linux网络堆栈创建设备和命名空间的任何软件,如LXC,OpenStack,Rkt,Proxmox等......

     

如果你已经有过多线程编程的经验,你可以立即将其诊断为竞争条件

     

一旦触发了错误,现在的情况如下:您无法在整个系统中创建,删除或更改任何网络设备。
  到目前为止,除了一些缓解措施和Windows风格的解决方法之外,目前还没有解决该问题:重新启动计算机。严重。

     

更糟糕的是,复制这个问题远非直截了当   Red Hat内核(包括CentOS)似乎更容易受到此问题的影响,但所有其他发行版的报告也都受到影响。

     

截至本出版物发布时间(2017年7月),已经发布了一个修复程序(kernel 4.8)来解决IPv6堆栈中遇到错误所遇到的问题,但人们仍然会收到恼人的消息和冻结行为,表明该bug有多种原因,遍布内核的网络子系统。

答案 1 :(得分:1)

这个问题可能发生在以下场合:     您使用dev_hold来增加设备的引荐次数,但忘记使用dev_put来减少它。    dev_holddev_put始终用于匹配。    dev_get_by_namedev_hold。因此,您应该dev_put关注dev_get_by_name