diff options
author | Ilya Dryomov <ilya.dryomov@inktank.com> | 2013-12-24 21:19:25 +0200 |
---|---|---|
committer | Ilya Dryomov <ilya.dryomov@inktank.com> | 2013-12-31 20:32:19 +0200 |
commit | ab4ce2b5bdb5ca416756df3df6f5c63667a05065 (patch) | |
tree | 416fb514da8cd03f0700bcb14bbf1b6e6ecaf11a /net/ceph | |
parent | 9fe07182827d9913daf85f3e6a950578a3fd4c5d (diff) |
crush: clarify numrep vs endpos
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>
Diffstat (limited to 'net/ceph')
-rw-r--r-- | net/ceph/crush/mapper.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/net/ceph/crush/mapper.c b/net/ceph/crush/mapper.c index a71f8c4c78ec..125dbd04f2b6 100644 --- a/net/ceph/crush/mapper.c +++ b/net/ceph/crush/mapper.c @@ -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, |