Loading fs/ceph/crush/mapper.c +25 −13 Original line number Diff line number Diff line Loading @@ -238,7 +238,7 @@ static int bucket_straw_choose(struct crush_bucket_straw *bucket, static int crush_bucket_choose(struct crush_bucket *in, int x, int r) { dprintk("choose %d x=%d r=%d\n", in->id, x, r); dprintk(" crush_bucket_choose %d x=%d r=%d\n", in->id, x, r); switch (in->alg) { case CRUSH_BUCKET_UNIFORM: return bucket_uniform_choose((struct crush_bucket_uniform *)in, Loading Loading @@ -305,7 +305,9 @@ static int crush_choose(struct crush_map *map, int itemtype; int collide, reject; const int orig_tries = 5; /* attempts before we fall back to search */ dprintk("choose bucket %d x %d outpos %d\n", bucket->id, x, outpos); dprintk("CHOOSE%s bucket %d x %d outpos %d numrep %d\n", recurse_to_leaf ? "_LEAF" : "", bucket->id, x, outpos, numrep); for (rep = outpos; rep < numrep; rep++) { /* keep trying until we get a non-out, non-colliding item */ Loading Loading @@ -378,15 +380,25 @@ static int crush_choose(struct crush_map *map, } } if (recurse_to_leaf && item < 0 && crush_choose(map, map->buckets[-1-item], reject = 0; if (recurse_to_leaf) { if (item < 0) { if (crush_choose(map, map->buckets[-1-item], weight, x, outpos+1, 0, out2, outpos, firstn, 0, NULL) <= outpos) { firstn, 0, NULL) <= outpos) /* didn't get leaf */ reject = 1; } else { /* we already have a leaf! */ out2[outpos] = item; } } if (!reject) { /* out? */ if (itemtype == 0) reject = is_out(map, weight, Loading Loading @@ -425,12 +437,12 @@ static int crush_choose(struct crush_map *map, continue; } dprintk("choose got %d\n", item); dprintk("CHOOSE got %d\n", item); out[outpos] = item; outpos++; } dprintk("choose returns %d\n", outpos); dprintk("CHOOSE returns %d\n", outpos); return outpos; } Loading Loading
fs/ceph/crush/mapper.c +25 −13 Original line number Diff line number Diff line Loading @@ -238,7 +238,7 @@ static int bucket_straw_choose(struct crush_bucket_straw *bucket, static int crush_bucket_choose(struct crush_bucket *in, int x, int r) { dprintk("choose %d x=%d r=%d\n", in->id, x, r); dprintk(" crush_bucket_choose %d x=%d r=%d\n", in->id, x, r); switch (in->alg) { case CRUSH_BUCKET_UNIFORM: return bucket_uniform_choose((struct crush_bucket_uniform *)in, Loading Loading @@ -305,7 +305,9 @@ static int crush_choose(struct crush_map *map, int itemtype; int collide, reject; const int orig_tries = 5; /* attempts before we fall back to search */ dprintk("choose bucket %d x %d outpos %d\n", bucket->id, x, outpos); dprintk("CHOOSE%s bucket %d x %d outpos %d numrep %d\n", recurse_to_leaf ? "_LEAF" : "", bucket->id, x, outpos, numrep); for (rep = outpos; rep < numrep; rep++) { /* keep trying until we get a non-out, non-colliding item */ Loading Loading @@ -378,15 +380,25 @@ static int crush_choose(struct crush_map *map, } } if (recurse_to_leaf && item < 0 && crush_choose(map, map->buckets[-1-item], reject = 0; if (recurse_to_leaf) { if (item < 0) { if (crush_choose(map, map->buckets[-1-item], weight, x, outpos+1, 0, out2, outpos, firstn, 0, NULL) <= outpos) { firstn, 0, NULL) <= outpos) /* didn't get leaf */ reject = 1; } else { /* we already have a leaf! */ out2[outpos] = item; } } if (!reject) { /* out? */ if (itemtype == 0) reject = is_out(map, weight, Loading Loading @@ -425,12 +437,12 @@ static int crush_choose(struct crush_map *map, continue; } dprintk("choose got %d\n", item); dprintk("CHOOSE got %d\n", item); out[outpos] = item; outpos++; } dprintk("choose returns %d\n", outpos); dprintk("CHOOSE returns %d\n", outpos); return outpos; } Loading