summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2012-05-08 00:39:29 +0200
committerSage Weil <sage@inktank.com>2012-05-08 00:39:29 +0200
commit41ebcc0907c58f75d0b25afcaf8b9c35c6b1ad14 (patch)
treec05054ce3d7fc0e512501a708511a9b1bd8647eb
parentcrush: use a temporary variable to simplify crush_do_rule (diff)
downloadlinux-41ebcc0907c58f75d0b25afcaf8b9c35c6b1ad14.tar.xz
linux-41ebcc0907c58f75d0b25afcaf8b9c35c6b1ad14.zip
crush: remove forcefeed functionality
Remove forcefeed functionality from CRUSH. This is an ugly misfeature that is mostly useless and unused. Remove it. Reflects ceph.git commit ed974b5000f2851207d860a651809af4a1867942. Reviewed-by: Alex Elder <elder@inktank.com> Signed-off-by: Sage Weil <sage@inktank.com> Conflicts: net/ceph/crush/mapper.c
-rw-r--r--include/linux/crush/mapper.h1
-rw-r--r--net/ceph/crush/mapper.c48
-rw-r--r--net/ceph/osdmap.c2
3 files changed, 2 insertions, 49 deletions
diff --git a/include/linux/crush/mapper.h b/include/linux/crush/mapper.h
index 9322ab8bccd8..71d79f44a7d0 100644
--- a/include/linux/crush/mapper.h
+++ b/include/linux/crush/mapper.h
@@ -14,7 +14,6 @@ extern int crush_find_rule(const struct crush_map *map, int ruleset, int type, i
extern int crush_do_rule(const struct crush_map *map,
int ruleno,
int x, int *result, int result_max,
- int forcefeed, /* -1 for none */
const __u32 *weights);
#endif
diff --git a/net/ceph/crush/mapper.c b/net/ceph/crush/mapper.c
index fba9460fe572..11cf352201ba 100644
--- a/net/ceph/crush/mapper.c
+++ b/net/ceph/crush/mapper.c
@@ -463,15 +463,12 @@ reject:
* @x: hash input
* @result: pointer to result vector
* @result_max: maximum result size
- * @force: force initial replica choice; -1 for none
*/
int crush_do_rule(const struct crush_map *map,
int ruleno, int x, int *result, int result_max,
- int force, const __u32 *weight)
+ const __u32 *weight)
{
int result_len;
- int force_context[CRUSH_MAX_DEPTH];
- int force_pos = -1;
int a[CRUSH_MAX_SET];
int b[CRUSH_MAX_SET];
int c[CRUSH_MAX_SET];
@@ -497,27 +494,6 @@ int crush_do_rule(const struct crush_map *map,
w = a;
o = b;
- /*
- * determine hierarchical context of force, if any. note
- * that this may or may not correspond to the specific types
- * referenced by the crush rule. it will also only affect
- * the first descent (TAKE).
- */
- if (force >= 0 &&
- force < map->max_devices &&
- map->device_parents[force] != 0 &&
- !is_out(map, weight, force, x)) {
- while (1) {
- force_context[++force_pos] = force;
- if (force >= 0)
- force = map->device_parents[force];
- else
- force = map->bucket_parents[-1-force];
- if (force == 0)
- break;
- }
- }
-
for (step = 0; step < rule->len; step++) {
struct crush_rule_step *curstep = &rule->steps[step];
@@ -525,14 +501,6 @@ int crush_do_rule(const struct crush_map *map,
switch (curstep->op) {
case CRUSH_RULE_TAKE:
w[0] = curstep->arg1;
-
- /* find position in force_context/hierarchy */
- while (force_pos >= 0 && force_context[force_pos] != w[0])
- force_pos--;
- /* and move past it */
- if (force_pos >= 0)
- force_pos--;
-
wsize = 1;
break;
@@ -567,20 +535,6 @@ int crush_do_rule(const struct crush_map *map,
continue;
}
j = 0;
- if (osize == 0 && force_pos >= 0) {
- /* skip any intermediate types */
- while (force_pos &&
- force_context[force_pos] < 0 &&
- curstep->arg2 !=
- map->buckets[-1 -
- force_context[force_pos]]->type)
- force_pos--;
- o[osize] = force_context[force_pos];
- if (recurse_to_leaf)
- c[osize] = force_context[0];
- j++;
- force_pos--;
- }
osize += crush_choose(map,
map->buckets[-1-w[i]],
weight,
diff --git a/net/ceph/osdmap.c b/net/ceph/osdmap.c
index 7d39f3cb4947..9dda36f7aa9d 100644
--- a/net/ceph/osdmap.c
+++ b/net/ceph/osdmap.c
@@ -1069,7 +1069,7 @@ static int *calc_pg_raw(struct ceph_osdmap *osdmap, struct ceph_pg pgid,
pps += poolid;
*num = crush_do_rule(osdmap->crush, ruleno, pps, osds,
min_t(int, pool->v.size, *num),
- -1, osdmap->osd_weight);
+ osdmap->osd_weight);
return osds;
}