2009-04-03 20:18:26

by Steve Wise

[permalink] [raw]
Subject: [PATCH 2.6.30] svcrdma: Fix dma map direction for rdma read targets

The nfs server rdma transport was mapping rdma read target pages for
TO_DEVICE instead of FROM_DEVICE. This causes data corruption on non
cache-coherent systems if frmrs are used.

Signed-off-by: Steve Wise <[email protected]>
---

net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
index 629a287..42a6f9f 100644
--- a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
+++ b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
@@ -265,7 +265,7 @@ static int fast_reg_read_chunks(struct svcxprt_rdma *xprt,
frmr->page_list->page_list[page_no] =
ib_dma_map_single(xprt->sc_cm_id->device,
page_address(rqstp->rq_arg.pages[page_no]),
- PAGE_SIZE, DMA_TO_DEVICE);
+ PAGE_SIZE, DMA_FROM_DEVICE);
if (ib_dma_mapping_error(xprt->sc_cm_id->device,
frmr->page_list->page_list[page_no]))
goto fatal_err;



2009-04-09 15:32:25

by J. Bruce Fields

[permalink] [raw]
Subject: Re: [PATCH 2.6.30] svcrdma: Fix dma map direction for rdma read targets

On Fri, Apr 03, 2009 at 03:23:47PM -0500, Tom Tucker wrote:
> Steve Wise wrote:
>> The nfs server rdma transport was mapping rdma read target pages for
>> TO_DEVICE instead of FROM_DEVICE. This causes data corruption on non
>> cache-coherent systems if frmrs are used.
>>
>> Signed-off-by: Steve Wise <[email protected]>
>> ---
>>
>> net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 2 +-
>> 1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
>> index 629a287..42a6f9f 100644
>> --- a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
>> +++ b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
>> @@ -265,7 +265,7 @@ static int fast_reg_read_chunks(struct svcxprt_rdma *xprt,
>> frmr->page_list->page_list[page_no] =
>> ib_dma_map_single(xprt->sc_cm_id->device,
>> page_address(rqstp->rq_arg.pages[page_no]),
>> - PAGE_SIZE, DMA_TO_DEVICE);
>> + PAGE_SIZE, DMA_FROM_DEVICE);
>
> FWIW, this looks good to me.

Thanks; I'll add an acked-by if you don't object. Should this go to
stable as well?

--b.

>
>> if (ib_dma_mapping_error(xprt->sc_cm_id->device,
>> frmr->page_list->page_list[page_no]))
>> goto fatal_err;
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>

2009-04-09 19:17:49

by Tom Tucker

[permalink] [raw]
Subject: Re: [PATCH 2.6.30] svcrdma: Fix dma map direction for rdma read targets

J. Bruce Fields wrote:
> On Fri, Apr 03, 2009 at 03:23:47PM -0500, Tom Tucker wrote:
>> Steve Wise wrote:
>>> The nfs server rdma transport was mapping rdma read target pages for
>>> TO_DEVICE instead of FROM_DEVICE. This causes data corruption on non
>>> cache-coherent systems if frmrs are used.
>>>
>>> Signed-off-by: Steve Wise <[email protected]>
>>> ---
>>>
>>> net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 2 +-
>>> 1 files changed, 1 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
>>> index 629a287..42a6f9f 100644
>>> --- a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
>>> +++ b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
>>> @@ -265,7 +265,7 @@ static int fast_reg_read_chunks(struct svcxprt_rdma *xprt,
>>> frmr->page_list->page_list[page_no] =
>>> ib_dma_map_single(xprt->sc_cm_id->device,
>>> page_address(rqstp->rq_arg.pages[page_no]),
>>> - PAGE_SIZE, DMA_TO_DEVICE);
>>> + PAGE_SIZE, DMA_FROM_DEVICE);
>> FWIW, this looks good to me.
>
> Thanks; I'll add an acked-by if you don't object.

Sure...

>... Should this go to
> stable as well?
>

I think so because it's a bug and we've verified it fixes the data
corruption issue and doesn't regress existing platforms.


> --b.
>
>>> if (ib_dma_mapping_error(xprt->sc_cm_id->device,
>>> frmr->page_list->page_list[page_no]))
>>> goto fatal_err;
>>>
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
>>> the body of a message to [email protected]
>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html


2009-04-03 20:23:49

by Tom Tucker

[permalink] [raw]
Subject: Re: [PATCH 2.6.30] svcrdma: Fix dma map direction for rdma read targets

Steve Wise wrote:
> The nfs server rdma transport was mapping rdma read target pages for
> TO_DEVICE instead of FROM_DEVICE. This causes data corruption on non
> cache-coherent systems if frmrs are used.
>
> Signed-off-by: Steve Wise <[email protected]>
> ---
>
> net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
> index 629a287..42a6f9f 100644
> --- a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
> +++ b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
> @@ -265,7 +265,7 @@ static int fast_reg_read_chunks(struct svcxprt_rdma *xprt,
> frmr->page_list->page_list[page_no] =
> ib_dma_map_single(xprt->sc_cm_id->device,
> page_address(rqstp->rq_arg.pages[page_no]),
> - PAGE_SIZE, DMA_TO_DEVICE);
> + PAGE_SIZE, DMA_FROM_DEVICE);

FWIW, this looks good to me.

> if (ib_dma_mapping_error(xprt->sc_cm_id->device,
> frmr->page_list->page_list[page_no]))
> goto fatal_err;
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html