Skip to content
Commit 6ea8d958 authored by chenjie's avatar chenjie Committed by Linus Torvalds
Browse files

mm/madvise.c: fix madvise() infinite loop under special circumstances

MADVISE_WILLNEED has always been a noop for DAX (formerly XIP) mappings.
Unfortunately madvise_willneed() doesn't communicate this information
properly to the generic madvise syscall implementation.  The calling
convention is quite subtle there.  madvise_vma() is supposed to either
return an error or update &prev otherwise the main loop will never
advance to the next vma and it will keep looping for ever without a way
to get out of the kernel.

It seems this has been broken since introduction.  Nobody has noticed
because nobody seems to be using MADVISE_WILLNEED on these DAX mappings.

[mhocko@suse.com: rewrite changelog]
Link: http://lkml.kernel.org/r/20171127115318.911-1-guoxuenan@huawei.com


Fixes: fe77ba6f ("[PATCH] xip: madvice/fadvice: execute in place")
Signed-off-by: default avatarchenjie <chenjie6@huawei.com>
Signed-off-by: default avatarguoxuenan <guoxuenan@huawei.com>
Acked-by: default avatarMichal Hocko <mhocko@suse.com>
Cc: Minchan Kim <minchan@kernel.org>
Cc: z...
parent 04e35f44
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment