On Fri, Sep 6, 2019 at 12:29 AM Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote: > > On Fri, Sep 06, 2019 at 12:13:00AM +0530, Souptick Joarder wrote: > > +++ b/mm/memory.c > > @@ -1750,13 +1750,10 @@ static vm_fault_t __vm_insert_mixed(struct vm_area_struct *vma, > > } else { > > return insert_pfn(vma, addr, pfn, pgprot, mkwrite); > > } > > - > > - if (err == -ENOMEM) > > - return VM_FAULT_OOM; > > - if (err < 0 && err != -EBUSY) > > - return VM_FAULT_SIGBUS; > > - > > - return VM_FAULT_NOPAGE; > > + if (!err || err == -EBUSY) > > + return VM_FAULT_NOPAGE; > > + else > > + return vmf_error(err); > > } > > My plan is to convert insert_page() to return a VM_FAULT error code like > insert_pfn() does. Need to finish off the vm_insert_page() conversions > first ;-) Previously we have problem while converting vm_insert_page() to return vm_fault_t. vm_insert_page() is called from different drivers. Some of them are already converted to use vm_map_pages()/ vm_map_pages_zero(). But still we left with few users. drivers/media/usb/usbvision/usbvision-video.c#L1045 mm/vmalloc.c#L2969 These 2 can be converted with something like vm_map_vmalloc_pages(). I am working on it. Will post it in sometime. drivers/android/binder_alloc.c#L259 (have objection) drivers/infiniband/hw/efa/efa_verbs.c#L1701 drivers/infiniband/hw/mlx5/main.c#L2085 (have objection as using vm_map_pages_zero() doesn't make sense) drivers/xen/gntalloc.c#L548 (have limitation) kernel/kcov.c#L297 (have objection) net/ipv4/tcp.c#L1799 net/packet/af_packet.c#L4453 But these are the places where replacing vm_insert_page() is bit difficult/ have objection. In some cases, maintainers/ reviewers will not agree to replace vm_insert_page(). In other scenario, if we change return type of vm_insert_page() to vm_fault_t, we end up with adding few lines of conversion code from vm_fault_t to errno in drivers which is not a correct way to go with. Any suggestion, how to solve this ?