On Mon 19-09-16 15:56:08, Andrew Morton wrote: [...] > From: zhong jiang <zhongjiang@xxxxxxxxxx> > Subject: mm,ksm: fix endless looping in allocating memory when ksm enable > > I hit the following issue when run a OOM case of the LTP and ksm enable. > > Call trace: > [<ffffffc000086a88>] __switch_to+0x74/0x8c > [<ffffffc000a1bae0>] __schedule+0x23c/0x7bc > [<ffffffc000a1c09c>] schedule+0x3c/0x94 > [<ffffffc000a1eb84>] rwsem_down_write_failed+0x214/0x350 > [<ffffffc000a1e32c>] down_write+0x64/0x80 > [<ffffffc00021f794>] __ksm_exit+0x90/0x19c > [<ffffffc0000be650>] mmput+0x118/0x11c > [<ffffffc0000c3ec4>] do_exit+0x2dc/0xa74 > [<ffffffc0000c46f8>] do_group_exit+0x4c/0xe4 > [<ffffffc0000d0f34>] get_signal+0x444/0x5e0 > [<ffffffc000089fcc>] do_signal+0x1d8/0x450 > [<ffffffc00008a35c>] do_notify_resume+0x70/0x78 > > it will lead to a hung task because the exiting task cannot get the mmap > sem for write. but the root cause is that the ksmd holds it for read > while allocateing memory which just takes ages to complete. and ksmd will > loop in the following path. > > scan_get_next_rmap_item > down_read > get_next_rmap_item > alloc_rmap_item #ksmd will loop permanently. > > we fix it by changing the GFP to allow the allocation sometimes fail, and > we're not at all interested in hearing abot that. I really hope we will see an updated changelog. As of now it is more confusing than helpful. See http://lkml.kernel.org/r/20160918144858.GB28476@xxxxxxxxxxxxxx Not enough to NAK but still much preferable to go with a better changelog. > Link: http://lkml.kernel.org/r/1474165570-44398-1-git-send-email-zhongjiang@xxxxxxxxxx > Signed-off-by: zhong jiang <zhongjiang@xxxxxxxxxx> > Suggested-by: Hugh Dickins <hughd@xxxxxxxxxx> > Suggested-by: Michal Hocko <mhocko@xxxxxxx> > Cc: <stable@xxxxxxxxxxxxxxx> > Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > --- > > mm/ksm.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff -puN mm/ksm.c~mmksm-fix-endless-looping-in-allocating-memory-when-ksm-enable mm/ksm.c > --- a/mm/ksm.c~mmksm-fix-endless-looping-in-allocating-memory-when-ksm-enable > +++ a/mm/ksm.c > @@ -283,7 +283,8 @@ static inline struct rmap_item *alloc_rm > { > struct rmap_item *rmap_item; > > - rmap_item = kmem_cache_zalloc(rmap_item_cache, GFP_KERNEL); > + rmap_item = kmem_cache_zalloc(rmap_item_cache, GFP_KERNEL | > + __GFP_NORETRY | __GFP_NOWARN); > if (rmap_item) > ksm_rmap_items++; > return rmap_item; > _ > > Patches currently in -mm which might be from zhongjiang@xxxxxxxxxx are > > mmksm-fix-endless-looping-in-allocating-memory-when-ksm-enable.patch > mm-page_owner-align-with-pageblock_nr-pages.patch > mm-walk-the-zone-in-pageblock_nr_pages-steps.patch -- Michal Hocko SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html