- 博客(14)
- 资源 (13)
- 收藏
- 关注

原创 f2fs二三事 block map 1
f2fs_map_blocks函数主要作用是为写入inode的数据分配内存空间(包括node block,data block),四个参数:1) struct inode * inode: 操作的inode结构2) struct f2fs_map_blocks * map:要写入的block相关信息的参数3) int create: 如果为true, 表示如果内中不存在相应的bloc...
2019-02-24 00:25:15
793

原创 f2fs 二三事 get_dnode_of_data
/* * Caller should call f2fs_put_dnode(dn). * Also, it should grab and release a rwsem by calling f2fs_lock_op() and * f2fs_unlock_op() only if ro is not set RDONLY_NODE. * In the case of RDONLY_...
2019-02-23 20:45:05
310

原创 F2FS二三事
/* * this structure is used as one of function parameters. * all the information are dedicated to a given direct node block determined * by the data offset in a file. */struct dnode_of_data { ...
2019-02-23 14:24:15
390
翻译 Operating Systems: Three Easy Pieces-13 Address Spaces
Operating Systems: Three Easy Pieces第十三章:Address Spaces之前,建立一个电脑操作系统是非常容易的事情,也许你会问为什么?因为用户的期望很低。是那些“该死”的用户们,期望“易用”,“性能高”,“可靠”等,才导致所有的这些另人头疼的事情。下次碰到这些用户时,别忘感谢他们,制造了所有的这些问题。13.1早期的系统:从内存的角度看,早期的...
2019-11-24 19:36:20
119
原创 f2fs mkdir创建目录过程分析
不论是文件,还是目录,在文件系统中都由inode表示,本篇主要看一下创建一个目录f2fs都做了哪些事情,创建了哪些结构,什么样的格式,怎样最终存储到存储中。SYSCALL_DEFINE3(mkdirat, int, dfd, const char __user *, pathname, umode_t, mode){ struct dentry *dentry; struct pat...
2019-11-09 18:42:13
934
原创 f2fs nat/sit area存储格式及current_nat_addr
f2fs为了保护元数据的有效性及可恢复性,每个无数据区域均包含两个复本,如两个super block,两个check point segments,对于nat及sitarea,同样也包含两份。对于nat area的存储方式,一直以来,都以为是先存一份,再存储另一份,类似于这种结构:所以,对于current_nat_addr函数,一直无法理解代码实现的原理是什么。今天偶然看了一...
2019-10-20 23:58:43
569
1
原创 f2fs write_checkpoint 过程分析
write_checkpoint主要负责把cache中dirty的数据写回到磁盘中,在gc, trim, discard或者recovery的时候都会调用到。int write_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc){ struct f2fs_checkpoint *ckpt = F2FS_CKPT(s...
2019-10-19 16:34:53
812
原创 f2fs gc garbage collect 过程分析
f2fs mount时,会启动garbage collect线程,garbage collect线程通过wait_event_interruptible_timeout函数,每隔一段时间,或者等待的condition为true时,判断是否需要执行garbage collect操作。static int gc_thread_func(void *data){ struct f2fs_sb...
2019-10-13 13:59:50
860
原创 f2fs get_node_path 函数过程分析
f2fs中比较有趣的一个函数get_node_path(),想要理解这个函数,需要对f2fs node及node中能够索引的地址理解清楚,先看一下f2fs inode的结构: 4KB * (923 + 2 * 1018 + 2 * 1018 * 1018 + 1018 * 1018 * 1018) := 3.94TB. Inode block (4KB) |- data ...
2019-10-04 18:18:58
348
原创 f2fs mkfs格式化系列3
前面讲了f2fs格式化主要进行了哪些操作,本篇看一下,mount过程中是如何读取格式化写到磁盘的那些内容的。主要说一下如果读取f2fs meta data这些信息,mount过程还有一些比较重要的步骤,像build node management, build sit management后面会分开仔细再说。static int f2fs_fill_super(struct super...
2019-09-28 21:34:49
591
原创 f2fs mkfs 格式化过程系列 2
前面两篇文章写了f2fs format过程中superblock和 cp填充的过程,格式化过程中主要是这两个meta data的填充有点不好理解,后面的部分相对来说比较容易,本篇说说后面的部分做的内容。1, f2fs_init_sit_area()static int f2fs_init_sit_area(void){ u_int32_t blk_size, seg_size;...
2019-09-28 20:05:38
546
原创 f2fs mkfs 格式化过程系列 0
f2fs开源的代码分为f2fs-tools与f2fs kernel代码,f2fs-tools的代码主要是格式化make_f2fs工具,fsck工具等,可以在开源网站https://git.kernel.org/pub/scm/linux/kernel/git/上面下载。格式化的源码在f2fs-tools源码f2fs-format.c中,f2fs_format_device()中执行的,次函...
2019-09-27 16:24:14
983
原创 f2fs mkfs 格式化过程系列 1
本文以f2fs-tools 1.9为例,描述一下f2fs格式化过程做了那些事,都往f2fs mete data里面写了什么东西。f2fs metedata包含sb, cp(2 segments), sit, nat, ssa,先从cp开始,看一下格式化过程往这两个check point里面写了哪些数据。static int f2fs_write_check_point_pack(v...
2019-09-06 08:10:26
1491
1
原创 f2fs rename
/*** before rename: /sdcard/logs/server* after rename: /sdcard/logs/server1* old_dir: /sdcard/logs* new_dir: /sdcard/logs* old_dentry: dentry of server* new_dentry: dentry of server1*/static...
2019-03-20 23:17:12
273
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人