]> git.dujemihanovic.xyz Git - linux.git/commitdiff
xprtrdma: Recognize XDRBUF_SPARSE_PAGES
authorChuck Lever <chuck.lever@oracle.com>
Wed, 19 Dec 2018 15:59:17 +0000 (10:59 -0500)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Wed, 2 Jan 2019 17:05:17 +0000 (12:05 -0500)
Commit 431f6eb3570f ("SUNRPC: Add a label for RPC calls that require
allocation on receive") didn't update similar logic in rpc_rdma.c.
I don't think this is a bug, per-se; the commit just adds more
careful checking for broken upper layer behavior.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
net/sunrpc/xprtrdma/rpc_rdma.c

index 3804fb30bdcfa232a2ed42f9e23635a13b7a03c1..939f84adbbdae18ed7dbb04acb5a8e1cb44db0ef 100644 (file)
@@ -218,11 +218,12 @@ rpcrdma_convert_iovs(struct rpcrdma_xprt *r_xprt, struct xdr_buf *xdrbuf,
        ppages = xdrbuf->pages + (xdrbuf->page_base >> PAGE_SHIFT);
        page_base = offset_in_page(xdrbuf->page_base);
        while (len) {
-               if (unlikely(!*ppages)) {
-                       /* XXX: Certain upper layer operations do
-                        *      not provide receive buffer pages.
-                        */
-                       *ppages = alloc_page(GFP_ATOMIC);
+               /* ACL likes to be lazy in allocating pages - ACLs
+                * are small by default but can get huge.
+                */
+               if (unlikely(xdrbuf->flags & XDRBUF_SPARSE_PAGES)) {
+                       if (!*ppages)
+                               *ppages = alloc_page(GFP_ATOMIC);
                        if (!*ppages)
                                return -ENOBUFS;
                }