[pnfs] [PATCH 1/1] nfs41: Skip past the RPC call direction
Benny Halevy
bhalevy at panasas.com
Tue Jul 15 05:33:00 EDT 2008
Applied onto the 2.6.26 based nfs41 branch.
(replaced "[FIXME] nfs41: sunrpc: do not verify calldir in call_verify")
Benny
On Jul. 15, 2008, 7:14 +0300, Ricardo Labiaga <ricardo.labiaga at netapp.com> wrote:
> From: Ricardo Labiaga <Ricardo.Labiaga at netapp.com>
>
> 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 <Ricardo.Labiaga at netapp.com>
> ---
> 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 e9a19a9..087c177 100644
> --- a/net/sunrpc/clnt.c
> +++ b/net/sunrpc/clnt.c
> @@ -1415,13 +1415,14 @@ call_verify(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; */ /* FIXME: needed for nfs41, not sure why... */
> - }
> + /*
> + * 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;
More information about the pNFS
mailing list