Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 196c6998 authored by Shirley Ma's avatar Shirley Ma Committed by Anna Schumaker
Browse files

xprtrdma: Allocate missing pagelist



GETACL relies on transport layer to alloc memory for reply buffer.
However xprtrdma assumes that the reply buffer (pagelist) has been
pre-allocated in upper layer. This problem was reported by IOL OFA lab
test on PPC.

Signed-off-by: default avatarShirley Ma <shirley.ma@oracle.com>
Reviewed-by: default avatarChuck Lever <chuck.lever@oracle.com>
Tested-by: default avatarEdward Mossman <emossman@iol.unh.edu>
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
parent 5bc4bc72
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -99,6 +99,12 @@ rpcrdma_convert_iovs(struct xdr_buf *xdrbuf, unsigned int pos,
	page_base = xdrbuf->page_base & ~PAGE_MASK;
	p = 0;
	while (len && n < nsegs) {
		if (!ppages[p]) {
			/* alloc the pagelist for receiving buffer */
			ppages[p] = alloc_page(GFP_ATOMIC);
			if (!ppages[p])
				return 0;
		}
		seg[n].mr_page = ppages[p];
		seg[n].mr_offset = (void *)(unsigned long) page_base;
		seg[n].mr_len = min_t(u32, PAGE_SIZE - page_base, len);