crush: use a temporary variable to simplify crush_do_rule

Use a temporary variable here to avoid repeated array lookups and clean up
the code a bit.

This reflects ceph.git commit 6b5be27634ad307b471a5bf0db85c4f5c834885f.

Reviewed-by: Alex Elder <elder@inktank.com>
Signed-off-by: Sage Weil <sage@inktank.com>
This commit is contained in:
Sage Weil 2012-05-07 15:35:48 -07:00
parent a1f4895be8
commit 0668216efe
1 changed files with 11 additions and 9 deletions

View File

@ -519,14 +519,15 @@ int crush_do_rule(const struct crush_map *map,
}
for (step = 0; step < rule->len; step++) {
struct crush_rule_step *curstep = &rule->steps[step];
firstn = 0;
switch (rule->steps[step].op) {
switch (curstep->op) {
case CRUSH_RULE_TAKE:
w[0] = rule->steps[step].arg1;
w[0] = curstep->arg1;
/* find position in force_context/hierarchy */
while (force_pos >= 0 &&
force_context[force_pos] != w[0])
while (force_pos >= 0 && force_context[force_pos] != w[0])
force_pos--;
/* and move past it */
if (force_pos >= 0)
@ -538,15 +539,16 @@ int crush_do_rule(const struct crush_map *map,
case CRUSH_RULE_CHOOSE_LEAF_FIRSTN:
case CRUSH_RULE_CHOOSE_FIRSTN:
firstn = 1;
/* fall through */
case CRUSH_RULE_CHOOSE_LEAF_INDEP:
case CRUSH_RULE_CHOOSE_INDEP:
if (wsize == 0)
break;
recurse_to_leaf =
rule->steps[step].op ==
curstep->op ==
CRUSH_RULE_CHOOSE_LEAF_FIRSTN ||
rule->steps[step].op ==
curstep->op ==
CRUSH_RULE_CHOOSE_LEAF_INDEP;
/* reset output */
@ -558,7 +560,7 @@ int crush_do_rule(const struct crush_map *map,
* basically, numrep <= 0 means relative to
* the provided result_max
*/
numrep = rule->steps[step].arg1;
numrep = curstep->arg1;
if (numrep <= 0) {
numrep += result_max;
if (numrep <= 0)
@ -569,7 +571,7 @@ int crush_do_rule(const struct crush_map *map,
/* skip any intermediate types */
while (force_pos &&
force_context[force_pos] < 0 &&
rule->steps[step].arg2 !=
curstep->arg2 !=
map->buckets[-1 -
force_context[force_pos]]->type)
force_pos--;
@ -583,7 +585,7 @@ int crush_do_rule(const struct crush_map *map,
map->buckets[-1-w[i]],
weight,
x, numrep,
rule->steps[step].arg2,
curstep->arg2,
o+osize, j,
firstn,
recurse_to_leaf, c+osize);