<p dir="ltr"></p>
<p dir="ltr">On 12-Jun-2018 2:21 AM, &quot;Greg KH&quot; &lt;<a href="mailto:gregkh@linuxfoundation.org">gregkh@linuxfoundation.org</a>&gt; wrote:<br>
&gt;<br>
&gt; On Tue, Jun 12, 2018 at 02:00:47AM +0530, Souptick Joarder wrote:<br>
&gt; &gt; On Mon, May 21, 2018 at 11:39 PM, Souptick Joarder &lt;<a href="mailto:jrdr.linux@gmail.com">jrdr.linux@gmail.com</a>&gt; wrote:<br>
&gt; &gt; &gt; Use new return type vm_fault_t for fault handler. For<br>
&gt; &gt; &gt; now, this is just documenting that the function returns<br>
&gt; &gt; &gt; a VM_FAULT value rather than an errno. Once all instances<br>
&gt; &gt; &gt; are converted, vm_fault_t will become a distinct type.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Ref-&gt; commit 1c8f422059ae (&quot;mm: change return type to<br>
&gt; &gt; &gt; vm_fault_t&quot;) was added in 4.17-rc1 to introduce the new<br>
&gt; &gt; &gt; typedef vm_fault_t. Currently we are making change to all<br>
&gt; &gt; &gt; drivers to return vm_fault_t for page fault handlers. As<br>
&gt; &gt; &gt; part of that lustre driver is also getting changed to<br>
&gt; &gt; &gt; return vm_fault_t type.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Signed-off-by: Souptick Joarder &lt;<a href="mailto:jrdr.linux@gmail.com">jrdr.linux@gmail.com</a>&gt;<br>
&gt; &gt; &gt; ---<br>
&gt; &gt; &gt; v2: updated the change log<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; v3: updated the change log<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;  drivers/staging/lustre/lustre/llite/llite_mmap.c | 35 ++++++++++++------------<br>
&gt; &gt; &gt;  1 file changed, 18 insertions(+), 17 deletions(-)<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; diff --git a/drivers/staging/lustre/lustre/llite/llite_mmap.c b/drivers/staging/lustre/lustre/llite/llite_mmap.c<br>
&gt; &gt; &gt; index c0533bd..5b8fd10 100644<br>
&gt; &gt; &gt; --- a/drivers/staging/lustre/lustre/llite/llite_mmap.c<br>
&gt; &gt; &gt; +++ b/drivers/staging/lustre/lustre/llite/llite_mmap.c<br>
&gt; &gt; &gt; @@ -231,7 +231,7 @@ static int ll_page_mkwrite0(struct vm_area_struct *vma, struct page *vmpage,<br>
&gt; &gt; &gt;         return result;<br>
&gt; &gt; &gt;  }<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; -static inline int to_fault_error(int result)<br>
&gt; &gt; &gt; +static inline vm_fault_t to_fault_error(int result)<br>
&gt; &gt; &gt;  {<br>
&gt; &gt; &gt;         switch (result) {<br>
&gt; &gt; &gt;         case 0:<br>
&gt; &gt; &gt; @@ -261,7 +261,7 @@ static inline int to_fault_error(int result)<br>
&gt; &gt; &gt;   * \retval VM_FAULT_ERROR on general error<br>
&gt; &gt; &gt;   * \retval NOPAGE_OOM not have memory for allocate new page<br>
&gt; &gt; &gt;   */<br>
&gt; &gt; &gt; -static int ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)<br>
&gt; &gt; &gt; +static vm_fault_t ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)<br>
&gt; &gt; &gt;  {<br>
&gt; &gt; &gt;         struct lu_env      *env;<br>
&gt; &gt; &gt;         struct cl_io        *io;<br>
&gt; &gt; &gt; @@ -269,16 +269,16 @@ static int ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)<br>
&gt; &gt; &gt;         struct page          *vmpage;<br>
&gt; &gt; &gt;         unsigned long       ra_flags;<br>
&gt; &gt; &gt;         int                   result = 0;<br>
&gt; &gt; &gt; -       int                   fault_ret = 0;<br>
&gt; &gt; &gt; +       vm_fault_t              fault_ret = 0;<br>
&gt; &gt; &gt;         u16 refcheck;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;         env = cl_env_get(&amp;refcheck);<br>
&gt; &gt; &gt;         if (IS_ERR(env))<br>
&gt; &gt; &gt; -               return PTR_ERR(env);<br>
&gt; &gt; &gt; +               return VM_FAULT_ERROR;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;         io = ll_fault_io_init(env, vma, vmf-&gt;pgoff, &amp;ra_flags);<br>
&gt; &gt; &gt;         if (IS_ERR(io)) {<br>
&gt; &gt; &gt; -               result = to_fault_error(PTR_ERR(io));<br>
&gt; &gt; &gt; +               fault_ret = to_fault_error(PTR_ERR(io));<br>
&gt; &gt; &gt;                 goto out;<br>
&gt; &gt; &gt;         }<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; @@ -319,15 +319,15 @@ static int ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)<br>
&gt; &gt; &gt;         if (result != 0 &amp;&amp; !(fault_ret &amp; VM_FAULT_RETRY))<br>
&gt; &gt; &gt;                 fault_ret |= to_fault_error(result);<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; -       CDEBUG(D_MMAP, &quot;%s fault %d/%d\n&quot;, current-&gt;comm, fault_ret, result);<br>
&gt; &gt; &gt; +       CDEBUG(D_MMAP, &quot;%s fault %x/%d\n&quot;, current-&gt;comm, fault_ret, result);<br>
&gt; &gt; &gt;         return fault_ret;<br>
&gt; &gt; &gt;  }<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; -static int ll_fault(struct vm_fault *vmf)<br>
&gt; &gt; &gt; +static vm_fault_t ll_fault(struct vm_fault *vmf)<br>
&gt; &gt; &gt;  {<br>
&gt; &gt; &gt;         int count = 0;<br>
&gt; &gt; &gt;         bool printed = false;<br>
&gt; &gt; &gt; -       int result;<br>
&gt; &gt; &gt; +       vm_fault_t result;<br>
&gt; &gt; &gt;         sigset_t set;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;         /* Only SIGKILL and SIGTERM are allowed for fault/nopage/mkwrite<br>
&gt; &gt; &gt; @@ -364,18 +364,19 @@ static int ll_fault(struct vm_fault *vmf)<br>
&gt; &gt; &gt;         return result;<br>
&gt; &gt; &gt;  }<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; -static int ll_page_mkwrite(struct vm_fault *vmf)<br>
&gt; &gt; &gt; +static vm_fault_t ll_page_mkwrite(struct vm_fault *vmf)<br>
&gt; &gt; &gt;  {<br>
&gt; &gt; &gt;         struct vm_area_struct *vma = vmf-&gt;vma;<br>
&gt; &gt; &gt;         int count = 0;<br>
&gt; &gt; &gt;         bool printed = false;<br>
&gt; &gt; &gt;         bool retry;<br>
&gt; &gt; &gt; -       int result;<br>
&gt; &gt; &gt; +       int err;<br>
&gt; &gt; &gt; +       vm_fault_t ret;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;         file_update_time(vma-&gt;vm_file);<br>
&gt; &gt; &gt;         do {<br>
&gt; &gt; &gt;                 retry = false;<br>
&gt; &gt; &gt; -               result = ll_page_mkwrite0(vma, vmf-&gt;page, &amp;retry);<br>
&gt; &gt; &gt; +               err = ll_page_mkwrite0(vma, vmf-&gt;page, &amp;retry);<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;                 if (!printed &amp;&amp; ++count &gt; 16) {<br>
&gt; &gt; &gt;                         const struct dentry *de = vma-&gt;vm_file-&gt;f_path.dentry;<br>
&gt; &gt; &gt; @@ -387,25 +388,25 @@ static int ll_page_mkwrite(struct vm_fault *vmf)<br>
&gt; &gt; &gt;                 }<br>
&gt; &gt; &gt;         } while (retry);<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; -       switch (result) {<br>
&gt; &gt; &gt; +       switch (err) {<br>
&gt; &gt; &gt;         case 0:<br>
&gt; &gt; &gt;                 LASSERT(PageLocked(vmf-&gt;page));<br>
&gt; &gt; &gt; -               result = VM_FAULT_LOCKED;<br>
&gt; &gt; &gt; +               ret = VM_FAULT_LOCKED;<br>
&gt; &gt; &gt;                 break;<br>
&gt; &gt; &gt;         case -ENODATA:<br>
&gt; &gt; &gt;         case -EAGAIN:<br>
&gt; &gt; &gt;         case -EFAULT:<br>
&gt; &gt; &gt; -               result = VM_FAULT_NOPAGE;<br>
&gt; &gt; &gt; +               ret = VM_FAULT_NOPAGE;<br>
&gt; &gt; &gt;                 break;<br>
&gt; &gt; &gt;         case -ENOMEM:<br>
&gt; &gt; &gt; -               result = VM_FAULT_OOM;<br>
&gt; &gt; &gt; +               ret = VM_FAULT_OOM;<br>
&gt; &gt; &gt;                 break;<br>
&gt; &gt; &gt;         default:<br>
&gt; &gt; &gt; -               result = VM_FAULT_SIGBUS;<br>
&gt; &gt; &gt; +               ret = VM_FAULT_SIGBUS;<br>
&gt; &gt; &gt;                 break;<br>
&gt; &gt; &gt;         }<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; -       return result;<br>
&gt; &gt; &gt; +       return ret;<br>
&gt; &gt; &gt;  }<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;  /**<br>
&gt; &gt; &gt; --<br>
&gt; &gt; &gt; 1.9.1<br>
&gt; &gt; &gt;<br>
&gt; &gt; <br>
&gt; &gt; If no further comment, we would like to get this patch in 4.18-rc-X.<br>
&gt;<br>
&gt; Why?  Is it a regression fix?  That&#39;s all that is allowed after -rc1.</p>
<p dir="ltr">No, this is not regression fix. We need to get this into 4.18-rc-1.  But mostly it can&#39;t make into linus tree in rc-1 :)<br>
&gt;<br>
&gt; And have you tried applying it to Linus&#39;s current tree?  :)</p>
<p dir="ltr">Last tested on 4.17-rc-6 and it worked fine. Let me verify in current tree.<br></p>
<p dir="ltr">&gt;<br>
&gt; thanks,<br>
&gt;<br>
&gt; greg k-h<br></p>