Btrfs关键代码解析

上传人:ss****gk 文档编号:209181553 上传时间:2021-11-09 格式:DOC 页数:5 大小:212.11KB
返回 下载 相关 举报
Btrfs关键代码解析_第1页
第1页 / 共5页
Btrfs关键代码解析_第2页
第2页 / 共5页
Btrfs关键代码解析_第3页
第3页 / 共5页
Btrfs关键代码解析_第4页
第4页 / 共5页
Btrfs关键代码解析_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《Btrfs关键代码解析》由会员分享,可在线阅读,更多相关《Btrfs关键代码解析(5页珍藏版)》请在金锄头文库上搜索。

1、第四章Btrfs关键代码解析extent treeTree of root treeextent treepomterdev tree pointerFSTreepo fsjnfo =fs_info(struct btrfs_fsjnfo),也就是 btrfs_fs_info 结构,其定义为:fs/btrfs/ctree.h802 struct btrfs_fs_info 803u8fsidBTRFS_FSID_SIZE;804u8 chunk_tree_uuidBTRFS_UUID_SIZE;805struct btrfS-root * extent root;806struct btrfS

2、-root *tree root;807struct btrfS-root *chunk root;一 ,808struct btrfsroot *dev_root;809struct btrfS-root *fs root;810struct btrfs_root *csum root;Super Blockroottrwporterchunk tre portter图 Tree of root tree超级块记荣着一个分区的整体信息,Btrfs磁盘super_block结构用 btrfs_super_block 来描述。/磁盘中的super block u8 csumBTRFS_CSUM_

3、SIZE;/* the first 4 fields must match struct btrfs_header */u8 fsidBTRFS_FSID_SIZE; /* FS specific uuid */ _Ie64 bytenr; /* this block number */_Ie64 flags;/* allowed to be different from the btrfs_header from here own down */_Ie64 magic;_Ie64 generation;_Ie64 root;#root树的根节点位置_Ie64 chunk_root; #chu

4、nk 树的根节点位置_Ie64 log_root; #log数的根节点位置FS Tree管理文件相关的元数据,如inode, dir等;Chunk tree管理设备, 每一个磁盘设备都在Chunk Tree中有一个item; Extent Tree管理磁盘空间分配, btrfs每分配一段磁盘空间,便将该磁盘空间的信息插入到Extent tree。奔询Extent Tree将得到空闲的磁盘空间信息;checksum Tree保存数掘块的校验和;Tree of tree root保存很多BTree的根节点。比如用户每建立一个快照,btrfs便会创建 一个 FS Tree。4.2 Btrfs基本结构

5、btrfs使用b+树数据结构,树的内部节点和页节点使用3种数据类 型:btrfs_header, btrfs_disk_key, btrfsjtem.每个节点都是一个 extent,内部节点 和页节点大小可以不一样.每个节点都以btrfs_header开头,内部节点就是 key,value数组,key是btrfs_disk_key, value就是指针,逻辑磁盘位置.页节点同样括相通的key,value,不过位置是key 块,value 块.而且key是btrfsjtem。ul csumulfsidlt4ul chunk trwt uud_lts_magic = BTRFS_SUPER_MAG

6、IC;2. 填充 superblock 的操作函数,比如:sb-s_op = &btrf s_super_ops;3. 用函数opervctree创建树形结构,然后把树根填入超级块的文件系统私有信 息中,如下:tree_root = open_ctree(sb, f s_devices, (char *)data);sb-s fs inf o = tree root;4. 用 btrf s_iget 拿到 inode, d_alloc_root 拿到 dentry 作为5. 构造出根目录数据结构,并填入超级块。inode = btrf s_iget(sb, &key, tree_root-f

7、snf o-f s_root, NULL);root_dentry = d_alloc_root(inode);sb-s_root = root_dentry;open_ctree是其中最复杂的函数,利用磁盘上超级块中存储的信息和我们前 面介绍的数据结构,建立了一整套btrfs使用的树形数据结构填充在超级块中, 如图:图btrfs文件创建过程到此为止,我们构建了一个btrfs的超级块,其中包含:1. btrf s所要使用的一整套树形结构。2. btrf s超级块中的操作函数。3. 创建了一个根目录。这样操作系统内核想要使用和控制btrfs,通过btrfs的超级块就可以了。通 过这个函数的运行流程,可以看出Btrfs文件系统创建文件的一个流程

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号