f2fs_write_root_inode():在main area创建root inode f2fs_update_nat_root():继续初始化NAT,即在该区域记录root inode的地址映射 f2fs_add_default_dentry_root():更新dentry block 后面我们来看这一大段代码 /*** @brief It initializes and writes root inode on device.* @param None* @return 0 if ...
f2fs文件读取(/File) Setp 1首先通过superblock获取root inode号(==nid,假设为3),通过NAT获取root inode所在的node block地址 Setp 2 通过root inode找到root目录的data block地址 Setp 3 通过文件名File遍历每一个entry,找到File对应的inode号,通过inode号(==nid)查NAT Setp 4 通过NAT找到File的inode所在的no...
__le32 root_ino; /* root inode number */ __le32 node_ino; /* node inode number */ __le32 meta_ino; /* meta inode number */ __u8 uuid[16]; /* 128-bit uuid for volume */ __le16 volume_name[MAX_VOLUME_NAME]; /* volume name */ __le32 extension_count; /* # of exte...
#include<linux/fs.h>#include<linux/f2fs_fs.h>voidcreate_file(structf2fs_sb_info*sbi,constchar*filename){structinode*inode;structdentry*dentry;// 创建文件dentry=lookup_one_len(filename,sbi->root,strlen(filename));if(!dentry)return;inode=new_inode(sbi->s_fs_type);if(!inode){// 错误处...
$sudo mkfs.f2fs -f -l rootp -O extra_attr,inode_checksum,sb_checksum,compression /dev/nvme0n1p2 $sudo mkfs.f2fs -f -l homep -O extra_attr,inode_checksum,sb_checksum,compression /dev/nvme0n1p3 说明: mkfs.f2fs :这是格式化为F2FS的命令; -f :强制格式化,这个必须加。因为原来你有其他文件...
另外f2fs_wait_on_block_writeback 这个奇怪的函数也是为了这个创造出来的。 root inode TODO compress inode TODO 为什么 node id 是从 1 开始的? 因为nid = 0 被视作未分配,或者无效。参考 __get_node_page。 另外在 truncate_dnode 里,nid == 0 即视作已经 truncate。
根据f2fs文件系统相关函数的定义,在每一个文件索引节点块中包含了f2fs_inode和node_footer两部分,其中f2fs_inode结构中的数据索引区又存在923个数据块指针,每个指针对应一个大小为4KB的数据块,但是在通常情况下系统文件索引并不需要用到所有数据块,在最极端情况下文件大小为4KB时,只需要用到一个数据块,剩下的数据块...
根据f2fs文件系统相关函数的定义,在每一个文件索引节点块中包含了f2fs_inode和node_footer两部分,其中f2fs_inode结构中的数据索引区又存在923个数据块指针,每个指针对应一个大小为4KB的数据块,但是在通常情况下系统文件索引并不需要用到所有数据块,在最极端情况下文件大小为4KB时,只需要用到一个数据块,剩下的数据块...
SIT和NAT的初始化过程遵循类似的步骤,但各有不同,如SIT写入一半的段到外存映像,而NAT占用更多段。root directory初始化涉及创建根目录,其中f2fs_create_root_dir()包括三个步骤,涉及root inode的处理和dentry信息的添加。dentry的属性简单明了,包含文件类型和哈希信息,其布局有助于文件定位。接下来...
在f2fs_write_node_page函数中,nid的信息首先会通过get_node_info 函数得到, 但是由于node管理器中的nat_root树中并没有相关的nid的信息,所以此时就会在最后的cache_nat_entry中建立啦! 可见此时打配合的两个管理结构是:1)基数树,nat_root;2)链表,nat_entries。