--- /dev/null
+From 5c72feee3e45b40a3c96c7145ec422899d0e8964 Mon Sep 17 00:00:00 2001
+From: Jan Kara <jack@suse.cz>
+Date: Wed, 1 Apr 2020 21:04:40 -0700
+Subject: mm/filemap.c: don't bother dropping mmap_sem for zero size readahead
+
+From: Jan Kara <jack@suse.cz>
+
+commit 5c72feee3e45b40a3c96c7145ec422899d0e8964 upstream.
+
+When handling a page fault, we drop mmap_sem to start async readahead so
+that we don't block on IO submission with mmap_sem held. However there's
+no point to drop mmap_sem in case readahead is disabled. Handle that case
+to avoid pointless dropping of mmap_sem and retrying the fault. This was
+actually reported to block mlockall(MCL_CURRENT) indefinitely.
+
+Fixes: 6b4c9f446981 ("filemap: drop the mmap_sem for all blocking operations")
+Reported-by: Minchan Kim <minchan@kernel.org>
+Reported-by: Robert Stupp <snazy@gmx.de>
+Signed-off-by: Jan Kara <jack@suse.cz>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Reviewed-by: Josef Bacik <josef@toxicpanda.com>
+Reviewed-by: Minchan Kim <minchan@kernel.org>
+Link: http://lkml.kernel.org/r/20200212101356.30759-1-jack@suse.cz
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: SeongJae Park <sjpark@amazon.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ mm/filemap.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/mm/filemap.c
++++ b/mm/filemap.c
+@@ -2438,7 +2438,7 @@ static struct file *do_async_mmap_readah
+ pgoff_t offset = vmf->pgoff;
+
+ /* If we don't want any read-ahead, don't bother */
+- if (vmf->vma->vm_flags & VM_RAND_READ)
++ if (vmf->vma->vm_flags & VM_RAND_READ || !ra->ra_pages)
+ return fpin;
+ if (ra->mmap_miss > 0)
+ ra->mmap_miss--;