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:
Родитель
a1f4895be8
Коммит
0668216efe
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче