From 24fdc3782f39495f2f37ed7c92174a93237d9cf3 Mon Sep 17 00:00:00 2001 From: wanyaoqi <18528551+wanyaoqi@users.noreply.github.com> Date: Mon, 2 Feb 2026 19:02:59 +0800 Subject: [PATCH] fix(host): guestnetworksync do nothing on detach vfio nic (#24177) --- pkg/hostman/guestman/guesttasks.go | 45 ++++++++++++++++++------------ 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/pkg/hostman/guestman/guesttasks.go b/pkg/hostman/guestman/guesttasks.go index e554c2fe8a..65382ab1ad 100644 --- a/pkg/hostman/guestman/guesttasks.go +++ b/pkg/hostman/guestman/guesttasks.go @@ -732,6 +732,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) @@ -754,30 +759,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)