break;
                }
 
+               hugetlb_vma_lock_read(vma);
                /*
                 * Some archs (sparc64, sh*) have multiple pte_ts to
                 * each hugepage.  We have to make sure we get the
                    !hugetlbfs_pagecache_present(h, vma, vaddr)) {
                        if (pte)
                                spin_unlock(ptl);
+                       hugetlb_vma_unlock_read(vma);
                        remainder = 0;
                        break;
                }
 
                        if (pte)
                                spin_unlock(ptl);
+                       hugetlb_vma_unlock_read(vma);
+
                        if (flags & FOLL_WRITE)
                                fault_flags |= FAULT_FLAG_WRITE;
                        else if (unshare)
                        remainder -= pages_per_huge_page(h);
                        i += pages_per_huge_page(h);
                        spin_unlock(ptl);
+                       hugetlb_vma_unlock_read(vma);
                        continue;
                }
 
                        if (WARN_ON_ONCE(!try_grab_folio(pages[i], refs,
                                                         flags))) {
                                spin_unlock(ptl);
+                               hugetlb_vma_unlock_read(vma);
                                remainder = 0;
                                err = -ENOMEM;
                                break;
                i += refs;
 
                spin_unlock(ptl);
+               hugetlb_vma_unlock_read(vma);
        }
        *nr_pages = remainder;
        /*