]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - mm/mmap.c
Merge remote-tracking branch 'staging/staging-next'
[karo-tx-linux.git] / mm / mmap.c
index 2f2415a7a688da595a996a01d0ae0e1f0f955454..e2e9f48b06c2ad7a4fb4a11c61221a84caa5f593 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -3042,11 +3042,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--;