libceph: generalize ceph_pg_mapping

In preparation for adding support for primary_temp mappings, generalize
struct ceph_pg_mapping so it can hold mappings other than pg_temp.

Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com>
Reviewed-by: Alex Elder <elder@linaro.org>
This commit is contained in:
Ilya Dryomov 2014-03-21 19:05:29 +02:00 committed by Sage Weil
parent ec7af97258
commit 35a935d75d
3 changed files with 13 additions and 8 deletions

View file

@ -60,8 +60,13 @@ struct ceph_object_id {
struct ceph_pg_mapping { struct ceph_pg_mapping {
struct rb_node node; struct rb_node node;
struct ceph_pg pgid; struct ceph_pg pgid;
int len;
int osds[]; union {
struct {
int len;
int osds[];
} pg_temp;
};
}; };
struct ceph_osdmap { struct ceph_osdmap {

View file

@ -88,9 +88,9 @@ static int osdmap_show(struct seq_file *s, void *p)
seq_printf(s, "pg_temp %llu.%x [", pg->pgid.pool, seq_printf(s, "pg_temp %llu.%x [", pg->pgid.pool,
pg->pgid.seed); pg->pgid.seed);
for (i = 0; i < pg->len; i++) for (i = 0; i < pg->pg_temp.len; i++)
seq_printf(s, "%s%d", (i == 0 ? "" : ","), seq_printf(s, "%s%d", (i == 0 ? "" : ","),
pg->osds[i]); pg->pg_temp.osds[i]);
seq_printf(s, "]\n"); seq_printf(s, "]\n");
} }

View file

@ -822,9 +822,9 @@ static int __decode_pg_temp(void **p, void *end, struct ceph_osdmap *map,
return -ENOMEM; return -ENOMEM;
pg->pgid = pgid; pg->pgid = pgid;
pg->len = len; pg->pg_temp.len = len;
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
pg->osds[i] = ceph_decode_32(p); pg->pg_temp.osds[i] = ceph_decode_32(p);
ret = __insert_pg_mapping(pg, &map->pg_temp); ret = __insert_pg_mapping(pg, &map->pg_temp);
if (ret) { if (ret) {
@ -1281,8 +1281,8 @@ static int *calc_pg_raw(struct ceph_osdmap *osdmap, struct ceph_pg pgid,
pool->pg_num_mask); pool->pg_num_mask);
pg = __lookup_pg_mapping(&osdmap->pg_temp, pgid); pg = __lookup_pg_mapping(&osdmap->pg_temp, pgid);
if (pg) { if (pg) {
*num = pg->len; *num = pg->pg_temp.len;
return pg->osds; return pg->pg_temp.osds;
} }
/* crush */ /* crush */