On Tue, Mar 09, 2021 at 11:03:48AM +0300, Vasily Averin wrote: > in_interrupt() check in memcg_kmem_bypass() is incorrect because > it does not allow to account memory allocation called from task context > with disabled BH, i.e. inside spin_lock_bh()/spin_unlock_bh() sections > > Signed-off-by: Vasily Averin <vvs@xxxxxxxxxxxxx> Good catch! It looks like the bug was there for years: in_interrupt() was there since the commit 7ae1e1d0f8ac ("memcg: kmem controller infrastructure") from 2012! So I guess there is no point for a stable fix, but it's definitely nice to have it fixed. Acked-by: Roman Gushchin <guro@xxxxxx> for this patch and the rest of the series. Thank you! > --- > mm/memcontrol.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 845eec0..568f2cb 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -1076,7 +1076,7 @@ static __always_inline bool memcg_kmem_bypass(void) > return false; > > /* Memcg to charge can't be determined. */ > - if (in_interrupt() || !current->mm || (current->flags & PF_KTHREAD)) > + if (!in_task() || !current->mm || (current->flags & PF_KTHREAD)) > return true; > > return false; > -- > 1.8.3.1 >