Browse Source

crush: fix force for non-root TAKE

Signed-off-by: Sage Weil <sage@newdream.net>
Sage Weil 13 years ago
parent
commit
e11b05d31f
1 changed files with 8 additions and 3 deletions
  1. 8 3
      net/ceph/crush/mapper.c

+ 8 - 3
net/ceph/crush/mapper.c

@@ -510,10 +510,15 @@ int crush_do_rule(struct crush_map *map,
 		switch (rule->steps[step].op) {
 		case CRUSH_RULE_TAKE:
 			w[0] = rule->steps[step].arg1;
-			if (force_pos >= 0) {
-				BUG_ON(force_context[force_pos] != w[0]);
+
+			/* 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;