diff options
author | Sage Weil <sage@newdream.net> | 2009-12-22 14:24:33 -0500 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2009-12-23 11:17:22 -0500 |
commit | 6df058c025ce343052c5516b1d8a9a7e73cddd64 (patch) | |
tree | 58230bd258f71c2c3adf56a55d11ed39f404d12a /fs/ceph/mds_client.c | |
parent | 0cf90ab5b075821940873e73cdbfeb8edc3dabe8 (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.c | 5 |
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) { |