Re: + mmksm-fix-endless-looping-in-allocating-memory-when-ksm-enable.patch added to -mm tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]