mirror of
https://github.com/torvalds/linux.git
synced 2026-09-25 09:41:03 +02:00
SUNRPC: Update svcxdr_init_decode() to call xdr_set_scratch_folio()
The only snag here is that __folio_alloc_node() doesn't handle NUMA_NO_NODE, so I also need to update svc_pool_map_get_node() to return numa_mem_id() instead. I arrived at this approach by looking at what other users of __folio_alloc_node() do for this case. Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
This commit is contained in:
parent
4b7c3b4c67
commit
d57e43b72b
|
|
@ -196,7 +196,7 @@ struct svc_rqst {
|
||||||
struct xdr_buf rq_arg;
|
struct xdr_buf rq_arg;
|
||||||
struct xdr_stream rq_arg_stream;
|
struct xdr_stream rq_arg_stream;
|
||||||
struct xdr_stream rq_res_stream;
|
struct xdr_stream rq_res_stream;
|
||||||
struct page *rq_scratch_page;
|
struct folio *rq_scratch_folio;
|
||||||
struct xdr_buf rq_res;
|
struct xdr_buf rq_res;
|
||||||
unsigned long rq_maxpages; /* num of entries in rq_pages */
|
unsigned long rq_maxpages; /* num of entries in rq_pages */
|
||||||
struct page * *rq_pages;
|
struct page * *rq_pages;
|
||||||
|
|
@ -503,7 +503,7 @@ static inline void svcxdr_init_decode(struct svc_rqst *rqstp)
|
||||||
buf->len = buf->head->iov_len + buf->page_len + buf->tail->iov_len;
|
buf->len = buf->head->iov_len + buf->page_len + buf->tail->iov_len;
|
||||||
|
|
||||||
xdr_init_decode(xdr, buf, argv->iov_base, NULL);
|
xdr_init_decode(xdr, buf, argv->iov_base, NULL);
|
||||||
xdr_set_scratch_page(xdr, rqstp->rq_scratch_page);
|
xdr_set_scratch_folio(xdr, rqstp->rq_scratch_folio);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -352,7 +352,7 @@ static int svc_pool_map_get_node(unsigned int pidx)
|
||||||
if (m->mode == SVC_POOL_PERNODE)
|
if (m->mode == SVC_POOL_PERNODE)
|
||||||
return m->pool_to[pidx];
|
return m->pool_to[pidx];
|
||||||
}
|
}
|
||||||
return NUMA_NO_NODE;
|
return numa_mem_id();
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* Set the given thread's cpus_allowed mask so that it
|
* Set the given thread's cpus_allowed mask so that it
|
||||||
|
|
@ -669,8 +669,8 @@ svc_rqst_free(struct svc_rqst *rqstp)
|
||||||
folio_batch_release(&rqstp->rq_fbatch);
|
folio_batch_release(&rqstp->rq_fbatch);
|
||||||
kfree(rqstp->rq_bvec);
|
kfree(rqstp->rq_bvec);
|
||||||
svc_release_buffer(rqstp);
|
svc_release_buffer(rqstp);
|
||||||
if (rqstp->rq_scratch_page)
|
if (rqstp->rq_scratch_folio)
|
||||||
put_page(rqstp->rq_scratch_page);
|
folio_put(rqstp->rq_scratch_folio);
|
||||||
kfree(rqstp->rq_resp);
|
kfree(rqstp->rq_resp);
|
||||||
kfree(rqstp->rq_argp);
|
kfree(rqstp->rq_argp);
|
||||||
kfree(rqstp->rq_auth_data);
|
kfree(rqstp->rq_auth_data);
|
||||||
|
|
@ -691,8 +691,8 @@ svc_prepare_thread(struct svc_serv *serv, struct svc_pool *pool, int node)
|
||||||
rqstp->rq_server = serv;
|
rqstp->rq_server = serv;
|
||||||
rqstp->rq_pool = pool;
|
rqstp->rq_pool = pool;
|
||||||
|
|
||||||
rqstp->rq_scratch_page = alloc_pages_node(node, GFP_KERNEL, 0);
|
rqstp->rq_scratch_folio = __folio_alloc_node(GFP_KERNEL, 0, node);
|
||||||
if (!rqstp->rq_scratch_page)
|
if (!rqstp->rq_scratch_folio)
|
||||||
goto out_enomem;
|
goto out_enomem;
|
||||||
|
|
||||||
rqstp->rq_argp = kmalloc_node(serv->sv_xdrsize, GFP_KERNEL, node);
|
rqstp->rq_argp = kmalloc_node(serv->sv_xdrsize, GFP_KERNEL, node);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user