From mboxrd@z Thu Jan 1 00:00:00 1970 From: Benny Halevy Subject: [RFC 02/39] nfs41: Skip past the RPC call direction Date: Fri, 1 May 2009 02:19:09 +0300 Message-ID: <1241133549-348-1-git-send-email-bhalevy@panasas.com> References: <49FA3180.5030404@panasas.com> Cc: Ricardo Labiaga , pnfs@linux-nfs.org, linux-nfs@vger.kernel.org, Benny Halevy To: Trond Myklebust Return-path: Received: from gw-ca.panasas.com ([209.116.51.66]:25919 "EHLO laguna.int.panasas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752910AbZD3XTU (ORCPT ); Thu, 30 Apr 2009 19:19:20 -0400 In-Reply-To: <49FA3180.5030404@panasas.com> Sender: linux-nfs-owner@vger.kernel.org List-ID: From: Ricardo Labiaga xs_tcp_read_calldir() is now responsible for reading the RPC call direction and determining whether it is a reply or a callback request. The call to xdr_skb_read_bits() inside xs_tcp_read_calldir() moves the xdr_skb_reader offset past the RPC call direction (offset should be equal to 8). Therefore xs_tcp_read_common() called from xs_tcp_ready_reply() should be copying the TCP buffer starting past the RPC call direction. It is now necessary to read the RPC call direction earlier to determine whether to call the reply handler or the callback handler. call_verify() should therefore skip past the XID and call/reply flag. Signed-off-by: Ricardo Labiaga Signed-off-by: Benny Halevy --- net/sunrpc/clnt.c | 13 +++++++------ 1 files changed, 7 insertions(+), 6 deletions(-) diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index d00e813..76d7d46 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c @@ -1390,13 +1390,14 @@ rpc_verify_header(struct rpc_task *task) } if ((len -= 3) < 0) goto out_overflow; - p += 1; /* skip XID */ - if ((n = ntohl(*p++)) != RPC_REPLY) { - dprintk("RPC: %5u %s: not an RPC reply: %x\n", - task->tk_pid, __func__, n); - goto out_garbage; - } + /* + * Skip the XID and call direction. + * The underlying transport has read the XID and RPC call direction + * to determine this is an RPC reply. + */ + p += 2; + if ((n = ntohl(*p++)) != RPC_MSG_ACCEPTED) { if (--len < 0) goto out_overflow; -- 1.6.2.1