Hi, I&#39;m learning the kernel of 0.12, and the function in inode.c:<div>####################################################################</div><div><div>static int _bmap(struct m_inode * inode,int block,int create)</div>
<div>{</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>struct buffer_head * bh;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int i;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (block&lt;0)</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>panic(&quot;_bmap: block&lt;0&quot;);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (block &gt;= 7+512+512*512)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>panic(&quot;_bmap: block&gt;big&quot;);</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>if (block&lt;7) {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if (create &amp;&amp; !inode-&gt;i_zone[block])</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>if (inode-&gt;i_zone[block]=new_block(inode-&gt;i_dev)) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                </span>inode-&gt;i_ctime=CURRENT_TIME;</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>inode-&gt;i_dirt=1;</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>return inode-&gt;i_zone[block];</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>block -= 7;</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>if (block&lt;512) {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if (create &amp;&amp; !inode-&gt;i_zone[7])</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>if (inode-&gt;i_zone[7]=new_block(inode-&gt;i_dev)) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                </span>inode-&gt;i_dirt=1;</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>inode-&gt;i_ctime=CURRENT_TIME;</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>if (!inode-&gt;i_zone[7])</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>return 0;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if (!(bh = bread(inode-&gt;i_dev,inode-&gt;i_zone[7])))</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>return 0;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>i = ((unsigned short *) (bh-&gt;b_data))[block];</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if (create &amp;&amp; !i)</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>if (i=new_block(inode-&gt;i_dev)) {</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>((unsigned short *) (bh-&gt;b_data))[block]=i;</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                </span>bh-&gt;b_dirt=1;</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>brelse(bh);</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>return i;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>block -= 512;</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>if (create &amp;&amp; !inode-&gt;i_zone[8])</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if (inode-&gt;i_zone[8]=new_block(inode-&gt;i_dev)) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>inode-&gt;i_dirt=1;</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>inode-&gt;i_ctime=CURRENT_TIME;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>if (!inode-&gt;i_zone[8])</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>return 0;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (!(bh=bread(inode-&gt;i_dev,inode-&gt;i_zone[8])))</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>return 0;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>i = ((unsigned short *)bh-&gt;b_data)[block&gt;&gt;9];</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (create &amp;&amp; !i)</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>if (i=new_block(inode-&gt;i_dev)) {</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>((unsigned short *) (bh-&gt;b_data))[block&gt;&gt;9]=i;</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>bh-&gt;b_dirt=1;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>brelse(bh);</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>if (!i)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>return 0;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (!(bh=bread(inode-&gt;i_dev,i)))</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>return 0;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>i = ((unsigned short *)bh-&gt;b_data)[block&amp;511];</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (create &amp;&amp; !i)</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>if (i=new_block(inode-&gt;i_dev)) {</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>((unsigned short *) (bh-&gt;b_data))[block&amp;511]=i;</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>bh-&gt;b_dirt=1;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>brelse(bh);</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>return i;</div><div>}</div></div><div><br></div><div>########################################################################</div><div>&quot;if (block &gt;= 7+512+512*512)&quot; because the i_zone[9].</div>
<div>But the question is why the i_zone[7] can repesent 512 , and i_zone[8] can repesent 512*512 ?</div><div><br></div><div>Thank you.</div><div><br></div><div><br></div>