diff options
| author | Dan Williams <dan.j.williams@intel.com> | 2019-03-11 15:37:55 -0400 |
|---|---|---|
| committer | Dan Williams <dan.j.williams@intel.com> | 2019-03-11 15:37:55 -0400 |
| commit | 4083014e32699af04a8e6eaa4855b08dba36a47a (patch) | |
| tree | fa37f9f9691fe64ca8a3c0cdc0315dc12462e6e4 /lib/test_rhashtable.c | |
| parent | 6fd96ff557963de8e62842a0dc360a6e3610d2bb (diff) | |
| parent | 78153dd45e7e0596ba32b15d02bda08e1513111e (diff) | |
Merge branch 'for-5.1/nfit/ars' into libnvdimm-for-next
Merge several updates to the ARS implementation. Highlights include:
* Support retrieval of short-ARS results if the ARS state is "requires
continuation", and even if the "no_init_ars" module parameter is
specified.
* Allow busy-polling of the kernel ARS state by allowing root to reset
the exponential back-off timer.
* Filter potentially stale ARS results by tracking query-ARS relative to
the previous start-ARS.
Diffstat (limited to 'lib/test_rhashtable.c')
| -rw-r--r-- | lib/test_rhashtable.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/lib/test_rhashtable.c b/lib/test_rhashtable.c index 6a8ac7626797..e52f8cafe227 100644 --- a/lib/test_rhashtable.c +++ b/lib/test_rhashtable.c | |||
| @@ -541,38 +541,45 @@ static unsigned int __init print_ht(struct rhltable *rhlt) | |||
| 541 | static int __init test_insert_dup(struct test_obj_rhl *rhl_test_objects, | 541 | static int __init test_insert_dup(struct test_obj_rhl *rhl_test_objects, |
| 542 | int cnt, bool slow) | 542 | int cnt, bool slow) |
| 543 | { | 543 | { |
| 544 | struct rhltable rhlt; | 544 | struct rhltable *rhlt; |
| 545 | unsigned int i, ret; | 545 | unsigned int i, ret; |
| 546 | const char *key; | 546 | const char *key; |
| 547 | int err = 0; | 547 | int err = 0; |
| 548 | 548 | ||
| 549 | err = rhltable_init(&rhlt, &test_rht_params_dup); | 549 | rhlt = kmalloc(sizeof(*rhlt), GFP_KERNEL); |
| 550 | if (WARN_ON(err)) | 550 | if (WARN_ON(!rhlt)) |
| 551 | return -EINVAL; | ||
| 552 | |||
| 553 | err = rhltable_init(rhlt, &test_rht_params_dup); | ||
| 554 | if (WARN_ON(err)) { | ||
| 555 | kfree(rhlt); | ||
| 551 | return err; | 556 | return err; |
| 557 | } | ||
| 552 | 558 | ||
| 553 | for (i = 0; i < cnt; i++) { | 559 | for (i = 0; i < cnt; i++) { |
| 554 | rhl_test_objects[i].value.tid = i; | 560 | rhl_test_objects[i].value.tid = i; |
| 555 | key = rht_obj(&rhlt.ht, &rhl_test_objects[i].list_node.rhead); | 561 | key = rht_obj(&rhlt->ht, &rhl_test_objects[i].list_node.rhead); |
| 556 | key += test_rht_params_dup.key_offset; | 562 | key += test_rht_params_dup.key_offset; |
| 557 | 563 | ||
| 558 | if (slow) { | 564 | if (slow) { |
| 559 | err = PTR_ERR(rhashtable_insert_slow(&rhlt.ht, key, | 565 | err = PTR_ERR(rhashtable_insert_slow(&rhlt->ht, key, |
| 560 | &rhl_test_objects[i].list_node.rhead)); | 566 | &rhl_test_objects[i].list_node.rhead)); |
| 561 | if (err == -EAGAIN) | 567 | if (err == -EAGAIN) |
| 562 | err = 0; | 568 | err = 0; |
| 563 | } else | 569 | } else |
| 564 | err = rhltable_insert(&rhlt, | 570 | err = rhltable_insert(rhlt, |
| 565 | &rhl_test_objects[i].list_node, | 571 | &rhl_test_objects[i].list_node, |
| 566 | test_rht_params_dup); | 572 | test_rht_params_dup); |
| 567 | if (WARN(err, "error %d on element %d/%d (%s)\n", err, i, cnt, slow? "slow" : "fast")) | 573 | if (WARN(err, "error %d on element %d/%d (%s)\n", err, i, cnt, slow? "slow" : "fast")) |
| 568 | goto skip_print; | 574 | goto skip_print; |
| 569 | } | 575 | } |
| 570 | 576 | ||
| 571 | ret = print_ht(&rhlt); | 577 | ret = print_ht(rhlt); |
| 572 | WARN(ret != cnt, "missing rhltable elements (%d != %d, %s)\n", ret, cnt, slow? "slow" : "fast"); | 578 | WARN(ret != cnt, "missing rhltable elements (%d != %d, %s)\n", ret, cnt, slow? "slow" : "fast"); |
| 573 | 579 | ||
| 574 | skip_print: | 580 | skip_print: |
| 575 | rhltable_destroy(&rhlt); | 581 | rhltable_destroy(rhlt); |
| 582 | kfree(rhlt); | ||
| 576 | 583 | ||
| 577 | return 0; | 584 | return 0; |
| 578 | } | 585 | } |
