summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/ceph/crush/mapper.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/net/ceph/crush/mapper.c b/net/ceph/crush/mapper.c
index 125dbd04f2b6..c727836b5860 100644
--- a/net/ceph/crush/mapper.c
+++ b/net/ceph/crush/mapper.c
@@ -460,7 +460,8 @@ static void crush_choose_indep(const struct crush_map *map,
int x, int left, int numrep, int type,
int *out, int outpos,
int recurse_to_leaf,
- int *out2)
+ int *out2,
+ int parent_r)
{
struct crush_bucket *in = bucket;
int endpos = outpos + left;
@@ -499,7 +500,7 @@ static void crush_choose_indep(const struct crush_map *map,
* this will involve more devices in data
* movement and tend to distribute the load.
*/
- r = rep;
+ r = rep + parent_r;
/* be careful */
if (in->alg == CRUSH_BUCKET_UNIFORM &&
@@ -567,7 +568,7 @@ static void crush_choose_indep(const struct crush_map *map,
weight, weight_max,
x, 1, numrep, 0,
out2, rep,
- 0, NULL);
+ 0, NULL, r);
if (out2[rep] == CRUSH_ITEM_NONE) {
/* placed nothing; no leaf */
break;
@@ -702,7 +703,8 @@ int crush_do_rule(const struct crush_map *map,
curstep->arg2,
o+osize, j,
recurse_to_leaf,
- c+osize);
+ c+osize,
+ 0);
osize += numrep;
}
}