<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
</head>
<body>
Neil,<br>
<br>
If you cant find any, I imagine they dont exist, at least in your branch, given that difference you cited.<br>
<br>
The particular case we had is here:<br>
https://jira.whamcloud.com/browse/LU-11403<br>
<br>
Which is when the file exists but has no striping info, and hence no data.<br>
<br>
- Patrick
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> NeilBrown &lt;neilb@suse.com&gt;<br>
<b>Sent:</b> Tuesday, May 21, 2019 10:54:37 PM<br>
<b>To:</b> James Simmons; Andreas Dilger; Oleg Drokin<br>
<b>Cc:</b> Lustre Development List; Patrick Farrell; James Simmons<br>
<b>Subject:</b> Re: [PATCH v2 01/29] lustre: llite: ll_fault fixes</font>
<div>&nbsp;</div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">On Mon, May 20 2019, James Simmons wrote:<br>
<br>
&gt; From: Patrick Farrell &lt;pfarrell@whamcloud.com&gt;<br>
&gt;<br>
&gt; Various error conditions in the fault path can cause us to<br>
&gt; not return a page in vm_fault.&nbsp; Check if it's present<br>
&gt; before accessing it.<br>
<br>
I cannot find any error conditions that would leave -&gt;page NULL,<br>
but that wouldn't set one of<br>
&nbsp; VM_FAULT_RETRY | VM_FAULT_ERROR | VM_FAULT_LOCKED<br>
in 'result'.<br>
<br>
Can someone provide an example?<br>
<br>
(I have seen crashes with vmf-&gt;page being NULL, but they were caused<br>
&nbsp;by VM_FAULT_RETRY being #defined to 0 as lustre/llite/llite_internal.h<br>
&nbsp;still does on OpenSFS lustre)<br>
<br>
&gt;<br>
&gt; Additionally, it's not valid to return VM_FAULT_NOPAGE for<br>
&gt; page faults.&nbsp; The correct return when accessing a page that<br>
&gt; does not exist is VM_FAULT_SIGBUS.&nbsp; Correcting this avoids<br>
&gt; looping infinitely in the testcase.<br>
<br>
I agree with that.&nbsp; VM_FAULT_NOPAGE is valid for page_mkwrite - and<br>
ll_page_mkwrite() has separate code to choose VM_FAULT_NOPAGE.<br>
So the change to to_fault_error() is valid.<br>
<br>
NeilBrown<br>
<br>
<br>
&gt;<br>
&gt; Signed-off-by: Patrick Farrell &lt;pfarrell@whamcloud.com&gt;<br>
&gt; WC-bug-id: <a href="https://jira.whamcloud.com/browse/LU-11403">https://jira.whamcloud.com/browse/LU-11403</a><br>
&gt; Reviewed-on: <a href="https://review.whamcloud.com/34247">https://review.whamcloud.com/34247</a><br>
&gt; Reviewed-by: Alex Zhuravlev &lt;bzzz@whamcloud.com&gt;<br>
&gt; Reviewed-by: Alexander Zarochentsev &lt;c17826@cray.com&gt;<br>
&gt; Reviewed-by: Oleg Drokin &lt;green@whamcloud.com&gt;<br>
&gt; Signed-off-by: James Simmons &lt;jsimmons@infradead.org&gt;<br>
&gt; ---<br>
&gt;&nbsp; fs/lustre/llite/llite_mmap.c | 6 &#43;&#43;----<br>
&gt;&nbsp; 1 file changed, 2 insertions(&#43;), 4 deletions(-)<br>
&gt;<br>
&gt; diff --git a/fs/lustre/llite/llite_mmap.c b/fs/lustre/llite/llite_mmap.c<br>
&gt; index 1865db1..c8e57ad 100644<br>
&gt; --- a/fs/lustre/llite/llite_mmap.c<br>
&gt; &#43;&#43;&#43; b/fs/lustre/llite/llite_mmap.c<br>
&gt; @@ -238,9 &#43;238,6 @@ static inline vm_fault_t to_fault_error(int result)<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 0:<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = VM_FAULT_LOCKED;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp; case -EFAULT:<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = VM_FAULT_NOPAGE;<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case -ENOMEM:<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = VM_FAULT_OOM;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>
&gt; @@ -366,7 &#43;363,8 @@ static vm_fault_t ll_fault(struct vm_fault *vmf)<br>
&gt;&nbsp; <br>
&gt;&nbsp; restart:<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = __ll_fault(vmf-&gt;vma, vmf);<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp; if (!(result &amp; (VM_FAULT_RETRY | VM_FAULT_ERROR | VM_FAULT_LOCKED))) {<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; if (vmf-&gt;page &amp;&amp;<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; !(result &amp; (VM_FAULT_RETRY | VM_FAULT_ERROR | VM_FAULT_LOCKED))) {<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct page *vmpage = vmf-&gt;page;<br>
&gt;&nbsp; <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* check if this page has been truncated */<br>
&gt; -- <br>
&gt; 1.8.3.1<br>
</div>
</span></font></div>
</body>
</html>