Messages in this thread Patch in this message | | | From | Peter Xu <> | Subject | [PATCH RFC 03/10] mm/hugetlb: Make hugetlb_vma_maps_page() RCU-safe | Date | Sun, 30 Oct 2022 17:29:22 -0400 |
| |
RCU makes sure the pte_t* won't go away from under us. Please refer to the comment above huge_pte_offset() for more information.
Signed-off-by: Peter Xu <peterx@redhat.com> --- fs/hugetlbfs/inode.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index ac3a69fe29c3..b9e7825079c7 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c @@ -387,21 +387,26 @@ static bool hugetlb_vma_maps_page(struct vm_area_struct *vma, unsigned long addr, struct page *page) { pte_t *ptep, pte; + bool result = false; + + /* For huge_pte_offset() */ + rcu_read_lock(); ptep = huge_pte_offset(vma->vm_mm, addr, huge_page_size(hstate_vma(vma))); if (!ptep) - return false; + goto out; pte = huge_ptep_get(ptep); if (huge_pte_none(pte) || !pte_present(pte)) - return false; + goto out; if (pte_page(pte) == page) - return true; - - return false; + result = true; +out: + rcu_read_unlock(); + return result; } /* -- 2.37.3
| |