当前位置:
首页 >
f2fs学习笔记 - 6. f2fs初始化流程
发布时间:2023/12/8
45
豆豆
生活随笔
收集整理的这篇文章主要介绍了
f2fs学习笔记 - 6. f2fs初始化流程
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
1.前言
初始流程主要包含f2fs文件系统初始化,以及f2fs文件系统mount
2. init_f2fs_fs
创建f2fs_inode_cache slab描述符
创建nat_entry,free_nid的slab描述符
创建f2fs_gc_inodes的 slab描述符
创建f2fs_orphan_entry,f2fs_dirty_dir_entry的slab描述符
注册f2fs文件系统
3. f2fs_fill_super
f2fs_mount|--mount_bdev|--blkdev_get_by_path|--sget|--f2fs_fill_superf2fs_fill_super主要包含如下几个步骤:
(1)构建segment manager
构建main area info, sit info, cp info, ssa info
为main area构建free segment信息
为main area构建current segment信息,包含6个current segment
为main area创建sit entries
(2)构建node manager
(3)构建gc manager
7.如果是非正常卸载!(sbi->ckpt->ckpt_flags & CP_UMOUNT_FLAG),则需要recover_fsync_data执行磁盘恢复
8.执行start_gc_thread
3.1 从磁盘读取raw super block
为f2fs_sb_info分配空间
block大小设置为4096
读取磁盘上的super_block
(1)active_logs
(2) 设置mount参数为EXT2_MOUNT_BG_GC
(3)parse_options:解析 mount 参数
(4) 初始化sb->s_op = &f2fs_sops
检查super block的参数
获取一个inode给meta inode
(1)iget_locked(sb, ino)获取一个inode
(2) inode->i_mapping->a_ops = &f2fs_meta_aops
通过inode的针对不同的inode类型,给不同的inode->i_mapping->a_ops初始化。
主要分为:node, meta, regular, dir, slink, char
meta data则被初始化为f2fs_meta_aops
(3)mapping_set_gfp_mask(inode->i_mapping, GFP_F2FS_ZERO)
获取cp
检测cp
sb_set_blocksize
INIT_LIST_HEAD(&sbi->orphan_inode_list);
sbi->n_orphans = 0
3.2 build_segment_manager(sbi)
- 初始化segment manager info
sm_info->seg0_blkaddr:cp区域的第0个block的地址
sm_info->main_blkaddr:main area的 block地址
sm_info->segment_count:始化segment count的数目, 它不包含sb所占用的segment
sm_info->reserved_segments:main区域中保留的segment的个数
sm_info->ovp_segments:main区域中over provision的segment的个数
sm_info->main_segments:main区域的segment的个数 - build_sit_info
最重要的是为每个segment创建描述符segment entry, seg_entry记录了一个segment的有效块数,有效块的bitmap等信息 ,为main area分配dirty segment entry bitmap空间,为main area的所有segment分配valid block bitmap - build_free_segmap
构建free_segmap_info, 最主要的是构建了free bit map - build_curseg
当前有效的segment创建summary block, 并通过cp区域存放的当前有效segment summary block初始化,由于镜像采用了compacted summaries,因此将nat journal存放到current hot data的summary block, 将sit journal存放到current cold data的summary block - build_sit_entries
始化内存中的sit entries,如果segment在sit jornal entry中没有对应的seg entry,则需要从磁盘的sit区域获取, 如果有则直接用以初始化内存中的sit entry, 此处也会 - init_free_segmap
根据main area的segment是否有valid block,初始化free segmap, 清零/置位free_segmap_info->free_segmap - build_dirty_segmap
基于free_segmap_info初始化dirty_seglist_info,因为free_segmap_info中bitmap中bit为1表示dirty
3.3 build_node_manager
初始化node manager info, 重点初始化了nat_bitmap, 它来源于cp
3.4 build_gc_manager
get_victim_by_default
3.5 recover_fsync_data
TODO
3.6 start_gc_thread
TODO
总结
以上是生活随笔为你收集整理的f2fs学习笔记 - 6. f2fs初始化流程的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 安卓rtmp推流app_视频直播app开
- 下一篇: k3595参数_场效应管参数大全3