Re: [RFC PATCH] mm: filemap: avoid unnecessary major faults in filemap_fault()

From: Matthew Wilcox
Date: Thu Nov 23 2023 - 10:33:44 EST


On Thu, Nov 23, 2023 at 05:09:04PM +0800, zhangpeng (AS) wrote:
> > > + pte_t *ptep = pte_offset_map_lock(vmf->vma->vm_mm, vmf->pmd,
> > > + vmf->address, &vmf->ptl);
> > > + if (ptep) {
> > > + /*
> > > + * Recheck pte with ptl locked as the pte can be cleared
> > > + * temporarily during a read/modify/write update.
> > > + */
> > > + if (unlikely(!pte_none(ptep_get(ptep))))
> > > + ret = VM_FAULT_NOPAGE;
> > > + pte_unmap_unlock(ptep, vmf->ptl);
> > > + if (unlikely(ret))
> > > + return ret;
> > > + }
> > > +
> > Need to deal with ptep == NULL. Although that is high impossible.
>
> If ptep == NULL, we may just need to return VM_FAULT_SIGBUS.
> I'll add it in the next version.

no? wouldn't ptep being NULL mean that the ptep has been replaced with
a PMD entry, and thus should return NOPAGE?