sefltests: netdevsim: wait for devlink instance after netns removal
authorJiri Pirko <jiri@nvidia.com>
Mon, 20 Feb 2023 13:23:36 +0000 (14:23 +0100)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 21 Feb 2023 12:02:42 +0000 (13:02 +0100)
When devlink instance is put into network namespace and that network
namespace gets deleted, devlink instance is moved back into init_ns.
This is done as a part of cleanup_net() routine. Since cleanup_net()
is called asynchronously from workqueue, there is no guarantee that
the devlink instance move is done after "ip netns del" returns.

So fix this race by making sure that the devlink instance is present
before any other operation.

Reported-by: Amir Tzin <amirtz@nvidia.com>
Fixes: b74c37fd35a2 ("selftests: netdevsim: add tests for devlink reload with resources")
Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Link: https://lore.kernel.org/r/20230220132336.198597-1-jiri@resnulli.us
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
tools/testing/selftests/drivers/net/netdevsim/devlink.sh

index a08c02abde1210ab07b8b8ed6dc7d2ef9607ba18..7f7d20f2220707ba10b55fe627ab1b503fb7c64b 100755 (executable)
@@ -17,6 +17,18 @@ SYSFS_NET_DIR=/sys/bus/netdevsim/devices/$DEV_NAME/net/
 DEBUGFS_DIR=/sys/kernel/debug/netdevsim/$DEV_NAME/
 DL_HANDLE=netdevsim/$DEV_NAME
 
+wait_for_devlink()
+{
+       "$@" | grep -q $DL_HANDLE
+}
+
+devlink_wait()
+{
+       local timeout=$1
+
+       busywait "$timeout" wait_for_devlink devlink dev
+}
+
 fw_flash_test()
 {
        RET=0
@@ -256,6 +268,9 @@ netns_reload_test()
        ip netns del testns2
        ip netns del testns1
 
+       # Wait until netns async cleanup is done.
+       devlink_wait 2000
+
        log_test "netns reload test"
 }
 
@@ -348,6 +363,9 @@ resource_test()
        ip netns del testns2
        ip netns del testns1
 
+       # Wait until netns async cleanup is done.
+       devlink_wait 2000
+
        log_test "resource test"
 }