]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
crush: clarify numrep vs endpos
authorIlya Dryomov <ilya.dryomov@inktank.com>
Tue, 24 Dec 2013 19:19:25 +0000 (21:19 +0200)
committerIlya Dryomov <ilya.dryomov@inktank.com>
Tue, 31 Dec 2013 18:32:19 +0000 (20:32 +0200)
Pass numrep (the width of the result) separately from the number of results
we want *this* iteration.  This makes things less awkward when we do a
recursive call (for chooseleaf) and want only one item.

Reflects ceph.git commit 1b567ee08972f268c11b43fc881e57b5984dd08b.

Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
net/ceph/crush/mapper.c

index a71f8c4c78ec6b3dd7b878686b7c5bfcbe5e24d1..125dbd04f2b6a6e58e2dde4ae072f6e254250d65 100644 (file)
@@ -457,13 +457,13 @@ reject:
 static void crush_choose_indep(const struct crush_map *map,
                              struct crush_bucket *bucket,
                              const __u32 *weight, int weight_max,
-                             int x, int numrep, int type,
+                              int x, int left, int numrep, int type,
                              int *out, int outpos,
                              int recurse_to_leaf,
                              int *out2)
 {
        struct crush_bucket *in = bucket;
-       int left = numrep - outpos;
+       int endpos = outpos + left;
        int rep;
        unsigned int ftotal;
        int r;
@@ -476,14 +476,14 @@ static void crush_choose_indep(const struct crush_map *map,
                bucket->id, x, outpos, numrep);
 
        /* initially my result is undefined */
-       for (rep = outpos; rep < numrep; rep++) {
+       for (rep = outpos; rep < endpos; rep++) {
                out[rep] = CRUSH_ITEM_UNDEF;
                if (out2)
                        out2[rep] = CRUSH_ITEM_UNDEF;
        }
 
        for (ftotal = 0; left > 0 && ftotal < map->choose_total_tries; ftotal++) {
-               for (rep = outpos; rep < numrep; rep++) {
+               for (rep = outpos; rep < endpos; rep++) {
                        if (out[rep] != CRUSH_ITEM_UNDEF)
                                continue;
 
@@ -551,7 +551,7 @@ static void crush_choose_indep(const struct crush_map *map,
 
                                /* collision? */
                                collide = 0;
-                               for (i = outpos; i < numrep; i++) {
+                               for (i = outpos; i < endpos; i++) {
                                        if (out[i] == item) {
                                                collide = 1;
                                                break;
@@ -565,7 +565,7 @@ static void crush_choose_indep(const struct crush_map *map,
                                                crush_choose_indep(map,
                                                                   map->buckets[-1-item],
                                                                   weight, weight_max,
-                                                                  x, rep+1, 0,
+                                                                  x, 1, numrep, 0,
                                                                   out2, rep,
                                                                   0, NULL);
                                                if (out2[rep] == CRUSH_ITEM_NONE) {
@@ -590,7 +590,7 @@ static void crush_choose_indep(const struct crush_map *map,
                        }
                }
        }
-       for (rep = outpos; rep < numrep; rep++) {
+       for (rep = outpos; rep < endpos; rep++) {
                if (out[rep] == CRUSH_ITEM_UNDEF) {
                        out[rep] = CRUSH_ITEM_NONE;
                }
@@ -698,7 +698,7 @@ int crush_do_rule(const struct crush_map *map,
                                                map,
                                                map->buckets[-1-w[i]],
                                                weight, weight_max,
-                                               x, numrep,
+                                               x, numrep, numrep,
                                                curstep->arg2,
                                                o+osize, j,
                                                recurse_to_leaf,