crush: use a temporary variable to simplify crush_do_rule
authorSage Weil <sage@inktank.com>
Mon, 7 May 2012 22:35:48 +0000 (15:35 -0700)
committerSage Weil <sage@inktank.com>
Mon, 7 May 2012 22:38:51 +0000 (15:38 -0700)
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>
net/ceph/crush/mapper.c

index 00baad5..fba9460 100644 (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);