Commit 9ec7cab1 authored by Sage Weil's avatar Sage Weil

ceph: hex dump corrupt server data to KERN_DEBUG

Also, print fsid using standard format, NOT hex dump.
Signed-off-by: default avatarSage Weil <sage@newdream.net>
parent 93c20d98
...@@ -2681,6 +2681,7 @@ done: ...@@ -2681,6 +2681,7 @@ done:
bad: bad:
pr_err("ceph_handle_caps: corrupt message\n"); pr_err("ceph_handle_caps: corrupt message\n");
ceph_msg_dump(msg);
return; return;
} }
......
...@@ -1650,6 +1650,7 @@ static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg) ...@@ -1650,6 +1650,7 @@ static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg)
return; return;
if (msg->front.iov_len < sizeof(*head)) { if (msg->front.iov_len < sizeof(*head)) {
pr_err("mdsc_handle_reply got corrupt (short) reply\n"); pr_err("mdsc_handle_reply got corrupt (short) reply\n");
ceph_msg_dump(msg);
return; return;
} }
...@@ -1740,6 +1741,7 @@ static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg) ...@@ -1740,6 +1741,7 @@ static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg)
mutex_lock(&session->s_mutex); mutex_lock(&session->s_mutex);
if (err < 0) { if (err < 0) {
pr_err("mdsc_handle_reply got corrupt reply mds%d\n", mds); pr_err("mdsc_handle_reply got corrupt reply mds%d\n", mds);
ceph_msg_dump(msg);
goto out_err; goto out_err;
} }
...@@ -1929,6 +1931,7 @@ static void handle_session(struct ceph_mds_session *session, ...@@ -1929,6 +1931,7 @@ static void handle_session(struct ceph_mds_session *session,
bad: bad:
pr_err("mdsc_handle_session corrupt message mds%d len %d\n", mds, pr_err("mdsc_handle_session corrupt message mds%d len %d\n", mds,
(int)msg->front.iov_len); (int)msg->front.iov_len);
ceph_msg_dump(msg);
return; return;
} }
...@@ -2394,6 +2397,7 @@ out: ...@@ -2394,6 +2397,7 @@ out:
bad: bad:
pr_err("corrupt lease message\n"); pr_err("corrupt lease message\n");
ceph_msg_dump(msg);
} }
void ceph_mdsc_lease_send_msg(struct ceph_mds_session *session, void ceph_mdsc_lease_send_msg(struct ceph_mds_session *session,
......
...@@ -49,6 +49,7 @@ int ceph_mdsmap_get_random_mds(struct ceph_mdsmap *m) ...@@ -49,6 +49,7 @@ int ceph_mdsmap_get_random_mds(struct ceph_mdsmap *m)
struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end) struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end)
{ {
struct ceph_mdsmap *m; struct ceph_mdsmap *m;
const void *start = *p;
int i, j, n; int i, j, n;
int err = -EINVAL; int err = -EINVAL;
u16 version; u16 version;
...@@ -154,6 +155,9 @@ badmem: ...@@ -154,6 +155,9 @@ badmem:
err = -ENOMEM; err = -ENOMEM;
bad: bad:
pr_err("corrupt mdsmap\n"); pr_err("corrupt mdsmap\n");
print_hex_dump(KERN_DEBUG, "mdsmap: ",
DUMP_PREFIX_OFFSET, 16, 1,
start, end - start, true);
ceph_mdsmap_destroy(m); ceph_mdsmap_destroy(m);
return ERR_PTR(-EINVAL); return ERR_PTR(-EINVAL);
} }
......
...@@ -2115,3 +2115,23 @@ void ceph_msg_last_put(struct kref *kref) ...@@ -2115,3 +2115,23 @@ void ceph_msg_last_put(struct kref *kref)
else else
ceph_msg_kfree(m); ceph_msg_kfree(m);
} }
void ceph_msg_dump(struct ceph_msg *msg)
{
pr_debug("msg_dump %p (front_max %d nr_pages %d)\n", msg,
msg->front_max, msg->nr_pages);
print_hex_dump(KERN_DEBUG, "header: ",
DUMP_PREFIX_OFFSET, 16, 1,
&msg->hdr, sizeof(msg->hdr), true);
print_hex_dump(KERN_DEBUG, " front: ",
DUMP_PREFIX_OFFSET, 16, 1,
msg->front.iov_base, msg->front.iov_len, true);
if (msg->middle)
print_hex_dump(KERN_DEBUG, "middle: ",
DUMP_PREFIX_OFFSET, 16, 1,
msg->middle->vec.iov_base,
msg->middle->vec.iov_len, true);
print_hex_dump(KERN_DEBUG, "footer: ",
DUMP_PREFIX_OFFSET, 16, 1,
&msg->footer, sizeof(msg->footer), true);
}
...@@ -254,4 +254,6 @@ static inline void ceph_msg_put(struct ceph_msg *msg) ...@@ -254,4 +254,6 @@ static inline void ceph_msg_put(struct ceph_msg *msg)
kref_put(&msg->kref, ceph_msg_last_put); kref_put(&msg->kref, ceph_msg_last_put);
} }
extern void ceph_msg_dump(struct ceph_msg *msg);
#endif #endif
...@@ -242,6 +242,7 @@ static void handle_subscribe_ack(struct ceph_mon_client *monc, ...@@ -242,6 +242,7 @@ static void handle_subscribe_ack(struct ceph_mon_client *monc,
return; return;
bad: bad:
pr_err("got corrupt subscribe-ack msg\n"); pr_err("got corrupt subscribe-ack msg\n");
ceph_msg_dump(msg);
} }
/* /*
...@@ -364,6 +365,7 @@ static void handle_statfs_reply(struct ceph_mon_client *monc, ...@@ -364,6 +365,7 @@ static void handle_statfs_reply(struct ceph_mon_client *monc,
bad: bad:
pr_err("corrupt statfs reply, no tid\n"); pr_err("corrupt statfs reply, no tid\n");
ceph_msg_dump(msg);
} }
/* /*
......
...@@ -773,6 +773,7 @@ bad: ...@@ -773,6 +773,7 @@ bad:
pr_err("corrupt osd_op_reply got %d %d expected %d\n", pr_err("corrupt osd_op_reply got %d %d expected %d\n",
(int)msg->front.iov_len, le32_to_cpu(msg->hdr.front_len), (int)msg->front.iov_len, le32_to_cpu(msg->hdr.front_len),
(int)sizeof(*rhead)); (int)sizeof(*rhead));
ceph_msg_dump(msg);
} }
...@@ -964,6 +965,7 @@ done: ...@@ -964,6 +965,7 @@ done:
bad: bad:
pr_err("osdc handle_map corrupt msg\n"); pr_err("osdc handle_map corrupt msg\n");
ceph_msg_dump(msg);
up_write(&osdc->map_sem); up_write(&osdc->map_sem);
return; return;
} }
......
...@@ -726,6 +726,9 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end, ...@@ -726,6 +726,9 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end,
bad: bad:
pr_err("corrupt inc osdmap epoch %d off %d (%p of %p-%p)\n", pr_err("corrupt inc osdmap epoch %d off %d (%p of %p-%p)\n",
epoch, (int)(*p - start), *p, start, end); epoch, (int)(*p - start), *p, start, end);
print_hex_dump(KERN_DEBUG, "osdmap: ",
DUMP_PREFIX_OFFSET, 16, 1,
start, end - start, true);
if (newcrush) if (newcrush)
crush_destroy(newcrush); crush_destroy(newcrush);
return ERR_PTR(err); return ERR_PTR(err);
......
...@@ -877,6 +877,7 @@ split_skip_inode: ...@@ -877,6 +877,7 @@ split_skip_inode:
bad: bad:
pr_err("corrupt snap message from mds%d\n", mds); pr_err("corrupt snap message from mds%d\n", mds);
ceph_msg_dump(msg);
out: out:
if (locked_rwsem) if (locked_rwsem)
up_write(&mdsc->snap_rwsem); up_write(&mdsc->snap_rwsem);
......
...@@ -602,13 +602,8 @@ int ceph_check_fsid(struct ceph_client *client, struct ceph_fsid *fsid) ...@@ -602,13 +602,8 @@ int ceph_check_fsid(struct ceph_client *client, struct ceph_fsid *fsid)
{ {
if (client->have_fsid) { if (client->have_fsid) {
if (ceph_fsid_compare(&client->fsid, fsid)) { if (ceph_fsid_compare(&client->fsid, fsid)) {
print_hex_dump(KERN_ERR, "this fsid: ", pr_err("bad fsid, had " FSID_FORMAT " got " FSID_FORMAT,
DUMP_PREFIX_NONE, 16, 1, PR_FSID(&client->fsid), PR_FSID(fsid));
(void *)fsid, 16, 0);
print_hex_dump(KERN_ERR, " old fsid: ",
DUMP_PREFIX_NONE, 16, 1,
(void *)&client->fsid, 16, 0);
pr_err("fsid mismatch\n");
return -1; return -1;
} }
} else { } else {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment