f2fs创建一个文件的具体过程

来源:互联网 发布:尚硅谷周阳视频linux 编辑:程序博客网 时间:2024/05/17 03:10

假设需要创建一个文件/dir/file:

f2fs_sb_info保存了根目录的inode number,假设是0,此时NAT布局如下:


由于inode number就是node number,查找第0个node的块地址,得到4,然后f2fs读SSD上第4个块的数据,得到了根目录的inode:


解析inode的信息,他的数据依次存在了120,200,300,400的块上,读入相关的块后,在逻辑上,我们可以得到根目录下数据块的多级哈希的拓扑结构,它一共有3层,第一层1个bucket,第2层2个bucket,第3层3个bucket。


假设"dir"的hash为19,f2fs先查找第一层,19 % 1 = 0,查找第0个bucket,线性遍历bucket0的bitmap,发现有置位1的entry,比较hash值,看看是否为19,若是,在比较文件名,若为dir,则返回inode number,结果找了一圈没找到;找第二层,19 % 2 = 1,按上个方法查找第二个bucket,第三层查找第三个bucket。得到dir的inode后,根据inode number查询NAT,得到dir inode的实际块地址,并读入该inode。

f2fs为file文件分配了一个inode,inode number为29,在当前的node segment追加写入新的inode,物理地址为100,


由于在node segment分配了新的块,需要修改这个segment的对应的sit_entry,包括bitmap,valiad blocks等信息;需要修改第29个nat entry,将它指向块地址100。此外,需要向父目录dir添加一个dentry,


由于修改了dir的数据块,f2fs向数据segment追加写了被修改的block,并修改SSA上该block对应的summary entry,使得summary entry的inode指向19,offset设置为3,把原来的segment 的sit项也做修改,假设追加的数据块地址为44,由于这个块是dir的第三个直接数据块,则把相关的指针做一下修改,data[3]=44,并追加写到node segment。


由于追加写了inode,还要修改nat表,使得nat[19]=104,

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 婴儿吐奶豆花状怎么办 吃母乳乳头破了怎么办 顺产后仰卧睡了怎么办 宝宝含着母乳睡怎么办 刚出生的孩子不吃母乳怎么办 月子里挤奶手痛怎么办 做完月子之后腿疼腰疼怎么办 腰疼引起的腿疼怎么办 上网上久了脑袋痛怎么办 莲花坐的脚麻怎么办 月子腿疼膝盖疼怎么办 做月子腿着凉了怎么办 出月子大腿根酸怎么办 出了月子腰酸痛怎么办 出了月子腿没劲怎么办 生完孩子后缺钙怎么办 生完孩子腿疼怎么办 生完孩子后腿疼怎么办 生完孩子肛门突出怎么办 生完孩子肋骨突出怎么办 蛙跳理蛙跳后腿疼怎么办 蛙跳两天后腿还疼怎么办 莲花菩提盘黑了怎么办 体育课蛙跳后肌肉拉伤怎么办 o型腿骨头弯了怎么办 小孩钢琴坐姿不对向后仰怎么办 小孩皮肤不好容易留疤怎么办 学游泳时站不稳怎么办 水呛到了不停打嗝怎么办 来月经前游泳了怎么办 快来完事游泳了怎么办 游泳时来月经了怎么办 经期第7天游泳了怎么办 来月经已经游了泳怎么办 月经来了要游泳怎么办 三个月宝宝趴着不会抬头怎么办 我的月经不完怎么办 游泳时怎么办能浮出水面 游泳时眼镜起雾怎么办 练瑜伽手臂变粗怎么办 孕妇喝了芬达怎么办