我用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
?
答案 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_hold
和dev_put
始终用于匹配。
dev_get_by_name
换dev_hold
。因此,您应该dev_put
关注dev_get_by_name
。