diff options
-rw-r--r-- | net/sunrpc/xprtrdma/rpc_rdma.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/net/sunrpc/xprtrdma/rpc_rdma.c b/net/sunrpc/xprtrdma/rpc_rdma.c index 436d229f31dc..dc4a826192b6 100644 --- a/net/sunrpc/xprtrdma/rpc_rdma.c +++ b/net/sunrpc/xprtrdma/rpc_rdma.c | |||
@@ -99,6 +99,12 @@ rpcrdma_convert_iovs(struct xdr_buf *xdrbuf, unsigned int pos, | |||
99 | page_base = xdrbuf->page_base & ~PAGE_MASK; | 99 | page_base = xdrbuf->page_base & ~PAGE_MASK; |
100 | p = 0; | 100 | p = 0; |
101 | while (len && n < nsegs) { | 101 | while (len && n < nsegs) { |
102 | if (!ppages[p]) { | ||
103 | /* alloc the pagelist for receiving buffer */ | ||
104 | ppages[p] = alloc_page(GFP_ATOMIC); | ||
105 | if (!ppages[p]) | ||
106 | return 0; | ||
107 | } | ||
102 | seg[n].mr_page = ppages[p]; | 108 | seg[n].mr_page = ppages[p]; |
103 | seg[n].mr_offset = (void *)(unsigned long) page_base; | 109 | seg[n].mr_offset = (void *)(unsigned long) page_base; |
104 | seg[n].mr_len = min_t(u32, PAGE_SIZE - page_base, len); | 110 | seg[n].mr_len = min_t(u32, PAGE_SIZE - page_base, len); |