do_fault为 文件page fault处理,当vma被具体映射到某个文件使,发生page fault将会被认为是文件page fault:
static vm_fault_t handle_pte_fault(struct vm_fault *vmf)
{
... ...
if (!vmf->pte) {
if (vma_is_anonymous(vmf->vma))
return do_anonymous_page(vmf);
else
return do_fault(vmf);
}
... ...
}
当pte表为空,即之前没有做过映射,且是文件映射,会调用do_fault处理。
文件映射判断标准
vma_is_anonymous函数为判断匿名映射还是文件映射标准,当为true时为匿名映射,否则为文件映射:
static inline bool vma_is_anonymous(struct vm_area_struct *vma)
{
return !vma->vm_ops;
}
vma->vm_ops 为NULL 即为匿名映射,否则为文件映射。
do_fault
do_fault函数处理过程中关键函数: