f2fs学习笔记 - 6. f2fs初始化流程
生活随笔
收集整理的這篇文章主要介紹了
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