X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=mm%2Fmmap.c;h=f717453b1a57c721a66be436e9ef270a156bba8d;hb=f872f5400cc01373d8e29d9c7a5296ccfaf4ccf3;hp=2ce04a649f6b4977e54b76a29be9d5bac5e71dab;hpb=c09c9dd2e9c732658c744a802101d5c34fedde22;p=mirror_ubuntu-artful-kernel.git diff --git a/mm/mmap.c b/mm/mmap.c index 2ce04a649f6b..f717453b1a57 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -3030,11 +3030,16 @@ static int special_mapping_fault(struct vm_area_struct *vma, pgoff_t pgoff; struct page **pages; - if (vma->vm_ops == &legacy_special_mapping_vmops) + if (vma->vm_ops == &legacy_special_mapping_vmops) { pages = vma->vm_private_data; - else - pages = ((struct vm_special_mapping *)vma->vm_private_data)-> - pages; + } else { + struct vm_special_mapping *sm = vma->vm_private_data; + + if (sm->fault) + return sm->fault(sm, vma, vmf); + + pages = sm->pages; + } for (pgoff = vmf->pgoff; pgoff && *pages; ++pages) pgoff--;