summaryrefslogtreecommitdiffstats
path: root/mm/z3fold.c
diff options
context:
space:
mode:
authorAndrea Arcangeli <aarcange@redhat.com>2018-03-09 15:51:06 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2018-03-09 16:40:01 -0800
commit96312e61282ae3f6537a562625706498cbc75594 (patch)
treecee11a490bf11d43696eaa577837839abd116cd6 /mm/z3fold.c
parent1b4cfe3c0a30dde968fb43c577a8d7e262a145ee (diff)
downloadlinux-stable-96312e61282ae3f6537a562625706498cbc75594.tar.gz
linux-stable-96312e61282ae3f6537a562625706498cbc75594.tar.bz2
linux-stable-96312e61282ae3f6537a562625706498cbc75594.zip
mm/gup.c: teach get_user_pages_unlocked to handle FOLL_NOWAIT
KVM is hanging during postcopy live migration with userfaultfd because get_user_pages_unlocked is not capable to handle FOLL_NOWAIT. Earlier FOLL_NOWAIT was only ever passed to get_user_pages. Specifically faultin_page (the callee of get_user_pages_unlocked caller) doesn't know that if FAULT_FLAG_RETRY_NOWAIT was set in the page fault flags, when VM_FAULT_RETRY is returned, the mmap_sem wasn't actually released (even if nonblocking is not NULL). So it sets *nonblocking to zero and the caller won't release the mmap_sem thinking it was already released, but it wasn't because of FOLL_NOWAIT. Link: http://lkml.kernel.org/r/20180302174343.5421-2-aarcange@redhat.com Fixes: ce53053ce378c ("kvm: switch get_user_page_nowait() to get_user_pages_unlocked()") Signed-off-by: Andrea Arcangeli <aarcange@redhat.com> Reported-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Tested-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/z3fold.c')
0 files changed, 0 insertions, 0 deletions