On Tue, Jul 3, 2018 at 5:41 PM, Matthew Wilcox <wi...@infradead.org> wrote: > On Tue, Jul 03, 2018 at 05:18:30PM +0530, Souptick Joarder wrote: >> On Tue, Jul 3, 2018 at 4:47 PM, Matthew Wilcox <wi...@infradead.org> wrote: >> > On Mon, Jun 25, 2018 at 11:27:37PM +0530, Souptick Joarder wrote: >> >> Use new return type vm_fault_t for both fault handler >> >> vdso_fault() and vvar_fault(). Previously vm_insert_pfn() >> >> returns err which has to mapped into VM_FAULT_* type. >> >> The new function vmf_insert_pfn() will replace this >> >> inefficiency by returning correct VM_FAULT_* type. >> > >> >> @@ -105,10 +105,10 @@ static int vvar_fault(const struct >> >> vm_special_mapping *sm, >> >> * the page past the end of the vvar mapping. >> >> */ >> >> if (sym_offset == 0) >> >> - return VM_FAULT_SIGBUS; >> >> + return ret; >> >> >> >> if (sym_offset == image->sym_vvar_page) { >> >> - ret = vm_insert_pfn(vma, vmf->address, >> >> + ret = vmf_insert_pfn(vma, vmf->address, >> >> __pa_symbol(&__vvar_page) >> >> >> PAGE_SHIFT); >> >> } else if (sym_offset == image->sym_pvclock_page) { >> >> struct pvclock_vsyscall_time_info *pvti = >> >> @@ -124,14 +124,11 @@ static int vvar_fault(const struct >> >> vm_special_mapping *sm, >> > >> > Haven't you missed converting vm_insert_pfn_prot() at line 117? >> > Did you test-compile this? >> > >> >> I left it intentionally in this patch. When we will be replacing >> vm_insert_foo() with new API vmf_insert_foo(), vm_insert_pfn_prot >> need to be changed to return vm_fault_t type. >> >> I will change the return type of vm_insert_pfn_prot() in that patch. > > What?! That's just broken. vm_insert_pfn_prot returns an errno, so > this patch introduces a bug where sometimes 'ret' contains a vm_fault_t > and sometimes contains an errno. That's exactly the kind of thing this > patch series is supposed to be *preventing*, not introducing! >
It was my wrong understanding which create this issue. Sorry about it. I though to change the return type of vm_insert_pfn_prot() to vm_fault_t type directly along with the caller of vm_insert_pfn_prot(), but in a separate patch. But introducing vmf_insert_pfn_prot() is much simpler approach here. Sorry for making things complex.