On Tue, Oct 28, 2025 at 08:29:35PM -0700, Alison Schofield wrote:
> The pmem_ns unit test is designed to fallback to using the nfit_test
> bus resource when an ACPI resource is not available. That fallback is
> not as solid as it could be, causing intermittent failures of the unit
> test.
> 
> That nfit_test fallback fails with errors such as:
> path: /sys/devices/platform/nfit_test.0/ndbus2/region7/namespace7.0/uuid
> libndctl: write_attr: failed to open 
> /sys/devices/platform/nfit_test.0/ndbus2/region7/namespace7.0/uuid: No such 
> file or directory
> /root/ndctl/build/test/pmem-ns: failed to create PMEM namespace
> 
> This occurs because calling ndctl_test_init() with a NULL context
> only unloads and reloads the nfit_test module, but does not invalidate
> and reinitialize the libndctl context or its sysfs view from previous
> runs. The resulting stale state prevents the test from creating a new
> namespace cleanly.
> 
> Replace the NULL context parameter when calling ndctl_test_init()
> with the available ndctl_ctx to ensure pmem_ns can find usable PMEM
> regions.
> 
> Add more debug messaging to describe why the nfit_test fallback path
> is taken, ie NULL bus or NULL region.
> 
> 
> Reported-by: Marc Herbert <[email protected]>
> Reviewed-by: Dave Jiang <[email protected]>
> Tested-by: Marc Herbert <[email protected]>
> Signed-off-by: Alison Schofield <[email protected]>
> ---
> 
> Changes in v2:
> - Clarify which ACPI resource was not found, bus or region (MarcH)
> - Update commit message and log
> - Remove Closes tag (MarcH)

Thanks for the reviews and testing.
Applied to : https://github.com/pmem/ndctl/commits/pending/

Added note to github issue https://github.com/pmem/ndctl/issues/290

"This fixes up the failure of the pmem-ns unit test for nfit_test users.
It also adds debug messaging to help debug of ACPI.NFIT users.
Patches welcome."

> 
> 
>  test/pmem_namespaces.c | 14 +++++++++-----
>  1 file changed, 9 insertions(+), 5 deletions(-)
> 
> diff --git a/test/pmem_namespaces.c b/test/pmem_namespaces.c
> index 4bafff5164c8..6411e58ed5fd 100644
> --- a/test/pmem_namespaces.c
> +++ b/test/pmem_namespaces.c
> @@ -178,20 +178,24 @@ int test_pmem_namespaces(int log_level, struct 
> ndctl_test *test,
>  
>       ndctl_set_log_priority(ctx, log_level);
>  
> +     /* Try to use ACPI resource first, then nfit_test */
>       bus = ndctl_bus_get_by_provider(ctx, "ACPI.NFIT");
> -     if (bus) {
> -             /* skip this bus if no label-enabled PMEM regions */
> +     if (bus)
>               ndctl_region_foreach(bus, region)
>                       if (ndctl_region_get_nstype(region)
>                                       == ND_DEVICE_NAMESPACE_PMEM)
>                               break;
> -             if (!region)
> -                     bus = NULL;
> +
> +     if (!bus)
> +             fprintf(stderr, "ACPI.NFIT: bus not found\n");
> +     else if (!region) {
> +             fprintf(stderr, "ACPI.NFIT: no PMEM region found\n");
> +             bus = NULL;
>       }
>  
>       if (!bus) {
>               fprintf(stderr, "ACPI.NFIT unavailable falling back to 
> nfit_test\n");
> -             rc = ndctl_test_init(&kmod_ctx, &mod, NULL, log_level, test);
> +             rc = ndctl_test_init(&kmod_ctx, &mod, ctx, log_level, test);
>               ndctl_invalidate(ctx);
>               bus = ndctl_bus_get_by_provider(ctx, "nfit_test.0");
>               if (rc < 0 || !bus) {
> -- 
> 2.37.3
> 

Reply via email to