From 4af2371494cc864ed2ab53bb8b619f78c6ba9614 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 12 Dec 2011 09:35:22 -0800 Subject: [PATCH] --- yaml --- r: 284444 b: refs/heads/master c: e11b05d31f21f0ea39ea288af667887cd6c21c80 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/ceph/crush/mapper.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 05b3cb4188eb..98a2c8089a35 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3d8eb7a94e8f25a33362f708974ac7daae9e84f8 +refs/heads/master: e11b05d31f21f0ea39ea288af667887cd6c21c80 diff --git a/trunk/net/ceph/crush/mapper.c b/trunk/net/ceph/crush/mapper.c index 3a94eae7abe9..b79747c4b645 100644 --- a/trunk/net/ceph/crush/mapper.c +++ b/trunk/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;