Commit 0c8cbcd3 authored by Trond Myklebust's avatar Trond Myklebust

Merge tag 'nfs-rdma-for-4.16-2' of git://git.linux-nfs.org/projects/anna/linux-nfs

NFS-over-RDMA client fixes for Linux 4.16 #2

Stable fixes:
- Fix calculating ri_max_send_sges, which can oops if max_sge is too small
- Fix a BUG after device removal if freed resources haven't been allocated yet
parents 9b30889c e89e8d8f
...@@ -143,7 +143,7 @@ static bool rpcrdma_args_inline(struct rpcrdma_xprt *r_xprt, ...@@ -143,7 +143,7 @@ static bool rpcrdma_args_inline(struct rpcrdma_xprt *r_xprt,
if (xdr->page_len) { if (xdr->page_len) {
remaining = xdr->page_len; remaining = xdr->page_len;
offset = offset_in_page(xdr->page_base); offset = offset_in_page(xdr->page_base);
count = 0; count = RPCRDMA_MIN_SEND_SGES;
while (remaining) { while (remaining) {
remaining -= min_t(unsigned int, remaining -= min_t(unsigned int,
PAGE_SIZE - offset, remaining); PAGE_SIZE - offset, remaining);
......
...@@ -505,7 +505,7 @@ rpcrdma_ep_create(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia, ...@@ -505,7 +505,7 @@ rpcrdma_ep_create(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia,
pr_warn("rpcrdma: HCA provides only %d send SGEs\n", max_sge); pr_warn("rpcrdma: HCA provides only %d send SGEs\n", max_sge);
return -ENOMEM; return -ENOMEM;
} }
ia->ri_max_send_sges = max_sge - RPCRDMA_MIN_SEND_SGES; ia->ri_max_send_sges = max_sge;
if (ia->ri_device->attrs.max_qp_wr <= RPCRDMA_BACKWARD_WRS) { if (ia->ri_device->attrs.max_qp_wr <= RPCRDMA_BACKWARD_WRS) {
dprintk("RPC: %s: insufficient wqe's available\n", dprintk("RPC: %s: insufficient wqe's available\n",
...@@ -1502,6 +1502,9 @@ __rpcrdma_dma_map_regbuf(struct rpcrdma_ia *ia, struct rpcrdma_regbuf *rb) ...@@ -1502,6 +1502,9 @@ __rpcrdma_dma_map_regbuf(struct rpcrdma_ia *ia, struct rpcrdma_regbuf *rb)
static void static void
rpcrdma_dma_unmap_regbuf(struct rpcrdma_regbuf *rb) rpcrdma_dma_unmap_regbuf(struct rpcrdma_regbuf *rb)
{ {
if (!rb)
return;
if (!rpcrdma_regbuf_is_mapped(rb)) if (!rpcrdma_regbuf_is_mapped(rb))
return; return;
...@@ -1517,9 +1520,6 @@ rpcrdma_dma_unmap_regbuf(struct rpcrdma_regbuf *rb) ...@@ -1517,9 +1520,6 @@ rpcrdma_dma_unmap_regbuf(struct rpcrdma_regbuf *rb)
void void
rpcrdma_free_regbuf(struct rpcrdma_regbuf *rb) rpcrdma_free_regbuf(struct rpcrdma_regbuf *rb)
{ {
if (!rb)
return;
rpcrdma_dma_unmap_regbuf(rb); rpcrdma_dma_unmap_regbuf(rb);
kfree(rb); kfree(rb);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment