fix(host): guestnetworksync do nothing on detach vfio nic (#24178)

This commit is contained in:
wanyaoqi
2026-02-02 20:18:05 +08:00
committed by GitHub
parent 8e1c23ec2e
commit e86609c969
+27 -18
View File
@@ -738,6 +738,11 @@ func (n *SGuestNetworkSyncTask) qgaGetAddedNicDevs() error {
}
func (n *SGuestNetworkSyncTask) removeNic(nic *desc.SGuestNetwork) {
if nic.Driver == "vfio-pci" {
n.onDeviceDel(nic)
return
}
callback := func(res string) {
if len(res) > 0 && !strings.Contains(res, "not found") {
log.Errorf("netdev del failed %s", res)
@@ -760,30 +765,34 @@ func (n *SGuestNetworkSyncTask) onNetdevDel(nic *desc.SGuestNetwork) {
n.delNicDevice(nic)
}
func (n *SGuestNetworkSyncTask) onDeviceDel(nic *desc.SGuestNetwork) {
var i = 0
for ; i < len(n.guest.Desc.Nics); i++ {
if n.guest.Desc.Nics[i].Index == nic.Index {
if nic.Pci != nil {
err := n.guest.pciAddrs.ReleasePCIAddress(nic.Pci.PCIAddr)
if err != nil {
log.Errorf("failed release nic pci addr %s", nic.Pci.PCIAddr)
}
}
break
}
}
if i < len(n.guest.Desc.Nics) {
n.guest.Desc.Nics = append(n.guest.Desc.Nics[:i], n.guest.Desc.Nics[i+1:]...)
}
n.syncNetworkConf()
}
func (n *SGuestNetworkSyncTask) delNicDevice(nic *desc.SGuestNetwork) {
callback := func(res string) {
if len(res) > 0 {
log.Errorf("network device del failed %s", res)
n.errors = append(n.errors, fmt.Errorf("network device del failed %s", res))
} else {
var i = 0
for ; i < len(n.guest.Desc.Nics); i++ {
if n.guest.Desc.Nics[i].Index == nic.Index {
if nic.Pci != nil {
err := n.guest.pciAddrs.ReleasePCIAddress(nic.Pci.PCIAddr)
if err != nil {
log.Errorf("failed release nic pci addr %s", nic.Pci.PCIAddr)
}
}
break
}
}
if i < len(n.guest.Desc.Nics) {
n.guest.Desc.Nics = append(n.guest.Desc.Nics[:i], n.guest.Desc.Nics[i+1:]...)
}
n.syncNetworkConf()
n.onDeviceDel(nic)
}
}
n.guest.Monitor.DeviceDel(fmt.Sprintf("netdev-%s", nic.Ifname), callback)