Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ab4ce2b5 authored by Ilya Dryomov's avatar Ilya Dryomov
Browse files

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: default avatarIlya Dryomov <ilya.dryomov@inktank.com>
Reviewed-by: default avatarSage Weil <sage@inktank.com>
parent 9fe07182
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -457,13 +457,13 @@ static int crush_choose_firstn(const struct crush_map *map,
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,