diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-19 19:11:28 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-19 19:11:28 -0400 |
commit | 85efc72a0218335324d358ac479a04c16316fd4d (patch) | |
tree | d3299ad27ca32e7aa73e4850c8ac58aae7c97434 | |
parent | 3e4b9459fb0e149c6b74c9e89399a8fc39a92b44 (diff) | |
parent | 6a3ca4f18873f950895cb64ddefafb51a732e3f7 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client
Pull last minute Ceph fixes from Sage Weil:
"The important one fixes a bug in the socket failure handling behavior
that was turned up in some recent failure injection testing. The
other two are minor bug fixes."
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:
rbd: endian bug in rbd_req_cb()
rbd: Fix ceph_snap_context size calculation
libceph: fix messenger retry
-rw-r--r-- | drivers/block/rbd.c | 4 | ||||
-rw-r--r-- | include/linux/ceph/messenger.h | 12 | ||||
-rw-r--r-- | net/ceph/messenger.c | 12 |
3 files changed, 10 insertions, 18 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index 65665c9c42c6..8f428a8ab003 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c | |||
@@ -499,7 +499,7 @@ static int rbd_header_from_disk(struct rbd_image_header *header, | |||
499 | / sizeof (*ondisk)) | 499 | / sizeof (*ondisk)) |
500 | return -EINVAL; | 500 | return -EINVAL; |
501 | header->snapc = kmalloc(sizeof(struct ceph_snap_context) + | 501 | header->snapc = kmalloc(sizeof(struct ceph_snap_context) + |
502 | snap_count * sizeof (*ondisk), | 502 | snap_count * sizeof(u64), |
503 | gfp_flags); | 503 | gfp_flags); |
504 | if (!header->snapc) | 504 | if (!header->snapc) |
505 | return -ENOMEM; | 505 | return -ENOMEM; |
@@ -977,7 +977,7 @@ static void rbd_req_cb(struct ceph_osd_request *req, struct ceph_msg *msg) | |||
977 | op = (void *)(replyhead + 1); | 977 | op = (void *)(replyhead + 1); |
978 | rc = le32_to_cpu(replyhead->result); | 978 | rc = le32_to_cpu(replyhead->result); |
979 | bytes = le64_to_cpu(op->extent.length); | 979 | bytes = le64_to_cpu(op->extent.length); |
980 | read_op = (le32_to_cpu(op->op) == CEPH_OSD_OP_READ); | 980 | read_op = (le16_to_cpu(op->op) == CEPH_OSD_OP_READ); |
981 | 981 | ||
982 | dout("rbd_req_cb bytes=%lld readop=%d rc=%d\n", bytes, read_op, rc); | 982 | dout("rbd_req_cb bytes=%lld readop=%d rc=%d\n", bytes, read_op, rc); |
983 | 983 | ||
diff --git a/include/linux/ceph/messenger.h b/include/linux/ceph/messenger.h index 2521a95fa6d9..44c87e731e9d 100644 --- a/include/linux/ceph/messenger.h +++ b/include/linux/ceph/messenger.h | |||
@@ -163,16 +163,8 @@ struct ceph_connection { | |||
163 | 163 | ||
164 | /* connection negotiation temps */ | 164 | /* connection negotiation temps */ |
165 | char in_banner[CEPH_BANNER_MAX_LEN]; | 165 | char in_banner[CEPH_BANNER_MAX_LEN]; |
166 | union { | 166 | struct ceph_msg_connect out_connect; |
167 | struct { /* outgoing connection */ | 167 | struct ceph_msg_connect_reply in_reply; |
168 | struct ceph_msg_connect out_connect; | ||
169 | struct ceph_msg_connect_reply in_reply; | ||
170 | }; | ||
171 | struct { /* incoming */ | ||
172 | struct ceph_msg_connect in_connect; | ||
173 | struct ceph_msg_connect_reply out_reply; | ||
174 | }; | ||
175 | }; | ||
176 | struct ceph_entity_addr actual_peer_addr; | 168 | struct ceph_entity_addr actual_peer_addr; |
177 | 169 | ||
178 | /* message out temps */ | 170 | /* message out temps */ |
diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c index b332c3d76059..10255e81be79 100644 --- a/net/ceph/messenger.c +++ b/net/ceph/messenger.c | |||
@@ -1423,7 +1423,7 @@ static int process_connect(struct ceph_connection *con) | |||
1423 | * dropped messages. | 1423 | * dropped messages. |
1424 | */ | 1424 | */ |
1425 | dout("process_connect got RESET peer seq %u\n", | 1425 | dout("process_connect got RESET peer seq %u\n", |
1426 | le32_to_cpu(con->in_connect.connect_seq)); | 1426 | le32_to_cpu(con->in_reply.connect_seq)); |
1427 | pr_err("%s%lld %s connection reset\n", | 1427 | pr_err("%s%lld %s connection reset\n", |
1428 | ENTITY_NAME(con->peer_name), | 1428 | ENTITY_NAME(con->peer_name), |
1429 | ceph_pr_addr(&con->peer_addr.in_addr)); | 1429 | ceph_pr_addr(&con->peer_addr.in_addr)); |
@@ -1450,10 +1450,10 @@ static int process_connect(struct ceph_connection *con) | |||
1450 | * If we sent a smaller connect_seq than the peer has, try | 1450 | * If we sent a smaller connect_seq than the peer has, try |
1451 | * again with a larger value. | 1451 | * again with a larger value. |
1452 | */ | 1452 | */ |
1453 | dout("process_connect got RETRY my seq = %u, peer_seq = %u\n", | 1453 | dout("process_connect got RETRY_SESSION my seq %u, peer %u\n", |
1454 | le32_to_cpu(con->out_connect.connect_seq), | 1454 | le32_to_cpu(con->out_connect.connect_seq), |
1455 | le32_to_cpu(con->in_connect.connect_seq)); | 1455 | le32_to_cpu(con->in_reply.connect_seq)); |
1456 | con->connect_seq = le32_to_cpu(con->in_connect.connect_seq); | 1456 | con->connect_seq = le32_to_cpu(con->in_reply.connect_seq); |
1457 | ceph_con_out_kvec_reset(con); | 1457 | ceph_con_out_kvec_reset(con); |
1458 | ret = prepare_write_connect(con); | 1458 | ret = prepare_write_connect(con); |
1459 | if (ret < 0) | 1459 | if (ret < 0) |
@@ -1468,9 +1468,9 @@ static int process_connect(struct ceph_connection *con) | |||
1468 | */ | 1468 | */ |
1469 | dout("process_connect got RETRY_GLOBAL my %u peer_gseq %u\n", | 1469 | dout("process_connect got RETRY_GLOBAL my %u peer_gseq %u\n", |
1470 | con->peer_global_seq, | 1470 | con->peer_global_seq, |
1471 | le32_to_cpu(con->in_connect.global_seq)); | 1471 | le32_to_cpu(con->in_reply.global_seq)); |
1472 | get_global_seq(con->msgr, | 1472 | get_global_seq(con->msgr, |
1473 | le32_to_cpu(con->in_connect.global_seq)); | 1473 | le32_to_cpu(con->in_reply.global_seq)); |
1474 | ceph_con_out_kvec_reset(con); | 1474 | ceph_con_out_kvec_reset(con); |
1475 | ret = prepare_write_connect(con); | 1475 | ret = prepare_write_connect(con); |
1476 | if (ret < 0) | 1476 | if (ret < 0) |