Netdev List
 help / color / mirror / Atom feed
* [PATCH net-next] selftests: net: update wait mechanism for relocating netdevsim to a new ns
@ 2026-07-09 16:08 Thaison Phan
  2026-07-21 18:53 ` Jakub Kicinski
  0 siblings, 1 reply; 2+ messages in thread
From: Thaison Phan @ 2026-07-09 16:08 UTC (permalink / raw)
  To: David S . Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Shuah Khan
  Cc: Fengyuan Gong, Stan Iliev, Simon Horman, Willem de Bruijn,
	Petr Machata, netdev, linux-kselftest, linux-kernel, Thaison Phan

When netdevsim devices are reloaded into a non-default network namespace
via 'devlink dev reload', the host's udev daemon does not receive the
subsequent device creation events since it is generally associated to the
default network namespace, so the host udevd queue never officially clears.
As a result, running 'udevadm settle' blocks indefinitely and eventually
times out.

Fixed this by bypassing 'udevadm settle' when a namespace ('ns') is
provided by utilizing the namespace-aware 'self.wait_for_netdevs()'
helper to poll the namespace's sysfs until the interfaces are visible.
For host-only configurations (where 'ns' is None), preserve the original
'udevadm settle' behavior to ensure udev renaming rules are completed.

Also fixed minor bug in wait_for_devs() where wrong exception was caught
from if get_ifnames() failed. Now the if get_ifnames() results in a
command failure exception, wait_for_devs() will catch the exception and
set an empty list for the interface names rather than the exception
propogating upward.

Tested that tools/testing/selftests/drivers/net/ping.py and
tools/testing/selftests/drivers/net/psp.py still pass when using
software network devices in a QEMU x86_64 environment.

Signed-off-by: Thaison Phan <thaisonphan@google.com>
---
 tools/testing/selftests/net/lib/py/nsim.py | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/tools/testing/selftests/net/lib/py/nsim.py b/tools/testing/selftests/net/lib/py/nsim.py
index 7c640ed64c0b..a01491c2d1b6 100644
--- a/tools/testing/selftests/net/lib/py/nsim.py
+++ b/tools/testing/selftests/net/lib/py/nsim.py
@@ -6,7 +6,7 @@ import os
 import random
 import re
 import time
-from .utils import cmd, ip
+from .utils import cmd, ip, CmdExitFailure
 
 
 class NetdevSim:
@@ -76,8 +76,11 @@ class NetdevSimDev:
         if ns:
             cmd(f"devlink dev reload netdevsim/netdevsim{addr} netns {ns.name}")
             self.ns = ns
-
-        cmd("udevadm settle", ns=self.ns)
+            # udev daemon is not guaranteed to get notified of netdevs being created
+            # when in a new netns, so poll until we see the netdevs appear.
+            self.wait_for_netdevs(port_count)
+        else:
+            cmd("udevadm settle", ns=self.ns)
         ifnames = self.get_ifnames()
 
         self.dfs_dir = "/sys/kernel/debug/netdevsim/netdevsim%u/" % addr
@@ -116,7 +119,7 @@ class NetdevSimDev:
         while True:
             try:
                 ifnames = self.get_ifnames()
-            except FileNotFoundError as e:
+            except CmdExitFailure:
                 ifnames = []
             if len(ifnames) == port_count:
                 break
-- 
2.55.0.795.g602f6c329a-goog


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH net-next] selftests: net: update wait mechanism for relocating netdevsim to a new ns
  2026-07-09 16:08 [PATCH net-next] selftests: net: update wait mechanism for relocating netdevsim to a new ns Thaison Phan
@ 2026-07-21 18:53 ` Jakub Kicinski
  0 siblings, 0 replies; 2+ messages in thread
From: Jakub Kicinski @ 2026-07-21 18:53 UTC (permalink / raw)
  To: Thaison Phan
  Cc: David S . Miller, Eric Dumazet, Paolo Abeni, Shuah Khan,
	Fengyuan Gong, Stan Iliev, Simon Horman, Willem de Bruijn,
	Petr Machata, netdev, linux-kselftest, linux-kernel

On Thu,  9 Jul 2026 16:08:07 +0000 Thaison Phan wrote:
> When netdevsim devices are reloaded into a non-default network namespace
> via 'devlink dev reload', the host's udev daemon does not receive the
> subsequent device creation events since it is generally associated to the
> default network namespace, so the host udevd queue never officially clears.
> As a result, running 'udevadm settle' blocks indefinitely and eventually
> times out.
> 
> Fixed this by bypassing 'udevadm settle' when a namespace ('ns') is
> provided by utilizing the namespace-aware 'self.wait_for_netdevs()'
> helper to poll the namespace's sysfs until the interfaces are visible.
> For host-only configurations (where 'ns' is None), preserve the original
> 'udevadm settle' behavior to ensure udev renaming rules are completed.

I don't get it. I never saw it hang. And if the event is scoped udevadm
settle should return immediately, rather than hang. We generally run
on latest systemd udev in Fedora and CentOS. Please explain your problem
better.

> Also fixed minor bug in wait_for_devs() where wrong exception was caught
> from if get_ifnames() failed. Now the if get_ifnames() results in a
> command failure exception, wait_for_devs() will catch the exception and
> set an empty list for the interface names rather than the exception
> propogating upward.

Should be a separate patch
-- 
pw-bot: cr

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-07-21 18:53 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-09 16:08 [PATCH net-next] selftests: net: update wait mechanism for relocating netdevsim to a new ns Thaison Phan
2026-07-21 18:53 ` Jakub Kicinski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox