u16 version;
        u32 len, max, i;
        int err = -EINVAL;
+       u32 epoch = 0;
        void *start = *p;
        struct ceph_pg_pool_info *pi;
 
 
        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));
 
                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);
 }
        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);
 
        /* 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);