Message ID | 20160317005455.3025.68568.stgit@dwillia2-desk3.jf.intel.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 62c6b386aae1 |
Headers | show |
On Wed, Mar 16, 2016 at 05:54:55PM -0700, Dan Williams wrote: > Prevent these tests from bitrotting going forward by arranging for them > to be run against nfit_test resources in the case that an ACPI.NFIT > provider is not found. > > Signed-off-by: Dan Williams <dan.j.williams@intel.com> I'm testing on a system without nfit_test, but with a working block namespace and PMEM namespace. Prior to this change both the blk-ns and pmem-ns tests pass, but with this patch they are both skipped. I'm guessing that it's looking for nfit_test resources, not finding them, and then just skipping the test instead of running against my real PMEM & BLK namespaces? > --- > test/blk_namespaces.c | 56 ++++++++++++++++++++++++++++++++---------- > test/pmem_namespaces.c | 64 ++++++++++++++++++++++++++++++++++++++---------- > 2 files changed, 92 insertions(+), 28 deletions(-) > > diff --git a/test/blk_namespaces.c b/test/blk_namespaces.c > index db30a1fe567c..b4d677b4d0d6 100644 > --- a/test/blk_namespaces.c > +++ b/test/blk_namespaces.c > @@ -27,6 +27,7 @@ > #include <uuid/uuid.h> > #include <linux/version.h> > #include <test.h> > +#include <libkmod.h> > > /* The purpose of this test is to verify that we can successfully do I/O to > * multiple nd_blk namespaces that have discontiguous segments. It first > @@ -44,8 +45,6 @@ > #define err(msg)\ > fprintf(stderr, "%s:%d: %s (%s)\n", __func__, __LINE__, msg, strerror(errno)) > > -static const char *provider = "ACPI.NFIT"; > - > static struct ndctl_namespace *create_blk_namespace(int region_fraction, > struct ndctl_region *region) > { > @@ -214,9 +213,11 @@ int test_blk_namespaces(int log_level, struct ndctl_test *test) > char bdev[50]; > struct ndctl_ctx *ctx; > struct ndctl_bus *bus; > - struct ndctl_namespace *ndns[2], *_n; > - struct ndctl_region *region, *blk_region = NULL; > + struct kmod_module *mod; > struct ndctl_dimm *dimm; > + struct kmod_ctx *kmod_ctx; > + struct ndctl_namespace *ndns[2]; > + struct ndctl_region *region, *blk_region = NULL; > > if (!ndctl_test_attempt(test, KERNEL_VERSION(4, 2, 0))) > return 77; > @@ -227,12 +228,33 @@ int test_blk_namespaces(int log_level, struct ndctl_test *test) > > ndctl_set_log_priority(ctx, log_level); > > - bus = ndctl_bus_get_by_provider(ctx, provider); > + kmod_ctx = kmod_new(NULL, NULL); > + if (!kmod_ctx) > + goto err_kmod; > + kmod_set_log_priority(kmod_ctx, log_level); > + > + rc = kmod_module_new_from_name(kmod_ctx, "nfit_test", &mod); > + if (rc < 0) > + goto err_module; > + > + rc = kmod_module_probe_insert_module(mod, KMOD_PROBE_APPLY_BLACKLIST, > + NULL, NULL, NULL, NULL); > + if (rc < 0) { > + rc = 77; > + ndctl_test_skip(test); > + fprintf(stderr, "nfit_test unavailable skipping tests\n"); > + goto err_module; > + } > + > + bus = ndctl_bus_get_by_provider(ctx, "ACPI.NFIT"); > + if (!bus) > + bus = ndctl_bus_get_by_provider(ctx, "nfit_test.0"); > + > if (!bus) { > fprintf(stderr, "%s: failed to find NFIT-provider\n", comm); > ndctl_test_skip(test); > rc = 77; > - goto err_nobus; > + goto err_cleanup; > } else { > fprintf(stderr, "%s: found provider: %s\n", comm, > ndctl_bus_get_provider(bus)); > @@ -314,15 +336,21 @@ int test_blk_namespaces(int log_level, struct ndctl_test *test) > rc = 0; > > err_cleanup: > - if (blk_region) { > - ndctl_namespace_foreach_safe(blk_region, ndns[0], _n) > - if (ndctl_namespace_get_size(ndns[0]) != 0) > - disable_blk_namespace(ndns[0]); > - } > - > - err_nobus: > + /* unload nfit_test */ > + bus = ndctl_bus_get_by_provider(ctx, "nfit_test.0"); > + if (bus) > + ndctl_region_foreach(bus, region) > + ndctl_region_disable_invalidate(region); > + bus = ndctl_bus_get_by_provider(ctx, "nfit_test.1"); > + if (bus) > + ndctl_region_foreach(bus, region) > + ndctl_region_disable_invalidate(region); > + kmod_module_remove_module(mod, 0); > + > + err_module: > + kmod_unref(kmod_ctx); > + err_kmod: > ndctl_unref(ctx); > - > return rc; > } > > diff --git a/test/pmem_namespaces.c b/test/pmem_namespaces.c > index f7dfce618c1a..198f8ef0cb37 100644 > --- a/test/pmem_namespaces.c > +++ b/test/pmem_namespaces.c > @@ -25,14 +25,13 @@ > #include <sys/types.h> > #include <unistd.h> > #include <uuid/uuid.h> > +#include <libkmod.h> > #include <linux/version.h> > #include <test.h> > > #define err(msg)\ > fprintf(stderr, "%s:%d: %s (%s)\n", __func__, __LINE__, msg, strerror(errno)) > > -static const char *provider = "ACPI.NFIT"; > - > static struct ndctl_namespace *create_pmem_namespace(struct ndctl_region *region) > { > struct ndctl_namespace *seed_ns = NULL; > @@ -175,7 +174,9 @@ int test_pmem_namespaces(int log_level, struct ndctl_test *test) > { > struct ndctl_region *region, *pmem_region = NULL; > struct ndctl_namespace *ndns; > + struct kmod_ctx *kmod_ctx; > struct ndctl_dimm *dimm; > + struct kmod_module *mod; > struct ndctl_ctx *ctx; > struct ndctl_bus *bus; > char bdev[50]; > @@ -190,7 +191,28 @@ int test_pmem_namespaces(int log_level, struct ndctl_test *test) > > ndctl_set_log_priority(ctx, log_level); > > - bus = ndctl_bus_get_by_provider(ctx, provider); > + kmod_ctx = kmod_new(NULL, NULL); > + if (!kmod_ctx) > + goto err_kmod; > + kmod_set_log_priority(kmod_ctx, log_level); > + > + rc = kmod_module_new_from_name(kmod_ctx, "nfit_test", &mod); > + if (rc < 0) > + goto err_module; > + > + rc = kmod_module_probe_insert_module(mod, KMOD_PROBE_APPLY_BLACKLIST, > + NULL, NULL, NULL, NULL); > + if (rc < 0) { > + rc = 77; > + ndctl_test_skip(test); > + fprintf(stderr, "nfit_test unavailable skipping tests\n"); > + goto err_module; > + } > + > + bus = ndctl_bus_get_by_provider(ctx, "ACPI.NFIT"); > + if (!bus) > + bus = ndctl_bus_get_by_provider(ctx, "nfit_test.0"); > + > if (!bus) { > fprintf(stderr, "%s: failed to find NFIT-provider\n", comm); > ndctl_test_skip(test); > @@ -202,16 +224,16 @@ int test_pmem_namespaces(int log_level, struct ndctl_test *test) > > /* get the system to a clean state */ > ndctl_region_foreach(bus, region) > - ndctl_region_disable_invalidate(region); > - > - ndctl_dimm_foreach(bus, dimm) { > - rc = ndctl_dimm_zero_labels(dimm); > - if (rc < 0) { > - fprintf(stderr, "failed to zero %s\n", > - ndctl_dimm_get_devname(dimm)); > - return rc; > - } > - } > + ndctl_region_disable_invalidate(region); > + > + ndctl_dimm_foreach(bus, dimm) { > + rc = ndctl_dimm_zero_labels(dimm); > + if (rc < 0) { > + fprintf(stderr, "failed to zero %s\n", > + ndctl_dimm_get_devname(dimm)); > + goto err; > + } > + } > > /* create our config */ > ndctl_region_foreach(bus, region) > @@ -237,9 +259,23 @@ int test_pmem_namespaces(int log_level, struct ndctl_test *test) > rc = ns_do_io(bdev); > > disable_pmem_namespace(ndns); > + > err: > + /* unload nfit_test */ > + bus = ndctl_bus_get_by_provider(ctx, "nfit_test.0"); > + if (bus) > + ndctl_region_foreach(bus, region) > + ndctl_region_disable_invalidate(region); > + bus = ndctl_bus_get_by_provider(ctx, "nfit_test.1"); > + if (bus) > + ndctl_region_foreach(bus, region) > + ndctl_region_disable_invalidate(region); > + kmod_module_remove_module(mod, 0); > + > + err_module: > + kmod_unref(kmod_ctx); > + err_kmod: > ndctl_unref(ctx); > - > return rc; > } > >
On Fri, Mar 18, 2016 at 9:24 AM, Ross Zwisler <ross.zwisler@linux.intel.com> wrote: > On Wed, Mar 16, 2016 at 05:54:55PM -0700, Dan Williams wrote: >> Prevent these tests from bitrotting going forward by arranging for them >> to be run against nfit_test resources in the case that an ACPI.NFIT >> provider is not found. >> >> Signed-off-by: Dan Williams <dan.j.williams@intel.com> > > I'm testing on a system without nfit_test, but with a working block namespace > and PMEM namespace. > > Prior to this change both the blk-ns and pmem-ns tests pass, but with this > patch they are both skipped. > > I'm guessing that it's looking for nfit_test resources, not finding them, and > then just skipping the test instead of running against my real PMEM & BLK > namespaces? Ah, yes, it bails if it can't load nfit_test.ko. Let me re-order that a bit. Thanks Ross!
diff --git a/test/blk_namespaces.c b/test/blk_namespaces.c index db30a1fe567c..b4d677b4d0d6 100644 --- a/test/blk_namespaces.c +++ b/test/blk_namespaces.c @@ -27,6 +27,7 @@ #include <uuid/uuid.h> #include <linux/version.h> #include <test.h> +#include <libkmod.h> /* The purpose of this test is to verify that we can successfully do I/O to * multiple nd_blk namespaces that have discontiguous segments. It first @@ -44,8 +45,6 @@ #define err(msg)\ fprintf(stderr, "%s:%d: %s (%s)\n", __func__, __LINE__, msg, strerror(errno)) -static const char *provider = "ACPI.NFIT"; - static struct ndctl_namespace *create_blk_namespace(int region_fraction, struct ndctl_region *region) { @@ -214,9 +213,11 @@ int test_blk_namespaces(int log_level, struct ndctl_test *test) char bdev[50]; struct ndctl_ctx *ctx; struct ndctl_bus *bus; - struct ndctl_namespace *ndns[2], *_n; - struct ndctl_region *region, *blk_region = NULL; + struct kmod_module *mod; struct ndctl_dimm *dimm; + struct kmod_ctx *kmod_ctx; + struct ndctl_namespace *ndns[2]; + struct ndctl_region *region, *blk_region = NULL; if (!ndctl_test_attempt(test, KERNEL_VERSION(4, 2, 0))) return 77; @@ -227,12 +228,33 @@ int test_blk_namespaces(int log_level, struct ndctl_test *test) ndctl_set_log_priority(ctx, log_level); - bus = ndctl_bus_get_by_provider(ctx, provider); + kmod_ctx = kmod_new(NULL, NULL); + if (!kmod_ctx) + goto err_kmod; + kmod_set_log_priority(kmod_ctx, log_level); + + rc = kmod_module_new_from_name(kmod_ctx, "nfit_test", &mod); + if (rc < 0) + goto err_module; + + rc = kmod_module_probe_insert_module(mod, KMOD_PROBE_APPLY_BLACKLIST, + NULL, NULL, NULL, NULL); + if (rc < 0) { + rc = 77; + ndctl_test_skip(test); + fprintf(stderr, "nfit_test unavailable skipping tests\n"); + goto err_module; + } + + bus = ndctl_bus_get_by_provider(ctx, "ACPI.NFIT"); + if (!bus) + bus = ndctl_bus_get_by_provider(ctx, "nfit_test.0"); + if (!bus) { fprintf(stderr, "%s: failed to find NFIT-provider\n", comm); ndctl_test_skip(test); rc = 77; - goto err_nobus; + goto err_cleanup; } else { fprintf(stderr, "%s: found provider: %s\n", comm, ndctl_bus_get_provider(bus)); @@ -314,15 +336,21 @@ int test_blk_namespaces(int log_level, struct ndctl_test *test) rc = 0; err_cleanup: - if (blk_region) { - ndctl_namespace_foreach_safe(blk_region, ndns[0], _n) - if (ndctl_namespace_get_size(ndns[0]) != 0) - disable_blk_namespace(ndns[0]); - } - - err_nobus: + /* unload nfit_test */ + bus = ndctl_bus_get_by_provider(ctx, "nfit_test.0"); + if (bus) + ndctl_region_foreach(bus, region) + ndctl_region_disable_invalidate(region); + bus = ndctl_bus_get_by_provider(ctx, "nfit_test.1"); + if (bus) + ndctl_region_foreach(bus, region) + ndctl_region_disable_invalidate(region); + kmod_module_remove_module(mod, 0); + + err_module: + kmod_unref(kmod_ctx); + err_kmod: ndctl_unref(ctx); - return rc; } diff --git a/test/pmem_namespaces.c b/test/pmem_namespaces.c index f7dfce618c1a..198f8ef0cb37 100644 --- a/test/pmem_namespaces.c +++ b/test/pmem_namespaces.c @@ -25,14 +25,13 @@ #include <sys/types.h> #include <unistd.h> #include <uuid/uuid.h> +#include <libkmod.h> #include <linux/version.h> #include <test.h> #define err(msg)\ fprintf(stderr, "%s:%d: %s (%s)\n", __func__, __LINE__, msg, strerror(errno)) -static const char *provider = "ACPI.NFIT"; - static struct ndctl_namespace *create_pmem_namespace(struct ndctl_region *region) { struct ndctl_namespace *seed_ns = NULL; @@ -175,7 +174,9 @@ int test_pmem_namespaces(int log_level, struct ndctl_test *test) { struct ndctl_region *region, *pmem_region = NULL; struct ndctl_namespace *ndns; + struct kmod_ctx *kmod_ctx; struct ndctl_dimm *dimm; + struct kmod_module *mod; struct ndctl_ctx *ctx; struct ndctl_bus *bus; char bdev[50]; @@ -190,7 +191,28 @@ int test_pmem_namespaces(int log_level, struct ndctl_test *test) ndctl_set_log_priority(ctx, log_level); - bus = ndctl_bus_get_by_provider(ctx, provider); + kmod_ctx = kmod_new(NULL, NULL); + if (!kmod_ctx) + goto err_kmod; + kmod_set_log_priority(kmod_ctx, log_level); + + rc = kmod_module_new_from_name(kmod_ctx, "nfit_test", &mod); + if (rc < 0) + goto err_module; + + rc = kmod_module_probe_insert_module(mod, KMOD_PROBE_APPLY_BLACKLIST, + NULL, NULL, NULL, NULL); + if (rc < 0) { + rc = 77; + ndctl_test_skip(test); + fprintf(stderr, "nfit_test unavailable skipping tests\n"); + goto err_module; + } + + bus = ndctl_bus_get_by_provider(ctx, "ACPI.NFIT"); + if (!bus) + bus = ndctl_bus_get_by_provider(ctx, "nfit_test.0"); + if (!bus) { fprintf(stderr, "%s: failed to find NFIT-provider\n", comm); ndctl_test_skip(test); @@ -202,16 +224,16 @@ int test_pmem_namespaces(int log_level, struct ndctl_test *test) /* get the system to a clean state */ ndctl_region_foreach(bus, region) - ndctl_region_disable_invalidate(region); - - ndctl_dimm_foreach(bus, dimm) { - rc = ndctl_dimm_zero_labels(dimm); - if (rc < 0) { - fprintf(stderr, "failed to zero %s\n", - ndctl_dimm_get_devname(dimm)); - return rc; - } - } + ndctl_region_disable_invalidate(region); + + ndctl_dimm_foreach(bus, dimm) { + rc = ndctl_dimm_zero_labels(dimm); + if (rc < 0) { + fprintf(stderr, "failed to zero %s\n", + ndctl_dimm_get_devname(dimm)); + goto err; + } + } /* create our config */ ndctl_region_foreach(bus, region) @@ -237,9 +259,23 @@ int test_pmem_namespaces(int log_level, struct ndctl_test *test) rc = ns_do_io(bdev); disable_pmem_namespace(ndns); + err: + /* unload nfit_test */ + bus = ndctl_bus_get_by_provider(ctx, "nfit_test.0"); + if (bus) + ndctl_region_foreach(bus, region) + ndctl_region_disable_invalidate(region); + bus = ndctl_bus_get_by_provider(ctx, "nfit_test.1"); + if (bus) + ndctl_region_foreach(bus, region) + ndctl_region_disable_invalidate(region); + kmod_module_remove_module(mod, 0); + + err_module: + kmod_unref(kmod_ctx); + err_kmod: ndctl_unref(ctx); - return rc; }
Prevent these tests from bitrotting going forward by arranging for them to be run against nfit_test resources in the case that an ACPI.NFIT provider is not found. Signed-off-by: Dan Williams <dan.j.williams@intel.com> --- test/blk_namespaces.c | 56 ++++++++++++++++++++++++++++++++---------- test/pmem_namespaces.c | 64 ++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 92 insertions(+), 28 deletions(-)