Hi, I'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<0)</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>panic("_bmap: block<0");</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (block >= 7+512+512*512)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>panic("_bmap: block>big");</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>if (block<7) {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if (create && !inode->i_zone[block])</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>if (inode->i_zone[block]=new_block(inode->i_dev)) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                </span>inode->i_ctime=CURRENT_TIME;</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>inode->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->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<512) {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if (create && !inode->i_zone[7])</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>if (inode->i_zone[7]=new_block(inode->i_dev)) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                </span>inode->i_dirt=1;</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>inode->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->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->i_dev,inode->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->b_data))[block];</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if (create && !i)</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>if (i=new_block(inode->i_dev)) {</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>((unsigned short *) (bh->b_data))[block]=i;</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                </span>bh->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 && !inode->i_zone[8])</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if (inode->i_zone[8]=new_block(inode->i_dev)) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>inode->i_dirt=1;</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>inode->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->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->i_dev,inode->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->b_data)[block>>9];</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (create && !i)</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>if (i=new_block(inode->i_dev)) {</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>((unsigned short *) (bh->b_data))[block>>9]=i;</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>bh->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->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->b_data)[block&511];</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (create && !i)</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>if (i=new_block(inode->i_dev)) {</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>((unsigned short *) (bh->b_data))[block&511]=i;</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>bh->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>"if (block >= 7+512+512*512)" 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>