ceph: precede encoded ceph_pg_pool struct with version

Signed-off-by: Sage Weil <sage@newdream.net>
diff --git a/fs/ceph/ceph_fs.h b/fs/ceph/ceph_fs.h
index d8923fe..f3bfc3c 100644
--- a/fs/ceph/ceph_fs.h
+++ b/fs/ceph/ceph_fs.h
@@ -38,7 +38,7 @@
 #define CEPH_OSD_PROTOCOL     8 /* cluster internal */
 #define CEPH_MDS_PROTOCOL     9 /* cluster internal */
 #define CEPH_MON_PROTOCOL     5 /* cluster internal */
-#define CEPH_OSDC_PROTOCOL   22 /* server/client */
+#define CEPH_OSDC_PROTOCOL   23 /* server/client */
 #define CEPH_MDSC_PROTOCOL   32 /* server/client */
 #define CEPH_MONC_PROTOCOL   15 /* server/client */
 
diff --git a/fs/ceph/osdmap.c b/fs/ceph/osdmap.c
index 0dbd606..a143c51 100644
--- a/fs/ceph/osdmap.c
+++ b/fs/ceph/osdmap.c
@@ -414,6 +414,7 @@
 	struct ceph_osdmap *map;
 	u16 version;
 	u32 len, max, i;
+	u8 ev;
 	int err = -EINVAL;
 	void *start = *p;
 
@@ -441,10 +442,11 @@
 	}
 	ceph_decode_32_safe(p, end, max, bad);
 	while (max--) {
-		ceph_decode_need(p, end, 4+sizeof(map->pg_pool->v), bad);
+		ceph_decode_need(p, end, 4+1+sizeof(map->pg_pool->v), bad);
 		i = ceph_decode_32(p);
 		if (i >= map->num_pools)
 			goto bad;
+		ev = ceph_decode_8(p); /* encoding version */
 		ceph_decode_copy(p, &map->pg_pool[i].v,
 				 sizeof(map->pg_pool->v));
 		calc_pg_masks(&map->pg_pool[i]);
@@ -603,6 +605,8 @@
 	/* new_pool */
 	ceph_decode_32_safe(p, end, len, bad);
 	while (len--) {
+		__u8 ev;
+
 		ceph_decode_32_safe(p, end, pool, bad);
 		if (pool >= map->num_pools) {
 			void *pg_pool = kcalloc(pool + 1,
@@ -618,6 +622,8 @@
 			map->pg_pool = pg_pool;
 			map->num_pools = pool+1;
 		}
+		ceph_decode_need(p, end, 1 + sizeof(map->pg_pool->v), bad);
+		ev = ceph_decode_8(p);  /* encoding version */
 		ceph_decode_copy(p, &map->pg_pool[pool].v,
 				 sizeof(map->pg_pool->v));
 		calc_pg_masks(&map->pg_pool[pool]);