Skip to content

Commit

Permalink
crush: remove forcefeed functionality
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Sage Weil committed May 7, 2012
1 parent 0668216 commit 41ebcc0
Show file tree
Hide file tree
Showing 3 changed files with 2 additions and 49 deletions.
1 change: 0 additions & 1 deletion include/linux/crush/mapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
48 changes: 1 addition & 47 deletions net/ceph/crush/mapper.c
Original file line number Diff line number Diff line change
Expand Up @@ -463,15 +463,12 @@ static int crush_choose(const struct crush_map *map,
* @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];
Expand All @@ -497,42 +494,13 @@ 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];

firstn = 0;
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;

Expand Down Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion net/ceph/osdmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down

0 comments on commit 41ebcc0

Please sign in to comment.