On Tue 31-03-20 10:58:06, Joel Fernandes wrote: [...] > > diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c > > index 4be763355c9fb..965deefffdd58 100644 > > --- a/kernel/rcu/tree.c > > +++ b/kernel/rcu/tree.c > > @@ -3149,7 +3149,7 @@ static inline struct rcu_head *attach_rcu_head_to_object(void *obj) > > > > if (!ptr) > > ptr = kmalloc(sizeof(unsigned long *) + > > - sizeof(struct rcu_head), GFP_ATOMIC | __GFP_NOWARN); > > + sizeof(struct rcu_head), GFP_MEMALLOC); > > Just to add, the main requirements here are: > 1. Allocation should be bounded in time. > 2. Allocation should try hard (possibly tapping into reserves) > 3. Sleeping is Ok but should not affect the time bound. __GFP_ATOMIC | __GFP_HIGH is the way to get an additional access to memory reserves regarless of the sleeping status. Using __GFP_MEMALLOC is quite dangerous because it can deplete _all_ the memory. What does prevent the above code path to do that? If a partial access to reserves is sufficient then why the existing modifiers (mentioned above are not sufficient? -- Michal Hocko SUSE Labs