此段代码是Linux0.11版内核中Linux/fs/inode.c文件中_bmap函数代码
首先说一下此函数的主要功能:
_bmap()函数用于文件数据块映射到盘块的处理操作。所带的参数inode 是文件的i 节点指针,block
是文件中的数据块号,create 是创建标志,表示在对应文件数据块不存在的情况下,是否需要在盘上建
立对应的盘块。该函数的返回值是文件数据块对应在设备上的逻辑块号(盘块号)。当create=0 时,该函
数就是bmap()函数。当create=1 时,它就是create_block()函数。
正规文件中的数据是放在磁盘块的数据区中的,而一个文件名则通过对应的i 节点与这些数据磁盘
块相联系,这些盘块的号码就存放在i 节点的逻辑块数组中。_bmap()函数主要是对i 节点的逻辑块(区
块)数组i_zone[]进行处理,并根据i_zone[]中所设置的逻辑块号(盘块号)来设置逻辑块位图的占用情
况。正如前面所述,i_zone[0]至i_zone[6]用于存放对应文件的直接逻辑块号;i_zone[7]用于存放一次间接逻辑块号;
而i_zone[8]用于存放二次间接逻辑块号。当文件较
小时(小于7K),就可以将文件所使用的盘块号直接存放在i 节点的7 个直接块项中;当文件稍大一些
时(不超过7K+512K),需要用到一次间接块项i_zone[7];当文件更大时,就需要用到二次间接块项
i_zone[8]了。因此,比较文件小时,linux 寻址盘块的速度就比较快一些。