From 5ffff11f1795f21a7fa923aa7534ad1d9f787004 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 21 Nov 2008 09:49:18 -0800 Subject: [PATCH] crush: introduce crush magic This is a disk format change. --- src/crush/CrushWrapper.h | 9 +++++++++ src/crush/crush.h | 3 +++ src/kernel/osdmap.c | 9 ++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/crush/CrushWrapper.h b/src/crush/CrushWrapper.h index 27ae7a60e30bc..d8aeffd67b5c3 100644 --- a/src/crush/CrushWrapper.h +++ b/src/crush/CrushWrapper.h @@ -352,6 +352,10 @@ public: void encode(bufferlist &bl, bool lean=false) { if (!crush) create(); // duh. + + __u32 magic = CRUSH_MAGIC; + ::encode(magic, bl); + ::encode(crush->max_buckets, bl); ::encode(crush->max_rules, bl); ::encode(crush->max_devices, bl); @@ -419,6 +423,11 @@ public: void decode(bufferlist::iterator &blp) { create(); + + __u32 magic; + ::decode(magic, blp); + assert(magic == CRUSH_MAGIC); + ::decode(crush->max_buckets, blp); ::decode(crush->max_rules, blp); ::decode(crush->max_devices, blp); diff --git a/src/crush/crush.h b/src/crush/crush.h index f7aab5ecf312d..e25976b17f609 100644 --- a/src/crush/crush.h +++ b/src/crush/crush.h @@ -17,6 +17,9 @@ */ +#define CRUSH_MAGIC 0x00010000ul + + #define CRUSH_MAX_DEPTH 10 #define CRUSH_MAX_SET 10 diff --git a/src/kernel/osdmap.c b/src/kernel/osdmap.c index e61f4ce28f470..eae740633b55a 100644 --- a/src/kernel/osdmap.c +++ b/src/kernel/osdmap.c @@ -118,6 +118,7 @@ static struct crush_map *crush_decode(void *pbyval, void *end) int i, j; void **p = &pbyval; void *start = pbyval; + u32 magic; dout(30, "crush_decode %p to %p len %d\n", *p, end, (int)(end - *p)); @@ -125,7 +126,13 @@ static struct crush_map *crush_decode(void *pbyval, void *end) if (c == NULL) return ERR_PTR(-ENOMEM); - ceph_decode_need(p, end, 3*sizeof(u32), bad); + ceph_decode_need(p, end, 4*sizeof(u32), bad); + ceph_decode_32(p, magic); + if (magic != CRUSH_MAGIC) { + derr(0, "crush_decode magic %x != current %x\n", + (unsigned)magic, (unsigned)CRUSH_MAGIC); + goto bad; + } ceph_decode_32(p, c->max_buckets); ceph_decode_32(p, c->max_rules); ceph_decode_32(p, c->max_devices); -- 2.39.5