vfs_caches_init函数初始化VFS,下面梳理函数调用流程

start_kernel()-->vfs_caches_init_early();-->dcache_init_early();-->static struct hlist_head *dentry_hashtabl = alloc_large_system_hash("Dentry cache",sizeof(struct hlist_head),dhash_entries,13,HASH_EARLY,&d_hash_shift,&d_hash_mask,0);-->inode_init_early();-->static struct hlist_head *inode_hashtable = alloc_large_system_hash("Inode-cache",sizeof(struct hlist_head),ihash_entries,14,HASH_EARLY,&i_hash_shift,&i_hash_mask,0);-->vfs_caches_init(num_physpages);/*1.kmem_cache用于名字*/-->struct kmem_cache *names_cachep = kmem_cache_create("names_cache", PATH_MAX, 0,SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);-->dcache_init();/*2.kmem_cache用于缓存dentry目录项*/-->struct kmem_cache *dentry_cache = KMEM_CACHE(dentry,SLAB_RECLAIM_ACCOUNT|SLAB_PANIC|SLAB_MEM_SPREAD);-->inode_init();/*3.kmem_cache用于缓存inode*/-->struct kmem_cache *inode_cachep = kmem_cache_create("inode_cache",sizeof(struct inode),0,(SLAB_RECLAIM_ACCOUNT|SLAB_PANIC|SLAB_MEM_SPREAD),init_once);-->files_init(mempages);/*4.kmem_cache用于缓存file结构体*/-->struct kmem_cache *filp_cachep = kmem_cache_create("filp", sizeof(struct file), 0,SLAB_HWCACHE_ALIGN | SLAB_PANIC, NULL);-->mnt_init();/*5.kmem_cache用于缓存vfsmount结构体*/-->struct kmem_cache *mnt_cache = kmem_cache_create("mnt_cache", sizeof(struct vfsmount),0, SLAB_HWCACHE_ALIGN | SLAB_PANIC, NULL);-->static struct list_head *mount_hashtable =(struct list_head *)__get_free_page(GFP_ATOMIC);/*注册&挂载sysfs虚拟文件系统*/-->sysfs_init()/*6.kmem_cache用于缓存sysfs_dirent结构体*/-->struct kmem_cache *sysfs_dir_cachep = kmem_cache_create("sysfs_dir_cache",/*对应的应该就是"/fs/"跟目录*/                      sizeof(struct sysfs_dirent),0, 0, NULL);-->fs_kobj = kobject_create_and_add("fs", NULL);/*注册rootfs虚拟文件系统*/-->init_rootfs();/*挂载rootfs虚拟文件系统*/-->init_mount_tree();-->bdev_cache_init();/*7.kmem_cache用于缓存bdev_inode结构体*/-->struct kmem_cache *bdev_cachep = kmem_cache_create("bdev_cache", sizeof(struct bdev_inode),0, (SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT|SLAB_MEM_SPREAD|SLAB_PANIC),init_once);/*注册的这是啥文件系统啊?*/-->register_filesystem(&bd_type);/*挂载*/-->struct vfsmount *bd_mnt = kern_mount(&bd_type);-->struct super_block *blockdev_superblock = bd_mnt->mnt_sb;    /* For writeback *//*字符设备相关的初始化*/-->chrdev_init();

转载于:https://www.cnblogs.com/yangjiguang/p/8445357.html

vfs_caches_init函数解析相关推荐

  1. oracle rpad mysql_Oracle生成不重复票号与LPAD,RPAD与NEXTVAL函数解析

    SELECT TO_CHAR(SYSDATE,'YYMMDD')||LPAD(REFUNDSEQ.NEXTVAL,6,'0') AS RES_ORDER_NO FROM DUAL 该语句拼接 时间 与 ...

  2. json数据解析_VBA 实践指南 -- Split函数解析Json数据

    什么是JSON? JSON(JavaScript Object Notation) 是一种及其轻量级的数据交换格式,它是 ECMAScript (欧洲计算机协会制定的JavaScript规范)的一个子 ...

  3. C/C++ sizeof函数解析——解决sizeof求结构体大小的问题

    C/C++ sizeof函数解析--解决sizeof求结构体大小的问题 参考文章: (1)C/C++ sizeof函数解析--解决sizeof求结构体大小的问题 (2)https://www.cnbl ...

  4. 【Socket网络编程】12. send()、recv()、sendto() 和 recvfrom() 函数解析

    send().recv().sendto()和recvfrom()函数解析 一般情况下,send().recv()在TCP协议下使用,sendto().recvfrom()在UDP协议下使用,也可以在 ...

  5. main() 函数解析(一)——Linux-0.11 剖析笔记(六)

    文章目录 1. 宏定义`_syscall0` 2. `setup.s`读取的参数 3. 读取CMOS实时时钟信息 3.1 `outb_p(value,port)` 3.2 `inb_p(port)` ...

  6. main 函数解析(二)—— Linux-0.11 学习笔记(六)

    main函数解析(二)--Linux-0.11 学习笔记(六) 4.6 blk_dev_init函数 void blk_dev_init(void) {int i;for (i=0 ; i<NR ...

  7. main函数解析(一)——Linux-0.11 学习笔记(五)

    main()函数解析(一)--Linux-0.11 学习笔记(五) 经过了前面的各种铺垫,终于来到了main函数.这篇博客的任务是把init/main.c讲清楚.由于牵扯到很多的函数调用,要想一次就说 ...

  8. OSTimeTick()函数解析

    ucos V2.52 OSTimeTick()函数解析 调用处:os_cpu_a.asm里_OSTickISR 函数所有源文件:os_core.c 代码: void  OSTimeTick (void ...

  9. c++ _int64转字符串_C语言 仿JS的eval函数 解析字符串

    C语言 利用后缀表达式解析字符串(符合c98标准,很容易移植到计算器上) 最近用98标准的C语言写了个解析字符串,类似于JavaScript中的eval函数,感觉挺实用(移植到了计算器上,可以画F(X ...

最新文章

  1. linux下sql查询的使用,sql-server – 如何在Linux上查看SQL Server中的执行计划
  2. Selenium Web 自动化 - Selenium常用API
  3. 如何开发一个高性能的redis cluster proxy
  4. 循环嵌套-[扩展]print函数的结尾处理
  5. SQL日常维护的语句
  6. linux下开启dhcp服务器配置,CentOS下DHCP服务器的配置
  7. 关于软件定义IT基础设施的未来,深信服是这么思考的
  8. kotlin 复制对象属性_Kotlin 怎么学 ?遇到过哪些坑?
  9. python做的大型游戏_Python有做大型游戏的潜力吗?
  10. java string 去掉两边的引号_编写一个简单的java程序
  11. iOS--地图找房(类似链家、安居客等地图找房)
  12. R语言与抽样技术学习笔记(Randomize)
  13. 传感器技术-光电式传感器(学习笔记十)
  14. 计算机工程学院团总支学生会,凝聚团队力量,展现青春活力——计算机工程学院团总支学生会开展学生干部素质拓展活动...
  15. canvas画笔自定义笔触
  16. 过勇 清华计算机系,16位清华学霸的简历—比你牛的人还比你努力,膝盖已跪碎...
  17. 数据结构课程设计--学生信息管理系统
  18. 圆角 border-radius
  19. 计算机组装前工具的准备,计算机组装 必备工具
  20. 【C语言】结构体-求出学生的平均成绩放在成员ave中

热门文章

  1. 四种区块链底层技术形态的对比解读
  2. 面向儿童的简易编程工具---Scratch
  3. 大力出奇迹:今日头条小程序跻身代理创业新沃土
  4. SAP中复制创建生产版本时引申出工艺路线物料分配问题分析案例
  5. linux下git的安装与使用
  6. 4K+AI将加速催生5G时代颠覆性应用
  7. 手机上搭建Linux服务器
  8. 云运维态势感知-可视化指挥调度
  9. Windows Live Messenger/MSN无法登录
  10. WPF使用第三方的字体(TTF文件)