Though not yet detected by syzbot, this commit was making the same
mistake with mmap_locked as the previous commit: fix that.

Signed-off-by: Hugh Dickins <hu...@google.com>
---
 mm/khugepaged.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/mm/khugepaged.c b/mm/khugepaged.c
index 1c773db26e88..41913730db4c 100644
--- a/mm/khugepaged.c
+++ b/mm/khugepaged.c
@@ -2380,19 +2380,17 @@ static unsigned int khugepaged_scan_mm_slot(unsigned 
int pages, int *result,
                                mmap_locked = false;
                                *result = hpage_collapse_scan_file(mm,
                                        khugepaged_scan.address, file, pgoff, 
cc);
+                               fput(file);
                                if (*result == SCAN_PTE_MAPPED_HUGEPAGE) {
                                        mmap_read_lock(mm);
-                                       mmap_locked = true;
-                                       if (hpage_collapse_test_exit(mm)) {
-                                               fput(file);
+                                       if (hpage_collapse_test_exit(mm))
                                                goto breakouterloop;
-                                       }
                                        *result = collapse_pte_mapped_thp(mm,
                                                khugepaged_scan.address, false);
                                        if (*result == SCAN_PMD_MAPPED)
                                                *result = SCAN_SUCCEED;
+                                       mmap_read_unlock(mm);
                                }
-                               fput(file);
                        } else {
                                *result = hpage_collapse_scan_pmd(mm, vma,
                                        khugepaged_scan.address, &mmap_locked, 
cc);
-- 
2.35.3

Reply via email to