]> git.karo-electronics.de Git - linux-beck.git/commitdiff
svcrdma: fix offset calculation for non-page aligned sge entries
authorJeff Layton <jlayton@redhat.com>
Mon, 17 Mar 2014 17:10:05 +0000 (13:10 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Fri, 28 Mar 2014 22:02:13 +0000 (18:02 -0400)
The xdr_off value in dma_map_xdr gets passed to ib_dma_map_page as the
offset into the page to be mapped. This calculation does not correctly
take into account the case where the data starts at some offset into
the page. Increment the xdr_off by the page_base to ensure that it is
respected.

Cc: Tom Tucker <tom@opengridcomputing.com>
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
net/sunrpc/xprtrdma/svc_rdma_sendto.c

index 11e90f8c0fc50b68b476b45dc07eece62155df1f..7e024a51617e034811a950bb245d1f615e9809a9 100644 (file)
@@ -265,6 +265,7 @@ static dma_addr_t dma_map_xdr(struct svcxprt_rdma *xprt,
                xdr_off -= xdr->head[0].iov_len;
                if (xdr_off < xdr->page_len) {
                        /* This offset is in the page list */
+                       xdr_off += xdr->page_base;
                        page = xdr->pages[xdr_off >> PAGE_SHIFT];
                        xdr_off &= ~PAGE_MASK;
                } else {