SUNRPC: Convert remaining GFP_NOIO, and GFP_NOWAIT sites in sunrpc
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Sat, 2 Mar 2019 15:14:02 +0000 (10:14 -0500)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Sat, 2 Mar 2019 21:25:26 +0000 (16:25 -0500)
Convert the remaining gfp_flags arguments in sunrpc to standard reclaiming
allocations, now that we set memalloc_nofs_save() as appropriate.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
net/sunrpc/auth_gss/auth_gss.c
net/sunrpc/sched.c
net/sunrpc/xprtsock.c

index c67e2ad151ae6a6a4fe62a81ea0b37b9cbba4380..3fd56c0c90ae67e589e6af06bf10fa53637df882 100644 (file)
@@ -1208,7 +1208,7 @@ gss_dup_cred(struct gss_auth *gss_auth, struct gss_cred *gss_cred)
        struct gss_cred *new;
 
        /* Make a copy of the cred so that we can reference count it */
-       new = kzalloc(sizeof(*gss_cred), GFP_NOIO);
+       new = kzalloc(sizeof(*gss_cred), GFP_NOFS);
        if (new) {
                struct auth_cred acred = {
                        .cred = gss_cred->gc_base.cr_cred,
index 2168d4d9c09f307596435044ecb7507e5af9e5a2..f21557213a43c90650aeb26a3425a4b14add65f1 100644 (file)
@@ -925,16 +925,13 @@ static void rpc_async_schedule(struct work_struct *work)
  * Most requests are 'small' (under 2KiB) and can be serviced from a
  * mempool, ensuring that NFS reads and writes can always proceed,
  * and that there is good locality of reference for these buffers.
- *
- * In order to avoid memory starvation triggering more writebacks of
- * NFS requests, we avoid using GFP_KERNEL.
  */
 int rpc_malloc(struct rpc_task *task)
 {
        struct rpc_rqst *rqst = task->tk_rqstp;
        size_t size = rqst->rq_callsize + rqst->rq_rcvsize;
        struct rpc_buffer *buf;
-       gfp_t gfp = GFP_NOIO | __GFP_NOWARN;
+       gfp_t gfp = GFP_NOFS;
 
        if (RPC_IS_SWAPPER(task))
                gfp = __GFP_MEMALLOC | GFP_NOWAIT | __GFP_NOWARN;
@@ -1015,7 +1012,7 @@ static void rpc_init_task(struct rpc_task *task, const struct rpc_task_setup *ta
 static struct rpc_task *
 rpc_alloc_task(void)
 {
-       return (struct rpc_task *)mempool_alloc(rpc_task_mempool, GFP_NOIO);
+       return (struct rpc_task *)mempool_alloc(rpc_task_mempool, GFP_NOFS);
 }
 
 /*
index e829036ed81fa3d43d0115e15c7073ac3cce6249..42f45d33dc5675ce5980c994a891f310bcd7c8b8 100644 (file)
@@ -423,7 +423,7 @@ xs_read_xdr_buf(struct socket *sock, struct msghdr *msg, int flags,
 
        want = xs_alloc_sparse_pages(buf,
                        min_t(size_t, count - offset, buf->page_len),
-                       GFP_NOWAIT);
+                       GFP_KERNEL);
        if (seek < want) {
                ret = xs_read_bvec(sock, msg, flags, buf->bvec,
                                xdr_buf_pagecount(buf),
@@ -909,7 +909,7 @@ static int xs_nospace(struct rpc_rqst *req)
 static void
 xs_stream_prepare_request(struct rpc_rqst *req)
 {
-       req->rq_task->tk_status = xdr_alloc_bvec(&req->rq_rcv_buf, GFP_NOIO);
+       req->rq_task->tk_status = xdr_alloc_bvec(&req->rq_rcv_buf, GFP_KERNEL);
 }
 
 /*