Message ID | 20181119080056.13386-4-oohall@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/4] libndctl: Use the supported_alignment attribute | expand |
On Mon, Nov 19, 2018 at 12:11 AM Oliver O'Halloran <oohall@gmail.com> wrote: > > This patch adds support to the ndctl tool for validating that the > namespace alignment is valid. > > Signed-off-by: Oliver O'Halloran <oohall@gmail.com> > --- > ndctl/namespace.c | 32 ++++++++++++++++++++++++-------- > 1 file changed, 24 insertions(+), 8 deletions(-) > > diff --git a/ndctl/namespace.c b/ndctl/namespace.c > index 1e04f32c0e95..6f8dca288527 100644 > --- a/ndctl/namespace.c > +++ b/ndctl/namespace.c > @@ -537,8 +537,18 @@ static int validate_namespace_options(struct ndctl_region *region, > } > > if (param.align) { > - if (p->mode != NDCTL_NS_MODE_MEMORY && > - p->mode != NDCTL_NS_MODE_DAX) { > + int i, alignments; > + > + switch (p->mode) { > + case NDCTL_NS_MODE_MEMORY: > + alignments = ndctl_pfn_get_num_alignments(pfn); > + break; > + > + case NDCTL_NS_MODE_DAX: > + alignments = ndctl_dax_get_num_alignments(dax); > + break; > + This needs to be reworked after addressing the patch-2 comment because the "(!pfn || !ndctl_pfn_has_align(pfn)))" was handling the "memory-mode without pfn device" case.
diff --git a/ndctl/namespace.c b/ndctl/namespace.c index 1e04f32c0e95..6f8dca288527 100644 --- a/ndctl/namespace.c +++ b/ndctl/namespace.c @@ -537,8 +537,18 @@ static int validate_namespace_options(struct ndctl_region *region, } if (param.align) { - if (p->mode != NDCTL_NS_MODE_MEMORY && - p->mode != NDCTL_NS_MODE_DAX) { + int i, alignments; + + switch (p->mode) { + case NDCTL_NS_MODE_MEMORY: + alignments = ndctl_pfn_get_num_alignments(pfn); + break; + + case NDCTL_NS_MODE_DAX: + alignments = ndctl_dax_get_num_alignments(dax); + break; + + default: error("%s mode does not support setting an alignment\n", p->mode == NDCTL_NS_MODE_SAFE ? "sector" : "raw"); @@ -546,13 +556,19 @@ static int validate_namespace_options(struct ndctl_region *region, } p->align = parse_size64(param.align); + for (i = 0; i < alignments; i++) { + uint64_t a; - switch (p->align) { - case SZ_4K: - case SZ_2M: - case SZ_1G: - break; - default: + if (p->mode == NDCTL_NS_MODE_MEMORY) + a = ndctl_pfn_get_supported_alignment(pfn, i); + else + a = ndctl_dax_get_supported_alignment(dax, i); + + if (p->align == a) + break; + } + + if (i >= alignments) { error("unsupported align: %s\n", param.align); return -ENXIO; }
This patch adds support to the ndctl tool for validating that the namespace alignment is valid. Signed-off-by: Oliver O'Halloran <oohall@gmail.com> --- ndctl/namespace.c | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-)