On Wed, Jan 20, 2021 at 05:21:47PM +0100, Uladzislau Rezki (Sony) wrote: > From: "Paul E. McKenney" <paulmck@xxxxxxxxxx> > > This commit applies the __GFP_NOMEMALLOC gfp flag to memory allocations > carried out by the single-argument variant of kvfree_rcu(), thus avoiding > this can-sleep code path from dipping into the emergency reserves. > > Acked-by: Michal Hocko <mhocko@xxxxxxxx> > Suggested-by: Michal Hocko <mhocko@xxxxxxxx> > Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxx> > Signed-off-by: Uladzislau Rezki (Sony) <urezki@xxxxxxxxx> > --- > kernel/rcu/tree.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c > index 2014fb22644d..454809514c91 100644 > --- a/kernel/rcu/tree.c > +++ b/kernel/rcu/tree.c > @@ -3491,7 +3491,7 @@ add_ptr_to_bulk_krc_lock(struct kfree_rcu_cpu **krcp, > if (!bnode && can_alloc) { > krc_this_cpu_unlock(*krcp, *flags); > bnode = (struct kvfree_rcu_bulk_data *) > - __get_free_page(GFP_KERNEL | __GFP_RETRY_MAYFAIL | __GFP_NOWARN); > + __get_free_page(GFP_KERNEL | __GFP_RETRY_MAYFAIL | __GFP_NOMEMALLOC | __GFP_NOWARN); > *krcp = krc_this_cpu_lock(flags); > } > > -- > 2.20.1 > Please see below a V2: V1 -> V2: - rebase on [PATCH v2 1/1] kvfree_rcu: Directly allocate page for single-argument - add a comment about __GFP_NOMEMALLOC usage. <snip> >From 1427698cdbdced53d9b5eee60aa5d22bc223056d Mon Sep 17 00:00:00 2001 From: "Paul E. McKenney" <paulmck@xxxxxxxxxx> Date: Wed, 20 Jan 2021 17:21:47 +0100 Subject: [PATCH v2 1/1] kvfree_rcu: Use __GFP_NOMEMALLOC for single-argument kvfree_rcu() This commit applies the __GFP_NOMEMALLOC gfp flag to memory allocations carried out by the single-argument variant of kvfree_rcu(), thus avoiding this can-sleep code path from dipping into the emergency reserves. Acked-by: Michal Hocko <mhocko@xxxxxxxx> Suggested-by: Michal Hocko <mhocko@xxxxxxxx> Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxx> Signed-off-by: Uladzislau Rezki (Sony) <urezki@xxxxxxxxx> Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxx> --- kernel/rcu/tree.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index e450c17a06b2..e7b705155c92 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -3496,11 +3496,14 @@ add_ptr_to_bulk_krc_lock(struct kfree_rcu_cpu **krcp, // view. Apart of that it forbids any OOM invoking what is // also beneficial since we are about to release memory soon. // + // __GFP_NOMEMALLOC - prevents from consuming of all the + // memory reserves. Please note we have a fallback path. + // // __GFP_NOWARN - it is supposed that an allocation can // be failed under low memory or high memory pressure // scenarios. bnode = (struct kvfree_rcu_bulk_data *) - __get_free_page(GFP_KERNEL | __GFP_NORETRY | __GFP_NOWARN); + __get_free_page(GFP_KERNEL | __GFP_NORETRY | __GFP_NOMEMALLOC | __GFP_NOWARN); *krcp = krc_this_cpu_lock(flags); } -- 2.20.1 <snip> Thanks! -- Vlad Rezki