@@ -245,6 +245,17 @@ func cmdDel(args *skel.CmdArgs) error {
245245 return nil
246246 }
247247
248+ allocator := utils .NewPCIAllocator (config .DefaultCNIDir )
249+
250+ err = allocator .Lock (netConf .DeviceID )
251+ if err != nil {
252+ return fmt .Errorf ("cmdDel() error obtaining lock for device [%s]: %w" , netConf .DeviceID , err )
253+ }
254+
255+ logging .Debug ("Acquired device lock" ,
256+ "func" , "cmdDel" ,
257+ "DeviceID" , netConf .DeviceID )
258+
248259 defer func () {
249260 if err == nil && cRefPath != "" {
250261 _ = utils .CleanCachedNetConf (cRefPath )
@@ -270,6 +281,9 @@ func cmdDel(args *skel.CmdArgs) error {
270281
271282 sm := sriov .NewSriovManager ()
272283
284+ logging .Debug ("Reset VF configuration" ,
285+ "func" , "cmdDel" ,
286+ "netConf.DeviceID" , netConf .DeviceID )
273287 /* ResetVFConfig resets a VF administratively. We must run ResetVFConfig
274288 before ReleaseVF because some drivers will error out if we try to
275289 reset netdev VF with trust off. So, reset VF MAC address via PF first.
@@ -288,13 +302,22 @@ func cmdDel(args *skel.CmdArgs) error {
288302 // IPAM resources
289303 _ , ok := err .(ns.NSPathNotExistErr )
290304 if ok {
305+ logging .Debug ("Exiting as the network namespace does not exists anymore" ,
306+ "func" , "cmdDel" ,
307+ "netConf.DeviceID" , netConf .DeviceID ,
308+ "args.Netns" , args .Netns )
291309 return nil
292310 }
293311
294312 return fmt .Errorf ("failed to open netns %s: %q" , netns , err )
295313 }
296314 defer netns .Close ()
297315
316+ logging .Debug ("Release the VF" ,
317+ "func" , "cmdDel" ,
318+ "netConf.DeviceID" , netConf .DeviceID ,
319+ "args.Netns" , args .Netns ,
320+ "args.IfName" , args .IfName )
298321 if err = sm .ReleaseVF (netConf , args .IfName , netns ); err != nil {
299322 return err
300323 }
@@ -305,7 +328,6 @@ func cmdDel(args *skel.CmdArgs) error {
305328 "func" , "cmdDel" ,
306329 "config.DefaultCNIDir" , config .DefaultCNIDir ,
307330 "netConf.DeviceID" , netConf .DeviceID )
308- allocator := utils .NewPCIAllocator (config .DefaultCNIDir )
309331 if err = allocator .DeleteAllocatedPCI (netConf .DeviceID ); err != nil {
310332 return fmt .Errorf ("error cleaning the pci allocation for vf pci address %s: %v" , netConf .DeviceID , err )
311333 }
0 commit comments