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 services 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 PMDK 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 <[email protected]> Signed-off-by: Dan Williams <[email protected]> --- src/common/file.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/file.c b/src/common/file.c index ff36e70e1fff..e660c136506a 100644 --- a/src/common/file.c +++ b/src/common/file.c @@ -53,7 +53,6 @@ #include "out.h" #include "mmap.h" -#define DEVICE_DAX_PREFIX "/sys/class/dax" #define MAX_SIZE_LENGTH 64 #define DEVICE_DAX_ZERO_LEN (2 * MEGABYTE) @@ -180,7 +179,8 @@ get_file_type_internal(os_stat_t *st) return OTHER_ERROR; } - if (strcmp(DEVICE_DAX_PREFIX, rpath) != 0) { + char *basename = strrchr(rpath, '/'); + if (!basename || strcmp("dax", basename+1) != 0) { LOG(3, "%s path does not match device dax prefix path", rpath); errno = EINVAL; return OTHER_ERROR; _______________________________________________ Linux-nvdimm mailing list [email protected] https://lists.01.org/mailman/listinfo/linux-nvdimm
