aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-07-19 19:11:28 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-07-19 19:11:28 -0400
commit85efc72a0218335324d358ac479a04c16316fd4d (patch)
treed3299ad27ca32e7aa73e4850c8ac58aae7c97434
parent3e4b9459fb0e149c6b74c9e89399a8fc39a92b44 (diff)
parent6a3ca4f18873f950895cb64ddefafb51a732e3f7 (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.c4
-rw-r--r--include/linux/ceph/messenger.h12
-rw-r--r--net/ceph/messenger.c12
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)