aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ceph/mds_client.c
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2009-12-22 14:24:33 -0500
committerSage Weil <sage@newdream.net>2009-12-23 11:17:22 -0500
commit6df058c025ce343052c5516b1d8a9a7e73cddd64 (patch)
tree58230bd258f71c2c3adf56a55d11ed39f404d12a /fs/ceph/mds_client.c
parent0cf90ab5b075821940873e73cdbfeb8edc3dabe8 (diff)
ceph: include transaction id in ceph_msg_header (protocol change)
Many (most?) message types include a transaction id. By including it in the fixed size header, we always have it available even when we are unable to allocate memory for the (larger, variable sized) message body. This will allow us to error out the appropriate request instead of (silently) dropping the reply. Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs/ceph/mds_client.c')
-rw-r--r--fs/ceph/mds_client.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
index 63ca3b1ad45f..ec884e2845db 100644
--- a/fs/ceph/mds_client.c
+++ b/fs/ceph/mds_client.c
@@ -1339,6 +1339,8 @@ static struct ceph_msg *create_request_message(struct ceph_mds_client *mdsc,
1339 if (IS_ERR(msg)) 1339 if (IS_ERR(msg))
1340 goto out_free2; 1340 goto out_free2;
1341 1341
1342 msg->hdr.tid = cpu_to_le64(req->r_tid);
1343
1342 head = msg->front.iov_base; 1344 head = msg->front.iov_base;
1343 p = msg->front.iov_base + sizeof(*head); 1345 p = msg->front.iov_base + sizeof(*head);
1344 end = msg->front.iov_base + msg->front.iov_len; 1346 end = msg->front.iov_base + msg->front.iov_len;
@@ -1431,7 +1433,6 @@ static int __prepare_send_request(struct ceph_mds_client *mdsc,
1431 req->r_request = msg; 1433 req->r_request = msg;
1432 1434
1433 rhead = msg->front.iov_base; 1435 rhead = msg->front.iov_base;
1434 rhead->tid = cpu_to_le64(req->r_tid);
1435 rhead->oldest_client_tid = cpu_to_le64(__get_oldest_tid(mdsc)); 1436 rhead->oldest_client_tid = cpu_to_le64(__get_oldest_tid(mdsc));
1436 if (req->r_got_unsafe) 1437 if (req->r_got_unsafe)
1437 flags |= CEPH_MDS_FLAG_REPLAY; 1438 flags |= CEPH_MDS_FLAG_REPLAY;
@@ -1664,7 +1665,7 @@ static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg)
1664 } 1665 }
1665 1666
1666 /* get request, session */ 1667 /* get request, session */
1667 tid = le64_to_cpu(head->tid); 1668 tid = le64_to_cpu(msg->hdr.tid);
1668 mutex_lock(&mdsc->mutex); 1669 mutex_lock(&mdsc->mutex);
1669 req = __lookup_request(mdsc, tid); 1670 req = __lookup_request(mdsc, tid);
1670 if (!req) { 1671 if (!req) {