函数源码

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source File:mm\mmap.c Create Date:2022-07-27 16:18:47
首页 Copyright©Brick

3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
static vm_fault_t special_mapping_fault(struct vm_fault *vmf)
{
    struct vm_area_struct *vma = vmf->vma;
    pgoff_t pgoff;
    struct page **pages;
 
    if (vma->vm_ops == &legacy_special_mapping_vmops) {
        pages = vma->vm_private_data;
    } else {
        struct vm_special_mapping *sm = vma->vm_private_data;
 
        if (sm->fault)
            return sm->fault(sm, vmf->vma, vmf);
 
        pages = sm->pages;
    }
 
    for (pgoff = vmf->pgoff; pgoff && *pages; ++pages)
        pgoff--;
 
    if (*pages) {
        struct page *page = *pages;
        get_page(page);
        vmf->page = page;
        return 0;
    }
 
    return VM_FAULT_SIGBUS;
}