rhashtable-test: allow to retry even if -ENOMEM was returned
This is rather a hack to expose the current issue with rhashtable to under high pressure sometimes return -ENOMEM even though system memory is not exhausted and a consecutive insert may succeed. Signed-off-by: Phil Sutter <phil@nwl.cc> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
95e435afef
commit
d662e037fc
|
@ -52,6 +52,10 @@ static int tcount = 10;
|
|||
module_param(tcount, int, 0);
|
||||
MODULE_PARM_DESC(tcount, "Number of threads to spawn (default: 10)");
|
||||
|
||||
static bool enomem_retry = false;
|
||||
module_param(enomem_retry, bool, 0);
|
||||
MODULE_PARM_DESC(enomem_retry, "Retry insert even if -ENOMEM was returned (default: off)");
|
||||
|
||||
struct test_obj {
|
||||
int value;
|
||||
struct rhash_head node;
|
||||
|
@ -79,14 +83,22 @@ static struct semaphore startup_sem = __SEMAPHORE_INITIALIZER(startup_sem, 0);
|
|||
static int insert_retry(struct rhashtable *ht, struct rhash_head *obj,
|
||||
const struct rhashtable_params params)
|
||||
{
|
||||
int err, retries = -1;
|
||||
int err, retries = -1, enomem_retries = 0;
|
||||
|
||||
do {
|
||||
retries++;
|
||||
cond_resched();
|
||||
err = rhashtable_insert_fast(ht, obj, params);
|
||||
if (err == -ENOMEM && enomem_retry) {
|
||||
enomem_retries++;
|
||||
err = -EBUSY;
|
||||
}
|
||||
} while (err == -EBUSY);
|
||||
|
||||
if (enomem_retries)
|
||||
pr_info(" %u insertions retried after -ENOMEM\n",
|
||||
enomem_retries);
|
||||
|
||||
return err ? : retries;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue