diff options
author | 2019-08-13 03:40:10 -0700 | |
---|---|---|
committer | 2019-08-13 03:40:10 -0700 | |
commit | 58e16d792a6a8c6b750f637a4649967fcac853dc (patch) | |
tree | 778a940499ecfc6fb2d811dbfef735913d30618a /lib/xarray.c | |
parent | ARM: OMAP1: ams-delta-fiq: Fix missing irq_ack (diff) | |
parent | bus: ti-sysc: Simplify cleanup upon failures in sysc_probe() (diff) | |
download | wireguard-linux-58e16d792a6a8c6b750f637a4649967fcac853dc.tar.xz wireguard-linux-58e16d792a6a8c6b750f637a4649967fcac853dc.zip |
Merge branch 'ti-sysc-fixes' into fixes
Diffstat (limited to 'lib/xarray.c')
-rw-r--r-- | lib/xarray.c | 12 |
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; |