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@xxxxxxxxxx> > > Signed-off-by: Ilya Dryomov <ilya.dryomov@xxxxxxxxxxx> > --- > 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@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html