+ -
当前位置:首页 → 问答吧 → 在VFS代码中常见的块设备中的数据块索引或者数据块号是逻辑块号还是物理块号

在VFS代码中常见的块设备中的数据块索引或者数据块号是逻辑块号还是物理块号

时间:2010-07-18

来源:互联网

最近看代码看晕了
在处理数据的时候经常会遇到数据块的索引或者标号
这个是逻辑的(文件系统定义的数据块)还是物理的(物理数据块)

谢谢

作者: openspace   发布时间: 2010-07-18

本帖最后由 kgn28 于 2010-07-18 19:55 编辑

回复 openspace

对于读块设备,数据块号就是逻辑块号,readpage里面的的mpage_readpage方法传入的get_block判断,如果是裸读一个块设备,那么应该是默认的一个blkdev_readpage,get_block为blkdev_get_block:
http://lxr.linux.no/linux+v2.6.34.1/fs/block_dev.c#L119

QUOTE:
119blkdev_get_block(struct inode *inode, sector_t iblock,
120                struct buffer_head *bh, int create)
121{
122        if (iblock >= max_block(I_BDEV(inode))) {
123                if (create)
124                        return -EIO;
125
126                /*
127                 * for reads, we're just trying to fill a partial page.
128                 * return a hole, they will have to call get_block again
129                 * before they can fill it, and they will get -EIO at that
130                 * time
131                 */
132                return 0;
133        }
134        bh->b_bdev = I_BDEV(inode);
135       bh->b_blocknr = iblock;
136        set_buffer_mapped(bh);
137        return 0;
138}

注意上层的块号就是逻辑块号。
而物理块号?没有这个概念吧,对于物理方面,只有扇区的概念,而逻辑块号到扇区号的转换要看块的大小和分区信息中改分区起始扇区号,进行相应的移位即可。

作者: kgn28   发布时间: 2010-07-18

VFS代码中都是逻辑块号,因为他本身就是指虚拟物理地址

作者: 0vk0   发布时间: 2010-07-18

热门下载

更多