xprtrdma: Prevent memory allocations from driving a reclaim

Many memory allocations that xprtrdma does can fail safely. Let's
use this fact to avoid some potential deadlocks: Replace GFP_KERNEL
with GFP flags that do not try hard to acquire memory.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
Chuck Lever 2022-09-23 09:06:37 -04:00 committed by Anna Schumaker
parent 9c8f332fbf
commit f20f18c956

View File

@ -811,7 +811,7 @@ struct rpcrdma_req *rpcrdma_req_create(struct rpcrdma_xprt *r_xprt,
struct rpcrdma_buffer *buffer = &r_xprt->rx_buf; struct rpcrdma_buffer *buffer = &r_xprt->rx_buf;
struct rpcrdma_req *req; struct rpcrdma_req *req;
req = kzalloc(sizeof(*req), GFP_KERNEL); req = kzalloc(sizeof(*req), XPRTRDMA_GFP_FLAGS);
if (req == NULL) if (req == NULL)
goto out1; goto out1;
@ -926,7 +926,7 @@ struct rpcrdma_rep *rpcrdma_rep_create(struct rpcrdma_xprt *r_xprt,
struct rpcrdma_buffer *buf = &r_xprt->rx_buf; struct rpcrdma_buffer *buf = &r_xprt->rx_buf;
struct rpcrdma_rep *rep; struct rpcrdma_rep *rep;
rep = kzalloc(sizeof(*rep), GFP_KERNEL); rep = kzalloc(sizeof(*rep), XPRTRDMA_GFP_FLAGS);
if (rep == NULL) if (rep == NULL)
goto out; goto out;
@ -1236,10 +1236,10 @@ rpcrdma_regbuf_alloc(size_t size, enum dma_data_direction direction)
{ {
struct rpcrdma_regbuf *rb; struct rpcrdma_regbuf *rb;
rb = kmalloc(sizeof(*rb), GFP_KERNEL); rb = kmalloc(sizeof(*rb), XPRTRDMA_GFP_FLAGS);
if (!rb) if (!rb)
return NULL; return NULL;
rb->rg_data = kmalloc(size, GFP_KERNEL); rb->rg_data = kmalloc(size, XPRTRDMA_GFP_FLAGS);
if (!rb->rg_data) { if (!rb->rg_data) {
kfree(rb); kfree(rb);
return NULL; return NULL;