From: "J. Bruce Fields" <bfields@fieldses.org>
To: Dan Carpenter <dan.carpenter@oracle.com>
Cc: Trond Myklebust <Trond.Myklebust@netapp.com>,
"David S. Miller" <davem@davemloft.net>,
linux-nfs@vger.kernel.org, netdev@vger.kernel.org,
kernel-janitors@vger.kernel.org,
Tom Tucker <tom@opengridcomputing.com>
Subject: Re: [patch] svcrdma: endian bug in send_write_chunks()
Date: Thu, 12 Jan 2012 16:21:41 +0000 [thread overview]
Message-ID: <20120112162141.GC6563@fieldses.org> (raw)
In-Reply-To: <20120112064722.GB2408@elgon.mountain>
On Thu, Jan 12, 2012 at 09:47:22AM +0300, Dan Carpenter wrote:
> Sparse complains because arg_ch->rs_length is declared as network
> endian but we're treating it as CPU endian.
This looks like it would actually change behavior on a little endian
architecture, so how did this work before?
From some quick grepping, I see assignments both of the form
...rs_length = ntohl(...)
and
...rs_length = htonl(...)
but only see one declaration for a field named rs_length.
So my best guess would be that the code is ugly but working as is, and
needs cleanup by someone who knows how this field was intended to be
used.
?
--b.
>
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
>
> diff --git a/net/sunrpc/xprtrdma/svc_rdma_sendto.c b/net/sunrpc/xprtrdma/svc_rdma_sendto.c
> index 249a835..30fda86 100644
> --- a/net/sunrpc/xprtrdma/svc_rdma_sendto.c
> +++ b/net/sunrpc/xprtrdma/svc_rdma_sendto.c
> @@ -409,7 +409,7 @@ static int send_write_chunks(struct svcxprt_rdma *xprt,
> u64 rs_offset;
>
> arg_ch = &arg_ary->wc_array[chunk_no].wc_target;
> - write_len = min(xfer_len, arg_ch->rs_length);
> + write_len = min(xfer_len, ntohl(arg_ch->rs_length));
>
> /* Prepare the response chunk given the length actually
> * written */
> @@ -481,7 +481,7 @@ static int send_reply_chunks(struct svcxprt_rdma *xprt,
> chunk_no++) {
> u64 rs_offset;
> ch = &arg_ary->wc_array[chunk_no].wc_target;
> - write_len = min(xfer_len, ch->rs_length);
> + write_len = min(xfer_len, ntohl(ch->rs_length));
>
> /* Prepare the reply chunk given the length actually
> * written */
WARNING: multiple messages have this Message-ID (diff)
From: "J. Bruce Fields" <bfields@fieldses.org>
To: Dan Carpenter <dan.carpenter@oracle.com>
Cc: Trond Myklebust <Trond.Myklebust@netapp.com>,
"David S. Miller" <davem@davemloft.net>,
linux-nfs@vger.kernel.org, netdev@vger.kernel.org,
kernel-janitors@vger.kernel.org,
Tom Tucker <tom@opengridcomputing.com>
Subject: Re: [patch] svcrdma: endian bug in send_write_chunks()
Date: Thu, 12 Jan 2012 11:21:41 -0500 [thread overview]
Message-ID: <20120112162141.GC6563@fieldses.org> (raw)
In-Reply-To: <20120112064722.GB2408@elgon.mountain>
On Thu, Jan 12, 2012 at 09:47:22AM +0300, Dan Carpenter wrote:
> Sparse complains because arg_ch->rs_length is declared as network
> endian but we're treating it as CPU endian.
This looks like it would actually change behavior on a little endian
architecture, so how did this work before?
>From some quick grepping, I see assignments both of the form
...rs_length = ntohl(...)
and
...rs_length = htonl(...)
but only see one declaration for a field named rs_length.
So my best guess would be that the code is ugly but working as is, and
needs cleanup by someone who knows how this field was intended to be
used.
?
--b.
>
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
>
> diff --git a/net/sunrpc/xprtrdma/svc_rdma_sendto.c b/net/sunrpc/xprtrdma/svc_rdma_sendto.c
> index 249a835..30fda86 100644
> --- a/net/sunrpc/xprtrdma/svc_rdma_sendto.c
> +++ b/net/sunrpc/xprtrdma/svc_rdma_sendto.c
> @@ -409,7 +409,7 @@ static int send_write_chunks(struct svcxprt_rdma *xprt,
> u64 rs_offset;
>
> arg_ch = &arg_ary->wc_array[chunk_no].wc_target;
> - write_len = min(xfer_len, arg_ch->rs_length);
> + write_len = min(xfer_len, ntohl(arg_ch->rs_length));
>
> /* Prepare the response chunk given the length actually
> * written */
> @@ -481,7 +481,7 @@ static int send_reply_chunks(struct svcxprt_rdma *xprt,
> chunk_no++) {
> u64 rs_offset;
> ch = &arg_ary->wc_array[chunk_no].wc_target;
> - write_len = min(xfer_len, ch->rs_length);
> + write_len = min(xfer_len, ntohl(ch->rs_length));
>
> /* Prepare the reply chunk given the length actually
> * written */
next prev parent reply other threads:[~2012-01-12 16:21 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-12 6:47 [patch] svcrdma: endian bug in send_write_chunks() Dan Carpenter
2012-01-12 6:47 ` Dan Carpenter
2012-01-12 6:47 ` Dan Carpenter
2012-01-12 16:21 ` J. Bruce Fields [this message]
2012-01-12 16:21 ` J. Bruce Fields
2012-01-12 19:15 ` Trond Myklebust
2012-01-12 19:15 ` Trond Myklebust
2012-01-12 19:24 ` Tom Tucker
2012-01-12 19:24 ` Tom Tucker
2012-01-12 19:28 ` Trond Myklebust
2012-01-12 19:28 ` Trond Myklebust
2012-01-12 19:28 ` Trond Myklebust
2012-01-12 19:37 ` Tom Tucker
2012-01-12 19:37 ` Tom Tucker
2012-01-12 19:37 ` Tom Tucker
2012-01-12 19:28 ` J. Bruce Fields
2012-01-12 19:28 ` J. Bruce Fields
2012-01-12 19:28 ` J. Bruce Fields
2012-01-12 21:32 ` Dan Carpenter
2012-01-12 21:32 ` Dan Carpenter
2012-01-12 21:32 ` Dan Carpenter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120112162141.GC6563@fieldses.org \
--to=bfields@fieldses.org \
--cc=Trond.Myklebust@netapp.com \
--cc=dan.carpenter@oracle.com \
--cc=davem@davemloft.net \
--cc=kernel-janitors@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=tom@opengridcomputing.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.