aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/lib/xarray.c
diff options
context:
space:
mode:
authorJonathan Corbet <corbet@lwn.net>2019-07-22 13:42:10 -0600
committerJonathan Corbet <corbet@lwn.net>2019-07-22 13:42:10 -0600
commite27a24210aa17b8a0cd462865130fe73afd7e001 (patch)
treeb2d7b8311d280244fad3166792e8f447081a8bc9 /lib/xarray.c
parentdocs: driver-api: generic-counter: fix file path to ABI doc (diff)
parentLinus 5.3-rc1 (diff)
downloadwireguard-linux-e27a24210aa17b8a0cd462865130fe73afd7e001.tar.xz
wireguard-linux-e27a24210aa17b8a0cd462865130fe73afd7e001.zip
Merge tag 'v5.3-rc1' into docs-next
Pull in all of the massive docs changes from elsewhere.
Diffstat (limited to 'lib/xarray.c')
-rw-r--r--lib/xarray.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/xarray.c b/lib/xarray.c
index 6be3acbb861f..446b956c9188 100644
--- a/lib/xarray.c
+++ b/lib/xarray.c
@@ -298,6 +298,8 @@ bool xas_nomem(struct xa_state *xas, gfp_t gfp)
xas_destroy(xas);
return false;
}
+ if (xas->xa->xa_flags & XA_FLAGS_ACCOUNT)
+ gfp |= __GFP_ACCOUNT;
xas->xa_alloc = kmem_cache_alloc(radix_tree_node_cachep, gfp);
if (!xas->xa_alloc)
return false;
@@ -325,6 +327,8 @@ static bool __xas_nomem(struct xa_state *xas, gfp_t gfp)
xas_destroy(xas);
return false;
}
+ if (xas->xa->xa_flags & XA_FLAGS_ACCOUNT)
+ gfp |= __GFP_ACCOUNT;
if (gfpflags_allow_blocking(gfp)) {
xas_unlock_type(xas, lock_type);
xas->xa_alloc = kmem_cache_alloc(radix_tree_node_cachep, gfp);
@@ -358,8 +362,12 @@ static void *xas_alloc(struct xa_state *xas, unsigned int shift)
if (node) {
xas->xa_alloc = NULL;
} else {
- node = kmem_cache_alloc(radix_tree_node_cachep,
- GFP_NOWAIT | __GFP_NOWARN);
+ gfp_t gfp = GFP_NOWAIT | __GFP_NOWARN;
+
+ if (xas->xa->xa_flags & XA_FLAGS_ACCOUNT)
+ gfp |= __GFP_ACCOUNT;
+
+ node = kmem_cache_alloc(radix_tree_node_cachep, gfp);
if (!node) {
xas_set_err(xas, -ENOMEM);
return NULL;