int *out, int outpos,
unsigned int attempts,
unsigned int recurse_attempts,
+ unsigned int local_tries,
+ unsigned int local_fallback_tries,
int recurse_to_leaf,
int *out2)
{
reject = 1;
goto reject;
}
- if (map->choose_local_fallback_tries > 0 &&
+ if (local_fallback_tries > 0 &&
flocal >= (in->size>>1) &&
- flocal > map->choose_local_fallback_tries)
+ flocal > local_fallback_tries)
item = bucket_perm_choose(in, x, r);
else
item = crush_bucket_choose(in, x, r);
x, outpos+1, 0,
out2, outpos,
recurse_attempts, 0,
+ local_tries,
+ local_fallback_tries,
0,
NULL) <= outpos)
/* didn't get leaf */
ftotal++;
flocal++;
- if (collide && flocal <= map->choose_local_tries)
+ if (collide && flocal <= local_tries)
/* retry locally a few times */
retry_bucket = 1;
- else if (map->choose_local_fallback_tries > 0 &&
- flocal <= in->size + map->choose_local_fallback_tries)
+ else if (local_fallback_tries > 0 &&
+ flocal <= in->size + local_fallback_tries)
/* exhaustive bucket search */
retry_bucket = 1;
else if (ftotal <= attempts)
int i, j;
int numrep;
int choose_tries = map->choose_total_tries;
+ int choose_local_tries = map->choose_local_tries;
+ int choose_local_fallback_tries = map->choose_local_fallback_tries;
int choose_leaf_tries = 0;
if ((__u32)ruleno >= map->max_rules) {
choose_leaf_tries = curstep->arg1;
break;
+ case CRUSH_RULE_SET_CHOOSE_LOCAL_TRIES:
+ if (curstep->arg1 > 0)
+ choose_local_tries = curstep->arg1;
+ break;
+
+ case CRUSH_RULE_SET_CHOOSE_LOCAL_FALLBACK_TRIES:
+ if (curstep->arg1 > 0)
+ choose_local_fallback_tries = curstep->arg1;
+ break;
+
case CRUSH_RULE_CHOOSELEAF_FIRSTN:
case CRUSH_RULE_CHOOSE_FIRSTN:
firstn = 1;
o+osize, j,
choose_tries,
recurse_tries,
+ choose_local_tries,
+ choose_local_fallback_tries,
recurse_to_leaf,
c+osize);
} else {