Prior to 4.5 kernel the 'align' attribute for pfn devices did not exist.
Skip attempts to set it on those kernels.

Link: https://github.com/pmem/ndctl/issues/7
Reported-by: Yigal Korman <[email protected]>
Signed-off-by: Dan Williams <[email protected]>
---
 ndctl/builtin-xaction-namespace.c |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/ndctl/builtin-xaction-namespace.c 
b/ndctl/builtin-xaction-namespace.c
index c55625274f62..8257eb9cd65e 100644
--- a/ndctl/builtin-xaction-namespace.c
+++ b/ndctl/builtin-xaction-namespace.c
@@ -319,7 +319,14 @@ static int setup_namespace(struct ndctl_region *region,
 
                try(ndctl_pfn, set_uuid, pfn, uuid);
                try(ndctl_pfn, set_location, pfn, p->loc);
-               try(ndctl_pfn, set_align, pfn, SZ_2M);
+
+               /*
+                * TODO: when we allow setting a non-default alignment
+                * we'll need to check for "has_align" earlier and fail
+                * non-default attempts on older kernels.
+                */
+               if (ndctl_pfn_has_align(pfn))
+                       try(ndctl_pfn, set_align, pfn, SZ_2M);
                try(ndctl_pfn, set_namespace, pfn, ndns);
                rc = ndctl_pfn_enable(pfn);
        } else if (p->mode == NDCTL_NS_MODE_DAX) {
@@ -327,6 +334,7 @@ static int setup_namespace(struct ndctl_region *region,
 
                try(ndctl_dax, set_uuid, dax, uuid);
                try(ndctl_dax, set_location, dax, p->loc);
+               /* device-dax assumes 'align' attribute present */
                try(ndctl_dax, set_align, dax, SZ_2M);
                try(ndctl_dax, set_namespace, dax, ndns);
                rc = ndctl_dax_enable(dax);

_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm

Reply via email to