On 1/15/26 7:43 PM, Alison Schofield wrote:
> A user reports that when running daxctl they do not get a hint to
> use sudo or root when an action fails. They provided this example:
>
> libdaxctl: daxctl_dev_disable: dax0.0: failed to disable
> dax0.0: disable failed: Device or resource busy
> error reconfiguring devices: Device or resource busy
> reconfigured 0 devices
>
> and noted that the message is misleading as the problem was a lack
> of privileges, not a busy device.
>
> Add a helpful hint when a sysfs open or write fails with EACCES or
> EPERM, advising the user to run with root privileges or use sudo.
>
> Only the log messages are affected and no functional behavior is
> changed. To make the new hints visible without debug enabled, make
> them error level instead of debug.
>
> Reported-by: Joel C. Chang <[email protected]>
> Closes: https://lore.kernel.org/all/ZEJkI2i0GBmhtkI8@joel-gram-ubuntu/
> Closes: https://github.com/pmem/ndctl/issues/237
> Signed-off-by: Alison Schofield <[email protected]>
Reviewed-by: Dave Jiang <[email protected]>
> ---
> util/sysfs.c | 31 ++++++++++++++++++++++++++-----
> 1 file changed, 26 insertions(+), 5 deletions(-)
>
> diff --git a/util/sysfs.c b/util/sysfs.c
> index 5a12c639fe4d..e027e387c997 100644
> --- a/util/sysfs.c
> +++ b/util/sysfs.c
> @@ -24,7 +24,14 @@ int __sysfs_read_attr(struct log_ctx *ctx, const char
> *path, char *buf)
> int n, rc;
>
> if (fd < 0) {
> - log_dbg(ctx, "failed to open %s: %s\n", path, strerror(errno));
> + if (errno == EACCES || errno == EPERM)
> + log_err(ctx, "failed to open %s: %s "
> + "hint: try running as root or using sudo\n",
> + path, strerror(errno));
> + else
> + log_dbg(ctx, "failed to open %s: %s\n",
> + path, strerror(errno));
> +
> return -errno;
> }
> n = read(fd, buf, SYSFS_ATTR_SIZE);
> @@ -49,16 +56,30 @@ static int write_attr(struct log_ctx *ctx, const char
> *path,
>
> if (fd < 0) {
> rc = -errno;
> - log_dbg(ctx, "failed to open %s: %s\n", path, strerror(errno));
> + if (errno == EACCES || errno == EPERM)
> + log_err(ctx, "failed to open %s: %s "
> + "hint: try running as root or using sudo\n",
> + path, strerror(errno));
> + else
> + log_dbg(ctx, "failed to open %s: %s\n",
> + path, strerror(errno));
> return rc;
> }
> n = write(fd, buf, len);
> rc = -errno;
> close(fd);
> if (n < len) {
> - if (!quiet)
> - log_dbg(ctx, "failed to write %s to %s: %s\n", buf,
> path,
> - strerror(-rc));
> + if (quiet)
> + return rc;
> +
> + if (rc == -EACCES || rc == -EPERM)
> + log_err(ctx, "failed to write %s to %s: %s "
> + "hint: try running as root or using sudo\n",
> + buf, path, strerror(-rc));
> + else
> + log_dbg(ctx, "failed to write %s to %s: %s\n",
> + buf, path, strerror(-rc));
> +
> return rc;
> }
> return 0;