Message ID | b752d1d5-81ad-7a35-2394-7870641be51c@i-love.sakura.ne.jp (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] mm, oom: Fix missing tlb_finish_mmu() in __oom_reap_task_mm(). | expand |
On Thu 23-08-18 23:11:26, Tetsuo Handa wrote: > Commit 93065ac753e44438 ("mm, oom: distinguish blockable mode for mmu > notifiers") added "continue;" without calling tlb_finish_mmu(). It should > not cause a critical problem but fix anyway because it looks strange. I would suggest the following wording instead 93065ac753e44438 ("mm, oom: distinguish blockable mode for mmu notifiers") has added an ability to skip over vmas with blockable mmu notifiers. This however didn't call tlb_finish_mmu as it should. As a result inc_tlb_flush_pending has been called without its pairing dec_tlb_flush_pending and all callers mm_tlb_flush_pending would flush even though this is not really needed. This alone is not harmful and it seems there shouldn't be any such callers for oom victims at all but there is no real reason to skip tlb_finish_mmu on early skip either so call it. > Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> In any case Acked-by: Michal Hocko <mhocko@suse.com> > --- > mm/oom_kill.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/mm/oom_kill.c b/mm/oom_kill.c > index b5b25e4..4f431c1 100644 > --- a/mm/oom_kill.c > +++ b/mm/oom_kill.c > @@ -522,6 +522,7 @@ bool __oom_reap_task_mm(struct mm_struct *mm) > > tlb_gather_mmu(&tlb, mm, start, end); > if (mmu_notifier_invalidate_range_start_nonblock(mm, start, end)) { > + tlb_finish_mmu(&tlb, start, end); > ret = false; > continue; > } > -- > 1.8.3.1 >
diff --git a/mm/oom_kill.c b/mm/oom_kill.c index b5b25e4..4f431c1 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -522,6 +522,7 @@ bool __oom_reap_task_mm(struct mm_struct *mm) tlb_gather_mmu(&tlb, mm, start, end); if (mmu_notifier_invalidate_range_start_nonblock(mm, start, end)) { + tlb_finish_mmu(&tlb, start, end); ret = false; continue; }
Commit 93065ac753e44438 ("mm, oom: distinguish blockable mode for mmu notifiers") added "continue;" without calling tlb_finish_mmu(). It should not cause a critical problem but fix anyway because it looks strange. Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> --- mm/oom_kill.c | 1 + 1 file changed, 1 insertion(+)