提交 361be860 编写于 作者: S Sage Weil

ceph: precede encoded ceph_pg_pool struct with version

Signed-off-by: NSage Weil <sage@newdream.net>
上级 0d59ab81
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
#define CEPH_OSD_PROTOCOL 8 /* cluster internal */ #define CEPH_OSD_PROTOCOL 8 /* cluster internal */
#define CEPH_MDS_PROTOCOL 9 /* cluster internal */ #define CEPH_MDS_PROTOCOL 9 /* cluster internal */
#define CEPH_MON_PROTOCOL 5 /* 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_MDSC_PROTOCOL 32 /* server/client */
#define CEPH_MONC_PROTOCOL 15 /* server/client */ #define CEPH_MONC_PROTOCOL 15 /* server/client */
......
...@@ -414,6 +414,7 @@ struct ceph_osdmap *osdmap_decode(void **p, void *end) ...@@ -414,6 +414,7 @@ struct ceph_osdmap *osdmap_decode(void **p, void *end)
struct ceph_osdmap *map; struct ceph_osdmap *map;
u16 version; u16 version;
u32 len, max, i; u32 len, max, i;
u8 ev;
int err = -EINVAL; int err = -EINVAL;
void *start = *p; void *start = *p;
...@@ -441,10 +442,11 @@ struct ceph_osdmap *osdmap_decode(void **p, void *end) ...@@ -441,10 +442,11 @@ struct ceph_osdmap *osdmap_decode(void **p, void *end)
} }
ceph_decode_32_safe(p, end, max, bad); ceph_decode_32_safe(p, end, max, bad);
while (max--) { 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); i = ceph_decode_32(p);
if (i >= map->num_pools) if (i >= map->num_pools)
goto bad; goto bad;
ev = ceph_decode_8(p); /* encoding version */
ceph_decode_copy(p, &map->pg_pool[i].v, ceph_decode_copy(p, &map->pg_pool[i].v,
sizeof(map->pg_pool->v)); sizeof(map->pg_pool->v));
calc_pg_masks(&map->pg_pool[i]); calc_pg_masks(&map->pg_pool[i]);
...@@ -603,6 +605,8 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end, ...@@ -603,6 +605,8 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end,
/* new_pool */ /* new_pool */
ceph_decode_32_safe(p, end, len, bad); ceph_decode_32_safe(p, end, len, bad);
while (len--) { while (len--) {
__u8 ev;
ceph_decode_32_safe(p, end, pool, bad); ceph_decode_32_safe(p, end, pool, bad);
if (pool >= map->num_pools) { if (pool >= map->num_pools) {
void *pg_pool = kcalloc(pool + 1, void *pg_pool = kcalloc(pool + 1,
...@@ -618,6 +622,8 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end, ...@@ -618,6 +622,8 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end,
map->pg_pool = pg_pool; map->pg_pool = pg_pool;
map->num_pools = pool+1; 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, ceph_decode_copy(p, &map->pg_pool[pool].v,
sizeof(map->pg_pool->v)); sizeof(map->pg_pool->v));
calc_pg_masks(&map->pg_pool[pool]); calc_pg_masks(&map->pg_pool[pool]);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册