Re: [ndctl PATCH v8 0/7] Add error injection support

Alison Schofield
2026-02-13T00:12:34Z

On Fri, Feb 06, 2026 at 03:50:01PM -0600, Ben Cheatham wrote:

snip
>
> Ben Cheatham (7):
> libcxl: Add debugfs path to CXL context
> libcxl: Add CXL protocol errors
> libcxl: Add poison injection support
> cxl: Add inject-protocol-error command
> cxl: Add poison injection/clear commands
> cxl/list: Add injectable errors in output
> Documentation: Add docs for protocol and poison injection commands

Hi Ben,

Same concern touches 2 patches, so commenting here:
libcxl: Add CXL protocol errors
cxl/list: Add injectable errors in output

I'm seeing some unwanted complaining with cxl list when protocol inject
is not supported. Here is a sample:

# cxl list -P -v
libcxl: cxl_add_protocol_errors: failed to access /sys/kernel/debug/cxl/einj_types: No such file or directory
libcxl: cxl_dport_get_einj_path: failed to access /sys/kernel/debug/cxl/cxl_host_bridge.0/einj_inject: No such file or directory
libcxl: cxl_dport_get_einj_path: failed to access /sys/kernel/debug/cxl/cxl_root_port.0/einj_inject: No such file or directory
libcxl: cxl_dport_get_einj_path: failed to access /sys/kernel/debug/cxl/cxl_switch_dport.0/einj_inject: No such file or directory

I believe it is not an error for the path not to exist. With the device poison,
you already treat search for debugfs file as an existence test and no
error is emitted on failure to find.

If the diff below works for you, and nothing else comes up, I can fix it up
when merging. Let me know -

diff --git a/cxl/lib/libcxl.c b/cxl/lib/libcxl.c
index d86884bc2de1..5e8deb6e297b 100644
--- a/cxl/lib/libcxl.c
+++ b/cxl/lib/libcxl.c
@@ -3496,10 +3496,8 @@ static void cxl_add_protocol_errors(struct cxl_ctx *ctx)
}

rc = access(path, F_OK);
- if (rc) {
- err(ctx, "failed to access %s: %s\n", path, strerror(errno));
+ if (rc)
goto err;
- }

rc = sysfs_read_attr(ctx, path, buf);
if (rc) {
@@ -3593,7 +3591,6 @@ CXL_EXPORT char *cxl_dport_get_einj_path(struct cxl_dport *dport)

rc = access(path, F_OK);
if (rc) {
- err(ctx, "failed to access %s: %s\n", path, strerror(errno));
free(path);
return NULL;
}