diff options
Diffstat (limited to 'fs/ceph/mdsmap.c')
-rw-r--r-- | fs/ceph/mdsmap.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/fs/ceph/mdsmap.c b/fs/ceph/mdsmap.c index 73b7d44e8a35..0d3c9240c61b 100644 --- a/fs/ceph/mdsmap.c +++ b/fs/ceph/mdsmap.c | |||
@@ -59,6 +59,10 @@ struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end) | |||
59 | return ERR_PTR(-ENOMEM); | 59 | return ERR_PTR(-ENOMEM); |
60 | 60 | ||
61 | ceph_decode_16_safe(p, end, version, bad); | 61 | ceph_decode_16_safe(p, end, version, bad); |
62 | if (version > 3) { | ||
63 | pr_warning("got mdsmap version %d > 3, failing", version); | ||
64 | goto bad; | ||
65 | } | ||
62 | 66 | ||
63 | ceph_decode_need(p, end, 8*sizeof(u32) + sizeof(u64), bad); | 67 | ceph_decode_need(p, end, 8*sizeof(u32) + sizeof(u64), bad); |
64 | m->m_epoch = ceph_decode_32(p); | 68 | m->m_epoch = ceph_decode_32(p); |
@@ -144,13 +148,13 @@ struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end) | |||
144 | /* pg_pools */ | 148 | /* pg_pools */ |
145 | ceph_decode_32_safe(p, end, n, bad); | 149 | ceph_decode_32_safe(p, end, n, bad); |
146 | m->m_num_data_pg_pools = n; | 150 | m->m_num_data_pg_pools = n; |
147 | m->m_data_pg_pools = kcalloc(n, sizeof(u32), GFP_NOFS); | 151 | m->m_data_pg_pools = kcalloc(n, sizeof(u64), GFP_NOFS); |
148 | if (!m->m_data_pg_pools) | 152 | if (!m->m_data_pg_pools) |
149 | goto badmem; | 153 | goto badmem; |
150 | ceph_decode_need(p, end, sizeof(u32)*(n+1), bad); | 154 | ceph_decode_need(p, end, sizeof(u64)*(n+1), bad); |
151 | for (i = 0; i < n; i++) | 155 | for (i = 0; i < n; i++) |
152 | m->m_data_pg_pools[i] = ceph_decode_32(p); | 156 | m->m_data_pg_pools[i] = ceph_decode_64(p); |
153 | m->m_cas_pg_pool = ceph_decode_32(p); | 157 | m->m_cas_pg_pool = ceph_decode_64(p); |
154 | 158 | ||
155 | /* ok, we don't care about the rest. */ | 159 | /* ok, we don't care about the rest. */ |
156 | dout("mdsmap_decode success epoch %u\n", m->m_epoch); | 160 | dout("mdsmap_decode success epoch %u\n", m->m_epoch); |