Bug 215793

Summary: ip netns del is asynchronous??? -- very unexpected and puzzling
Product: Networking Reporter: Roman Mamedov (rm+bko)
Component: OtherAssignee: Stephen Hemminger (stephen)
Status: NEW ---    
Severity: normal    
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 5.10.106 Subsystem:
Regression: No Bisected commit-id:

Description Roman Mamedov 2022-04-02 12:14:36 UTC
Hello,

I have a script like this:

  ip netns del test-ns
  ip netns add test-ns
  ip link add tun-test type gre local any remote 8.8.8.8
  ip link set tun-test netns test-ns

As is, the script will fail exactly every other time:

---------------
# ./nstest.sh 
RTNETLINK answers: File exists
Cannot find device "tun-test"

# ./nstest.sh 

# ./nstest.sh 
RTNETLINK answers: File exists
Cannot find device "tun-test"

# ./nstest.sh 

# ./nstest.sh 
RTNETLINK answers: File exists
Cannot find device "tun-test"

# ./nstest.sh 

# ./nstest.sh 
RTNETLINK answers: File exists
Cannot find device "tun-test"

# ./nstest.sh 

# ./nstest.sh 
RTNETLINK answers: File exists
Cannot find device "tun-test"

# ./nstest.sh 

# ./nstest.sh 
RTNETLINK answers: File exists
Cannot find device "tun-test"

---------------
That's because "ip netns del" seems to return without actually finishing to fully delete the NS. Adding a "sleep 1" after the first line, makes the script complete successfully every time. This is a very unexpected behavior. I would ask for a better workaround than "sleep 1", but I believe there should be no workaround, and the script should reliably work as posted.

Hope you can consider changing this.

Thanks!