diff options
Diffstat (limited to 'net/ceph/osdmap.c')
-rw-r--r-- | net/ceph/osdmap.c | 45 |
1 files changed, 11 insertions, 34 deletions
diff --git a/net/ceph/osdmap.c b/net/ceph/osdmap.c index 4543b9aba40c..603ddd92db19 100644 --- a/net/ceph/osdmap.c +++ b/net/ceph/osdmap.c | |||
@@ -654,24 +654,6 @@ static int osdmap_set_max_osd(struct ceph_osdmap *map, int max) | |||
654 | return 0; | 654 | return 0; |
655 | } | 655 | } |
656 | 656 | ||
657 | static int __decode_pgid(void **p, void *end, struct ceph_pg *pg) | ||
658 | { | ||
659 | u8 v; | ||
660 | |||
661 | ceph_decode_need(p, end, 1+8+4+4, bad); | ||
662 | v = ceph_decode_8(p); | ||
663 | if (v != 1) | ||
664 | goto bad; | ||
665 | pg->pool = ceph_decode_64(p); | ||
666 | pg->seed = ceph_decode_32(p); | ||
667 | *p += 4; /* skip preferred */ | ||
668 | return 0; | ||
669 | |||
670 | bad: | ||
671 | dout("error decoding pgid\n"); | ||
672 | return -EINVAL; | ||
673 | } | ||
674 | |||
675 | /* | 657 | /* |
676 | * decode a full map. | 658 | * decode a full map. |
677 | */ | 659 | */ |
@@ -765,7 +747,7 @@ struct ceph_osdmap *osdmap_decode(void **p, void *end) | |||
765 | struct ceph_pg pgid; | 747 | struct ceph_pg pgid; |
766 | struct ceph_pg_mapping *pg; | 748 | struct ceph_pg_mapping *pg; |
767 | 749 | ||
768 | err = __decode_pgid(p, end, &pgid); | 750 | err = ceph_decode_pgid(p, end, &pgid); |
769 | if (err) | 751 | if (err) |
770 | goto bad; | 752 | goto bad; |
771 | ceph_decode_need(p, end, sizeof(u32), bad); | 753 | ceph_decode_need(p, end, sizeof(u32), bad); |
@@ -983,7 +965,7 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end, | |||
983 | struct ceph_pg pgid; | 965 | struct ceph_pg pgid; |
984 | u32 pglen; | 966 | u32 pglen; |
985 | 967 | ||
986 | err = __decode_pgid(p, end, &pgid); | 968 | err = ceph_decode_pgid(p, end, &pgid); |
987 | if (err) | 969 | if (err) |
988 | goto bad; | 970 | goto bad; |
989 | ceph_decode_need(p, end, sizeof(u32), bad); | 971 | ceph_decode_need(p, end, sizeof(u32), bad); |
@@ -1111,27 +1093,22 @@ EXPORT_SYMBOL(ceph_calc_file_object_mapping); | |||
1111 | * calculate an object layout (i.e. pgid) from an oid, | 1093 | * calculate an object layout (i.e. pgid) from an oid, |
1112 | * file_layout, and osdmap | 1094 | * file_layout, and osdmap |
1113 | */ | 1095 | */ |
1114 | int ceph_calc_object_layout(struct ceph_pg *pg, | 1096 | int ceph_calc_ceph_pg(struct ceph_pg *pg, const char *oid, |
1115 | const char *oid, | 1097 | struct ceph_osdmap *osdmap, uint64_t pool) |
1116 | struct ceph_file_layout *fl, | ||
1117 | struct ceph_osdmap *osdmap) | ||
1118 | { | 1098 | { |
1119 | unsigned int num, num_mask; | 1099 | struct ceph_pg_pool_info *pool_info; |
1120 | struct ceph_pg_pool_info *pool; | ||
1121 | 1100 | ||
1122 | BUG_ON(!osdmap); | 1101 | BUG_ON(!osdmap); |
1123 | pg->pool = le32_to_cpu(fl->fl_pg_pool); | 1102 | pool_info = __lookup_pg_pool(&osdmap->pg_pools, pool); |
1124 | pool = __lookup_pg_pool(&osdmap->pg_pools, pg->pool); | 1103 | if (!pool_info) |
1125 | if (!pool) | ||
1126 | return -EIO; | 1104 | return -EIO; |
1127 | pg->seed = ceph_str_hash(pool->object_hash, oid, strlen(oid)); | 1105 | pg->pool = pool; |
1128 | num = pool->pg_num; | 1106 | pg->seed = ceph_str_hash(pool_info->object_hash, oid, strlen(oid)); |
1129 | num_mask = pool->pg_num_mask; | ||
1130 | 1107 | ||
1131 | dout("calc_object_layout '%s' pgid %lld.%x\n", oid, pg->pool, pg->seed); | 1108 | dout("%s '%s' pgid %lld.%x\n", __func__, oid, pg->pool, pg->seed); |
1132 | return 0; | 1109 | return 0; |
1133 | } | 1110 | } |
1134 | EXPORT_SYMBOL(ceph_calc_object_layout); | 1111 | EXPORT_SYMBOL(ceph_calc_ceph_pg); |
1135 | 1112 | ||
1136 | /* | 1113 | /* |
1137 | * Calculate raw osd vector for the given pgid. Return pointer to osd | 1114 | * Calculate raw osd vector for the given pgid. Return pointer to osd |