From: Sage Weil Date: Mon, 12 Dec 2011 17:35:22 +0000 (-0800) Subject: crush: fix force for non-root TAKE X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=e11b05d31f21f0ea39ea288af667887cd6c21c80;p=linux-beck.git crush: fix force for non-root TAKE Signed-off-by: Sage Weil --- diff --git a/net/ceph/crush/mapper.c b/net/ceph/crush/mapper.c index 3a94eae7abe9..b79747c4b645 100644 --- a/net/ceph/crush/mapper.c +++ b/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;