Message ID | 1395944299-21970-5-git-send-email-ilya.dryomov@inktank.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 03/27/2014 01:17 PM, Ilya Dryomov wrote: > Dump osdmap in hex on both full and incremental decode errors, to make > it easier to match the contents with error offset. dout() map epoch > and max_osd value on success. Looks good. Reviewed-by: Alex Elder <elder@linaro.org> > > Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com> > --- > net/ceph/osdmap.c | 21 +++++++++++++++------ > 1 file changed, 15 insertions(+), 6 deletions(-) > > diff --git a/net/ceph/osdmap.c b/net/ceph/osdmap.c > index 9d1aaa24def6..4dd000d128fd 100644 > --- a/net/ceph/osdmap.c > +++ b/net/ceph/osdmap.c > @@ -690,6 +690,7 @@ struct ceph_osdmap *osdmap_decode(void **p, void *end) > u16 version; > u32 len, max, i; > int err = -EINVAL; > + u32 epoch = 0; > void *start = *p; > struct ceph_pg_pool_info *pi; > > @@ -714,7 +715,7 @@ struct ceph_osdmap *osdmap_decode(void **p, void *end) > > ceph_decode_need(p, end, 2*sizeof(u64)+6*sizeof(u32), bad); > ceph_decode_copy(p, &map->fsid, sizeof(map->fsid)); > - map->epoch = ceph_decode_32(p); > + epoch = map->epoch = ceph_decode_32(p); > ceph_decode_copy(p, &map->created, sizeof(map->created)); > ceph_decode_copy(p, &map->modified, sizeof(map->modified)); > > @@ -814,14 +815,18 @@ struct ceph_osdmap *osdmap_decode(void **p, void *end) > goto bad; > } > > - /* ignore the rest of the map */ > + /* ignore the rest */ > *p = end; > > - dout("osdmap_decode done %p %p\n", *p, end); > + dout("full osdmap epoch %d max_osd %d\n", map->epoch, map->max_osd); > return map; > > bad: > - dout("osdmap_decode fail err %d\n", err); > + pr_err("corrupt full osdmap (%d) epoch %d off %d (%p of %p-%p)\n", > + err, epoch, (int)(*p - start), *p, start, end); > + print_hex_dump(KERN_DEBUG, "osdmap: ", > + DUMP_PREFIX_OFFSET, 16, 1, > + start, end - start, true); > ceph_osdmap_destroy(map); > return ERR_PTR(err); > } > @@ -845,6 +850,8 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end, > int err = -EINVAL; > u16 version; > > + dout("%s %p to %p len %d\n", __func__, *p, end, (int)(end - *p)); > + > ceph_decode_16_safe(p, end, version, bad); > if (version != 6) { > pr_warning("got unknown v %d != 6 of inc osdmap\n", version); > @@ -1032,11 +1039,13 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end, > > /* ignore the rest */ > *p = end; > + > + dout("inc osdmap epoch %d max_osd %d\n", map->epoch, map->max_osd); > return map; > > bad: > - pr_err("corrupt inc osdmap epoch %d off %d (%p of %p-%p)\n", > - epoch, (int)(*p - start), *p, start, end); > + pr_err("corrupt inc osdmap (%d) epoch %d off %d (%p of %p-%p)\n", > + err, epoch, (int)(*p - start), *p, start, end); > print_hex_dump(KERN_DEBUG, "osdmap: ", > DUMP_PREFIX_OFFSET, 16, 1, > start, end - start, true); > -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/ceph/osdmap.c b/net/ceph/osdmap.c index 9d1aaa24def6..4dd000d128fd 100644 --- a/net/ceph/osdmap.c +++ b/net/ceph/osdmap.c @@ -690,6 +690,7 @@ struct ceph_osdmap *osdmap_decode(void **p, void *end) u16 version; u32 len, max, i; int err = -EINVAL; + u32 epoch = 0; void *start = *p; struct ceph_pg_pool_info *pi; @@ -714,7 +715,7 @@ struct ceph_osdmap *osdmap_decode(void **p, void *end) ceph_decode_need(p, end, 2*sizeof(u64)+6*sizeof(u32), bad); ceph_decode_copy(p, &map->fsid, sizeof(map->fsid)); - map->epoch = ceph_decode_32(p); + epoch = map->epoch = ceph_decode_32(p); ceph_decode_copy(p, &map->created, sizeof(map->created)); ceph_decode_copy(p, &map->modified, sizeof(map->modified)); @@ -814,14 +815,18 @@ struct ceph_osdmap *osdmap_decode(void **p, void *end) goto bad; } - /* ignore the rest of the map */ + /* ignore the rest */ *p = end; - dout("osdmap_decode done %p %p\n", *p, end); + dout("full osdmap epoch %d max_osd %d\n", map->epoch, map->max_osd); return map; bad: - dout("osdmap_decode fail err %d\n", err); + pr_err("corrupt full osdmap (%d) epoch %d off %d (%p of %p-%p)\n", + err, epoch, (int)(*p - start), *p, start, end); + print_hex_dump(KERN_DEBUG, "osdmap: ", + DUMP_PREFIX_OFFSET, 16, 1, + start, end - start, true); ceph_osdmap_destroy(map); return ERR_PTR(err); } @@ -845,6 +850,8 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end, int err = -EINVAL; u16 version; + dout("%s %p to %p len %d\n", __func__, *p, end, (int)(end - *p)); + ceph_decode_16_safe(p, end, version, bad); if (version != 6) { pr_warning("got unknown v %d != 6 of inc osdmap\n", version); @@ -1032,11 +1039,13 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end, /* ignore the rest */ *p = end; + + dout("inc osdmap epoch %d max_osd %d\n", map->epoch, map->max_osd); return map; bad: - pr_err("corrupt inc osdmap epoch %d off %d (%p of %p-%p)\n", - epoch, (int)(*p - start), *p, start, end); + pr_err("corrupt inc osdmap (%d) epoch %d off %d (%p of %p-%p)\n", + err, epoch, (int)(*p - start), *p, start, end); print_hex_dump(KERN_DEBUG, "osdmap: ", DUMP_PREFIX_OFFSET, 16, 1, start, end - start, true);
Dump osdmap in hex on both full and incremental decode errors, to make it easier to match the contents with error offset. dout() map epoch and max_osd value on success. Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com> --- net/ceph/osdmap.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-)