Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 02f90c61 authored by Sage Weil's avatar Sage Weil
Browse files

ceph: add uid field to ceph_pg_pool



Also verify encoding version as we go.

Signed-off-by: default avatarSage Weil <sage@newdream.net>
parent f5a2041b
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -426,6 +426,11 @@ struct ceph_osdmap *osdmap_decode(void **p, void *end)
	map->pg_temp = RB_ROOT;

	ceph_decode_16_safe(p, end, version, bad);
	if (version > CEPH_OSDMAP_VERSION) {
		pr_warning("got unknown v %d > %d of osdmap\n", version,
			   CEPH_OSDMAP_VERSION);
		goto bad;
	}

	ceph_decode_need(p, end, 2*sizeof(u64)+6*sizeof(u32), bad);
	ceph_decode_copy(p, &map->fsid, sizeof(map->fsid));
@@ -447,6 +452,11 @@ struct ceph_osdmap *osdmap_decode(void **p, void *end)
		if (i >= map->num_pools)
			goto bad;
		ev = ceph_decode_8(p); /* encoding version */
		if (ev > CEPH_PG_POOL_VERSION) {
			pr_warning("got unknown v %d > %d of ceph_pg_pool\n",
				   ev, CEPH_PG_POOL_VERSION);
			goto bad;
		}
		ceph_decode_copy(p, &map->pg_pool[i].v,
				 sizeof(map->pg_pool->v));
		calc_pg_masks(&map->pg_pool[i]);
@@ -552,6 +562,11 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end,
	struct rb_node *rbp;

	ceph_decode_16_safe(p, end, version, bad);
	if (version > CEPH_OSDMAP_INC_VERSION) {
		pr_warning("got unknown v %d > %d of inc osdmap\n", version,
			   CEPH_OSDMAP_INC_VERSION);
		goto bad;
	}

	ceph_decode_need(p, end, sizeof(fsid)+sizeof(modified)+2*sizeof(u32),
			 bad);
@@ -624,6 +639,11 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end,
		}
		ceph_decode_need(p, end, 1 + sizeof(map->pg_pool->v), bad);
		ev = ceph_decode_8(p);  /* encoding version */
		if (ev > CEPH_PG_POOL_VERSION) {
			pr_warning("got unknown v %d > %d of ceph_pg_pool\n",
				   ev, CEPH_PG_POOL_VERSION);
			goto bad;
		}
		ceph_decode_copy(p, &map->pg_pool[pool].v,
				 sizeof(map->pg_pool->v));
		calc_pg_masks(&map->pg_pool[pool]);
+8 −0
Original line number Diff line number Diff line
@@ -8,6 +8,12 @@

#include "msgr.h"

/*
 * osdmap encoding versions
 */
#define CEPH_OSDMAP_INC_VERSION 3
#define CEPH_OSDMAP_VERSION     3

/*
 * fs id
 */
@@ -80,6 +86,7 @@ struct ceph_pg {
 */
#define CEPH_PG_TYPE_REP     1
#define CEPH_PG_TYPE_RAID4   2
#define CEPH_PG_POOL_VERSION 2
struct ceph_pg_pool {
	__u8 type;                /* CEPH_PG_TYPE_* */
	__u8 size;                /* number of osds in each pg */
@@ -92,6 +99,7 @@ struct ceph_pg_pool {
	__le32 snap_epoch;        /* epoch of last snap */
	__le32 num_snaps;
	__le32 num_removed_snap_intervals;
	__le64 uid;
} __attribute__ ((packed));

/*