Messages in this thread | | | Date | Wed, 24 May 2023 11:14:17 +0800 | Subject | Re: [PATCH 05/31] mm/filemap: allow pte_offset_map_lock() to fail | From | Qi Zheng <> |
| |
On 2023/5/24 10:35, Hugh Dickins wrote: > On Mon, 22 May 2023, Qi Zheng wrote: >> On 2023/5/22 12:54, Hugh Dickins wrote: >>> filemap_map_pages() allow pte_offset_map_lock() to fail; and remove the >>> pmd_devmap_trans_unstable() check from filemap_map_pmd(), which can safely >>> return to filemap_map_pages() and let pte_offset_map_lock() discover that. >>> >>> Signed-off-by: Hugh Dickins <hughd@google.com> >>> --- >>> mm/filemap.c | 12 +++++------- >>> 1 file changed, 5 insertions(+), 7 deletions(-) >>> >>> diff --git a/mm/filemap.c b/mm/filemap.c >>> index 28b42ee848a4..9e129ad43e0d 100644 >>> --- a/mm/filemap.c >>> +++ b/mm/filemap.c >>> @@ -3408,13 +3408,6 @@ static bool filemap_map_pmd(struct vm_fault *vmf, >>> struct folio *folio, >>> if (pmd_none(*vmf->pmd)) >>> pmd_install(mm, vmf->pmd, &vmf->prealloc_pte); >>> - /* See comment in handle_pte_fault() */ >>> - if (pmd_devmap_trans_unstable(vmf->pmd)) { >>> - folio_unlock(folio); >>> - folio_put(folio); >>> - return true; >>> - } >>> - >>> return false; >>> } >>> >>> @@ -3501,6 +3494,11 @@ vm_fault_t filemap_map_pages(struct vm_fault *vmf, >>> >>> addr = vma->vm_start + ((start_pgoff - vma->vm_pgoff) << PAGE_SHIFT); >>> vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd, addr, &vmf->ptl); >>> + if (!vmf->pte) { >>> + folio_unlock(folio); >>> + folio_put(folio); >> >> Missing: >> ret = VM_FAULT_NOPAGE; >> ? > > No, not missed. Here ret is 0, which leads do_read_fault() to try > __do_fault() afterwards. Whereas VM_FAULT_NOPAGE would send it back > to userspace to retry the whole fault. Either will work, but I think > the intention of VM_FAULT_NOPAGE here in filemap_map_pages() is to say > "the page you want is now inserted", which is probably not the case.
Got it. Thanks for the explanation.
> > Hugh
-- Thanks, Qi
| |