The 'DAX subsystem' in effect is determined at region or device init time, and dictates the sysfs base paths for all device/region operations. In preparation for adding bind/unbind functionality, cache the subsystem as determined at init time in the library context.
Cc: Dan Williams <dan.j.willi...@intel.com> Signed-off-by: Vishal Verma <vishal.l.ve...@intel.com> --- daxctl/lib/libdaxctl.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/daxctl/lib/libdaxctl.c b/daxctl/lib/libdaxctl.c index 70f896b..f8f5b8c 100644 --- a/daxctl/lib/libdaxctl.c +++ b/daxctl/lib/libdaxctl.c @@ -46,6 +46,7 @@ struct daxctl_ctx { void *userdata; int regions_init; struct list_head regions; + enum dax_subsystem subsys; }; /** @@ -96,6 +97,7 @@ DAXCTL_EXPORT int daxctl_new(struct daxctl_ctx **ctx) dbg(c, "log_priority=%d\n", c->ctx.log_priority); *ctx = c; list_head_init(&c->regions); + c->subsys = DAX_UNKNOWN; return 0; } @@ -454,14 +456,18 @@ static void dax_devices_init(struct daxctl_region *region) for (i = 0; i < ARRAY_SIZE(dax_subsystems); i++) { char *region_path; - if (i == DAX_BUS) + if (i == DAX_BUS) { region_path = region->region_path; - else if (i == DAX_CLASS) { + if (ctx->subsys == DAX_UNKNOWN) + ctx->subsys = DAX_BUS; + } else if (i == DAX_CLASS) { if (asprintf(®ion_path, "%s/dax", region->region_path) < 0) { dbg(ctx, "region path alloc fail\n"); continue; } + if (ctx->subsys == DAX_UNKNOWN) + ctx->subsys = DAX_CLASS; } else continue; sysfs_device_parse(ctx, region_path, daxdev_fmt, region, @@ -539,6 +545,8 @@ static void __dax_regions_init(struct daxctl_ctx *ctx, enum dax_subsystem subsys free(dev_path); if (!region) err(ctx, "add_dax_region() for %s failed\n", de->d_name); + if (ctx->subsys == DAX_UNKNOWN) + ctx->subsys = subsys; } closedir(dir); } -- 2.20.1 _______________________________________________ Linux-nvdimm mailing list Linux-nvdimm@lists.01.org https://lists.01.org/mailman/listinfo/linux-nvdimm