<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Feb 26, 2014 at 11:16 AM, Rohan Puri <span dir="ltr">&lt;<a href="mailto:rohan.puri15@gmail.com" target="_blank">rohan.puri15@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Wed, Feb 26, 2014 at 1:08 AM, Abhishek Dave &lt;<a href="mailto:cfsxdave@gmail.com">cfsxdave@gmail.com</a>&gt; wrote:<br>


&gt; Hello All,<br>
&gt;<br>
&gt; Can some one please help me to understand meaning of below code<br>
&gt;<br>
&gt; &lt;snip&gt;<br>
&gt;<br>
&gt;         if (!list_empty(&amp;sb-&gt;s_inodes)) {<br>
&gt; 406                         printk(&quot;VFS: Busy inodes after unmount of %s. &quot;<br>
&gt; 407                            &quot;Self-destruct in 5 seconds.  Have a nice<br>
&gt; day...\n&quot;,<br>
&gt; 408                            sb-&gt;s_id);<br>
&gt; 409                 }<br>
&gt;<br>
&gt; &lt;/snip&gt;<br>
&gt;<br>
&gt; Are we doing here?<br>
&gt;<br>
&gt; Thanks,<br>
&gt;<br>
&gt; Dave<br>
&gt;<br>
&gt;<br>
&gt;<br>
</div></div>&gt; _______________________________________________<br>
&gt; Kernelnewbies mailing list<br>
&gt; <a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
&gt; <a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
&gt;<br>
<br>
Hi Abhishek,<br>
<br>
This code gets called during unmounting of a filesystem. During<br>
unmounting, if there are busy inodes present in the list contained in<br>
superblock (s_inodes field), just log the error through the printk &amp;<br>
go forward through the unmounting process.<br>
<br>
- Regards,<br>
     Rohan<br>
<br>
_______________________________________________<br>
Kernelnewbies mailing list<br>
<a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
<a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
</blockquote></div><br><br clear="all"></div><div class="gmail_extra">Well, this code is called when unmounting the file system.<br><br></div><div class="gmail_extra">When a file system is registered it will register two important functions <br>

<br>1. the .mount and the<br>2 .kill_super function. See the struct file_system_type.<br><br></div><div class="gmail_extra">File systems generally register the kill_block_super() function to the kill_super pointer.<br><br>

</div><div class="gmail_extra">When kill_block_super() is called it will call generic_shutdown_super() whose task is to <br><br></div><div class="gmail_extra">1. remove the dentries related to the file system from the hash and other lists<br>

</div><div class="gmail_extra">2. sync the file system (dirty buffers, inodes and data)<br></div><div class="gmail_extra">3. evict the inodes from the cache. -- see function evict_inodes()<br></div><div class="gmail_extra">

    This function goes into the super block&#39;s list of inodes and collects the inodes which need to be removed from the cache and calls the dispose_list() function<br><br></div><div class="gmail_extra">4. The dispose list is the workhorse which will iterate through each inode in the list and call the registered .evict_inode function and destroy_inode function registered in the super_block.<br>

<br></div><div class="gmail_extra">After all this is the sb-&gt;s_inodes list has elements/inodes then there is something wrong.<br><br></div><div class="gmail_extra">It just pukes error and completes the umount operation. Generally the code will not get into this if you have not implemented your own &quot;.destroy_inode&quot; or &quot;.evict_inode&quot; function.<br>

<br></div><div class="gmail_extra">HTH<br></div><div class="gmail_extra"><br></div><div class="gmail_extra">   <br></div><div class="gmail_extra"><br><br>-- <br>Regards,<br>Rishi Agrawal<br>
</div></div>