In preparation for the kernel switching device-dax instances from the "/sys/class/dax" subsystem to "/sys/bus/dax" [1], teach the device-dax instance detection to be subsystem-type agnostic. Note that the subsystem switch will require an administrator, or distro opt-in. The opt-in will either be at kernel compile time by disabling the default compatibility driver in the kernel, or at runtime with a modprobe policy to override which kernel module service device-dax devices. The daxctl utility [2] will ship a command to install the modprobe policy and include a man page that lists the potential regression risk to older FIO and other userspace tools that are hard coded to "/sys/class/dax". [1]: https://lwn.net/Articles/770128/ [2]: https://github.com/pmem/ndctl/tree/master/daxctl Reported-by: Jeff Moyer <jmoyer@xxxxxxxxxx> Signed-off-by: Dan Williams <dan.j.williams@xxxxxxxxx> --- engines/dev-dax.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/engines/dev-dax.c b/engines/dev-dax.c index 0660bba563e6..422ea634ff1d 100644 --- a/engines/dev-dax.c +++ b/engines/dev-dax.c @@ -259,7 +259,7 @@ fio_devdax_get_file_size(struct thread_data *td, struct fio_file *f) { char spath[PATH_MAX]; char npath[PATH_MAX]; - char *rpath; + char *rpath, *basename; FILE *sfile; uint64_t size; struct stat st; @@ -289,7 +289,8 @@ fio_devdax_get_file_size(struct thread_data *td, struct fio_file *f) } /* check if DAX device */ - if (strcmp("/sys/class/dax", rpath)) { + basename = strrchr(rpath, '/'); + if (!basename || strcmp("dax", basename+1)) { log_err("%s: %s not a DAX device!\n", td->o.name, f->file_name); }