<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->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("readbuf %p (%llu, %d)", 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"><<a href="mailto:ajeet.yadav.77@gmail.com">ajeet.yadav.77@gmail.com</a>></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 < 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 < 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>