aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/ceph/osdmap.c39
1 files changed, 11 insertions, 28 deletions
diff --git a/net/ceph/osdmap.c b/net/ceph/osdmap.c
index 2586e5546143..0bec71fa712e 100644
--- a/net/ceph/osdmap.c
+++ b/net/ceph/osdmap.c
@@ -2437,40 +2437,23 @@ static void apply_upmap(struct ceph_osdmap *osdmap,
2437 for (i = 0; i < pg->pg_upmap.len; i++) 2437 for (i = 0; i < pg->pg_upmap.len; i++)
2438 raw->osds[i] = pg->pg_upmap.osds[i]; 2438 raw->osds[i] = pg->pg_upmap.osds[i];
2439 raw->size = pg->pg_upmap.len; 2439 raw->size = pg->pg_upmap.len;
2440 return; 2440 /* check and apply pg_upmap_items, if any */
2441 } 2441 }
2442 2442
2443 pg = lookup_pg_mapping(&osdmap->pg_upmap_items, pgid); 2443 pg = lookup_pg_mapping(&osdmap->pg_upmap_items, pgid);
2444 if (pg) { 2444 if (pg) {
2445 /* 2445 for (i = 0; i < raw->size; i++) {
2446 * Note: this approach does not allow a bidirectional swap, 2446 for (j = 0; j < pg->pg_upmap_items.len; j++) {
2447 * e.g., [[1,2],[2,1]] applied to [0,1,2] -> [0,2,1]. 2447 int from = pg->pg_upmap_items.from_to[j][0];
2448 */ 2448 int to = pg->pg_upmap_items.from_to[j][1];
2449 for (i = 0; i < pg->pg_upmap_items.len; i++) { 2449
2450 int from = pg->pg_upmap_items.from_to[i][0]; 2450 if (from == raw->osds[i]) {
2451 int to = pg->pg_upmap_items.from_to[i][1]; 2451 if (!(to != CRUSH_ITEM_NONE &&
2452 int pos = -1; 2452 to < osdmap->max_osd &&
2453 bool exists = false; 2453 osdmap->osd_weight[to] == 0))
2454 2454 raw->osds[i] = to;
2455 /* make sure replacement doesn't already appear */
2456 for (j = 0; j < raw->size; j++) {
2457 int osd = raw->osds[j];
2458
2459 if (osd == to) {
2460 exists = true;
2461 break; 2455 break;
2462 } 2456 }
2463 /* ignore mapping if target is marked out */
2464 if (osd == from && pos < 0 &&
2465 !(to != CRUSH_ITEM_NONE &&
2466 to < osdmap->max_osd &&
2467 osdmap->osd_weight[to] == 0)) {
2468 pos = j;
2469 }
2470 }
2471 if (!exists && pos >= 0) {
2472 raw->osds[pos] = to;
2473 return;
2474 } 2457 }
2475 } 2458 }
2476 } 2459 }