<div>I did not receive any response / review comment on solution patch I sent.<br></div>
<div><span lang="EN">
<p>diff -Nurp xfsprogs/repair/dir2.c xfsprogs-dirty/repair/dir2.c</p>
<p>--- xfsprogs/repair/dir2.c 2010-07-16 13:07:09.000000000 +0900</p>
<p>+++ xfsprogs-dirty/repair/dir2.c 2011-01-28 18:49:21.000000000 +0900</p>
<p>@@ -110,9 +110,10 @@ da_read_buf(</p>
<p>bplist[i] = libxfs_readbuf(mp-&gt;m_dev,</p>
<p>XFS_FSB_TO_DADDR(mp, bmp[i].startblock),</p>
<p>XFS_FSB_TO_BB(mp, bmp[i].blockcount), 0);</p>
<p>- if (!bplist[i])</p>
<p>+ if (!bplist[i]){</p>
<p>+ nex = i;</p>
<p>goto failed;</p>
<p>-</p>
<p>+ }</p>
<p>pftrace(&quot;readbuf %p (%llu, %d)&quot;, bplist[i],</p>
<p>(long long)XFS_BUF_ADDR(bplist[i]),</p>
<p>XFS_BUF_COUNT(bplist[i]));</p></span></div>
<div class="gmail_quote">On Fri, Jan 28, 2011 at 8:13 PM, Ajeet Yadav <span dir="ltr">&lt;<a href="mailto:ajeet.yadav.77@gmail.com">ajeet.yadav.77@gmail.com</a>&gt;</span> wrote:<br>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">
<div><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt">libxfs_putbuf() is called with bp = NULL, resulting in pagefault in libpthread.</span></font></div>
<div><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt"></span></font> </div>
<div><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt">Function da_read_buf() allocate array of xfs_buf_t *</span></font></div>
<p><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt">   <strong> xfs_buf_t       **bplist;</strong></span></font></p>
<p><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt"><strong>    bplist = calloc(nex, sizeof(*bplist));</strong></span></font></p>
<p><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt">Read and fill it using  </span></font></p>
<p><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt"><strong>for (i = 0; i &lt; nex; i++) {<br>    bplist[i] = libxfs_readbuf()</strong></span></font></p>
<p><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt"><strong>    if (!bplist[i]){<br>        goto failed;<br>    }  </strong></span></font></p>
<p><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt"><strong>}</strong></span></font></p>
<p><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt"><strong>failed:<br>        for (i = 0; i &lt; nex; i++)<br>                libxfs_putbuf(bplist[i]);</strong></span></font></p>
<p><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt">Now assume nex = 10,</span></font></p>
<p><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt">1. Will create bplist for 10 array elements.</span></font></p>
<p><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt">3. Reading from disk 0,1, 2, 3</span></font></p>
<p><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt">4. When reading from disk 4, USB is removed</span></font></p>
<p><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt">5. libxfs_readbuf() will at fail, pblist[4] = NULL, goto failed.</span></font></p>
<p><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt">6. Since only 4 buffers were read successfully, so only 4 are in lock state.</span></font></p>
<p><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt">7.  Error handling will unlock buffer from 1-10</span></font></p>
<p><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt">8. Buffer 0-3 were read successfully, hence will have valid pdlist[i]</span></font></p>
<p><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt">9. Access pblist[4] == NULL, therefore unlocking will set bp == NULL in libxfs_putbuf(bp);</span></font></p>
<div><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt">10. Page fault in libpthread</span></font></div>
<div><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt"></span></font> </div>
<div> </div>
<div><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt">Solution patch attached with mail</span></font></div>
<div><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt"></span></font> </div>
<div><font face="Bookman Old Style"><span style="FONT-FAMILY: Arial; FONT-SIZE: 9pt"></span></font> </div></blockquote></div><br>