On Tue, Aug 11, 2026, at 8:03 AM, Jeff Layton wrote:
> Creating a listener registers with rpcbind: svc_xprt_create_from_sa() passes
> flags of 0, so pmap_register is true in svc_setup_socket(), and
> nfsd_version3 is enabled by default and does not set vs_rpcb_optnl, so a
> registration failure aborts listener creation. A fresh netns has no rpcbind,
> and reaching the host's is not an option -- svc_rpcb_setup() opens by
> calling svc_unregister(), which would clear the host's nfsd entries.

>  /* --------------------------- fixture --------------------------- */
> 
>  FIXTURE(nfsd_listener) {
> -     int placeholder;
> +     pid_t rpcbd;
>  };
> 
>  FIXTURE_SETUP(nfsd_listener)
> @@ -369,14 +665,35 @@ FIXTURE_SETUP(nfsd_listener)
>       nfsd_family = genl_resolve_nfsd();
>       if (nfsd_family < 0)
>               SKIP(return, "nfsd genl family not found (modprobe nfsd?)");
> +
> +     if (rpcb_stats_alloc() < 0)
> +             SKIP(return, "mmap(rpcbind stub counters): %s", 
> strerror(errno));
> +
> +     self->rpcbd = rpcb_stub_start(RPCB_STUB_ACCEPT);
> +     if (self->rpcbd < 0)
> +             SKIP(return, "cannot start the rpcbind stub: %s",
> +                  strerror(errno));
>  }
> 
>  FIXTURE_TEARDOWN(nfsd_listener)
>  {
> +     if (self->rpcbd > 0) {
> +             kill(self->rpcbd, SIGKILL);
> +             waitpid(self->rpcbd, NULL, 0);
> +     }
> +     if (rpcb_stats) {
> +             munmap((void *)rpcb_stats, sizeof(*rpcb_stats));
> +             rpcb_stats = NULL;
> +     }
>  }

The fixture appears to leak the network namespace for the tests that
finish with a listener still up. Would something along these lines in
FIXTURE_TEARDOWN() cover it?

        /* A live listener pins the netns; drop any serv the test made. */
        if (listener_set(NULL, 0) == -EBUSY)
                threads_set(0);


-- 
Chuck Lever

Reply via email to