On Tue, 28 Aug 2018, Matthew Wilcox wrote:

> cramfs is the only remaining user of vm_insert_mixed; convert it.
> 
> Signed-off-by: Matthew Wilcox <wi...@infradead.org>
> ---
>  fs/cramfs/inode.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/cramfs/inode.c b/fs/cramfs/inode.c
> index f408994fc632..b72449c19cd1 100644
> --- a/fs/cramfs/inode.c
> +++ b/fs/cramfs/inode.c
> @@ -417,10 +417,15 @@ static int cramfs_physmem_mmap(struct file *file, 
> struct vm_area_struct *vma)
>                */
>               int i;
>               vma->vm_flags |= VM_MIXEDMAP;
> -             for (i = 0; i < pages && !ret; i++) {
> +             for (i = 0; i < pages; i++) {
> +                     vm_fault_t vmf;
>                       unsigned long off = i * PAGE_SIZE;
>                       pfn_t pfn = phys_to_pfn_t(address + off, PFN_DEV);
> -                     ret = vm_insert_mixed(vma, vma->vm_start + off, pfn);
> +                     vmf = vmf_insert_mixed(vma, vma->vm_start + off, pfn);
> +                     if (vmf & VM_FAULT_ERROR) {
> +                             pages = i;
> +                             break;
> +                     }

I'd suggest this to properly deal with errers instead:

diff --git a/fs/cramfs/inode.c b/fs/cramfs/inode.c
index f408994fc6..0c35e62f10 100644
--- a/fs/cramfs/inode.c
+++ b/fs/cramfs/inode.c
@@ -418,9 +418,12 @@ static int cramfs_physmem_mmap(struct file *file, struct 
vm_area_struct *vma)
                int i;
                vma->vm_flags |= VM_MIXEDMAP;
                for (i = 0; i < pages && !ret; i++) {
+                       vm_fault_t vmf;
                        unsigned long off = i * PAGE_SIZE;
                        pfn_t pfn = phys_to_pfn_t(address + off, PFN_DEV);
-                       ret = vm_insert_mixed(vma, vma->vm_start + off, pfn);
+                       vmf = vmf_insert_mixed(vma, vma->vm_start + off, pfn);
+                       if (vmf & VM_FAULT_ERROR)
+                               ret = vm_fault_to_errno(vmf, 0);
                }
        }
 

Nicolas

Reply via email to