<br>
<div><span class="gmail_quote">On 8/22/08, <b class="gmail_sendername">Joel Sherrill</b> <<a href="mailto:joel.sherrill@oarcorp.com">joel.sherrill@oarcorp.com</a>> wrote:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<div><span class="e" id="q_11beaa6e63546703_0">
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">If "iop->handlers->open_h" returns an error, "open" will call "rtems_set_errno_and_return_minus_one( rc )" which sets "errno" to "rc", where "rc" is the return value of "open_h".<br>
However, the "open_h" handler implemented by each filesystem usually already sets "errno" and returns only -1 at errors, so "open" will override "errno" with -1 which is not a valid errno.<br>
<br></blockquote></span></div>I think you are correct.  And my scan of the open implementations<br>in cpukit/libfs indicates a possible mix in returns. <br>I think open() should assume -1 returned and errno set.  This<br>
makes it up to the specific handlers to do the right thing.<br><br>Do you have a patch?</blockquote>
<div> </div>
<div><font color="#ff6666">That is the solution comes to my mind. If you need a patch I can make it next week.</font></div>
<div> </div>
<div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">memfile_close calls memfile_check_rmnod to delete the file node with a<br>zero link count when the last user closes the file.<br>
However, in memfile_check_rmnod "rtems_libio_is_file_open" is checked, which it will always be TRUE because the LIBIO_FLAGS_OPEN flag bit has not been cleared yet. Hence, the file node will never be deleted, while it can no more be accessed in the file system.</blockquote>
</blockquote>
<div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<div> </div></blockquote>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<div>
<div>Can you provide a simple test case and let me analyze it?</div></div></blockquote>
<div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<div> </div>
<div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">I also wonder why device_close and imfs_dir_close do not do similar<br>rmnod checks as memfile_close. </blockquote>
</div></blockquote>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"><br>What do you think of that?  Again I think it will take a test<br>case to verify and fix.</blockquote>
<div> </div>
<div>I found this problem because I want to delete anonymous pipe file at close (BTW, I give it up because can not find a clean interface to let the pipe module know whether a pipe is anonymous). I copied some IMFS code but never succeed.</div>

<div>I think I can provide some test code next week.</div>
<div> </div>
<div>Regards,</div>
<div>Jianjun</div></div></div></div></div>