diff options
author | Sage Weil <sage@newdream.net> | 2010-02-23 14:02:44 -0800 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2010-02-23 14:26:36 -0800 |
commit | a1ea787c7b6ec036d169d84e08cca7b6e399ba70 (patch) | |
tree | 99eeb4be56e747593d6da388a8b92530f0188768 /fs | |
parent | 2600d2dd5085ab6fb09540226138a60055abf335 (diff) | |
download | op-kernel-dev-a1ea787c7b6ec036d169d84e08cca7b6e399ba70.zip op-kernel-dev-a1ea787c7b6ec036d169d84e08cca7b6e399ba70.tar.gz |
ceph: fix client_request_forward decoding
The tid is in the message header, not body. Broken since 6df058c0.
No need to look at next mds session; just mark the request and be done.
(The old error path was broken too, but now it's gone.)
Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ceph/mds_client.c | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c index 4d00ea2..bec8a7a 100644 --- a/fs/ceph/mds_client.c +++ b/fs/ceph/mds_client.c @@ -1896,17 +1896,15 @@ static void handle_forward(struct ceph_mds_client *mdsc, struct ceph_msg *msg) { struct ceph_mds_request *req; - u64 tid; + u64 tid = le64_to_cpu(msg->hdr.tid); u32 next_mds; u32 fwd_seq; u8 must_resend; int err = -EINVAL; void *p = msg->front.iov_base; void *end = p + msg->front.iov_len; - int state; - ceph_decode_need(&p, end, sizeof(u64)+2*sizeof(u32), bad); - tid = ceph_decode_64(&p); + ceph_decode_need(&p, end, 2*sizeof(u32), bad); next_mds = ceph_decode_32(&p); fwd_seq = ceph_decode_32(&p); must_resend = ceph_decode_8(&p); @@ -1920,10 +1918,6 @@ static void handle_forward(struct ceph_mds_client *mdsc, goto out; /* dup reply? */ } - if (next_mds >= mdsc->max_sessions) - goto out; - - state = mdsc->sessions[next_mds]->s_state; if (fwd_seq <= req->r_num_fwd) { dout("forward %llu to mds%d - old seq %d <= %d\n", tid, next_mds, req->r_num_fwd, fwd_seq); |