struct file *get_empty_filp(void)函数的功能是获得一个未使用的文件缓存空间即file结构体
其源码分析如下:
struct file *get_empty_filp(void)
{const struct cred *cred = current_cred();static long old_max;struct file *f;int error;/** Privileged users can go above max_files*/#判断当前打开的文件数使用已经超出最大值的同时且执行这个程序的用户不是管理员if (get_nr_files() >= files_stat.max_files && !capable(CAP_SYS_ADMIN)) {/** percpu_counters are inaccurate.  Do an expensive check before* we go and fail.*/#通过percpu检查文件数是否超过最大值max_files.如果超出的话,就返回errorif (percpu_counter_sum_positive(&nr_files) >= files_stat.max_files)goto over;}#通过slab 申请一个file结构体f = kmem_cache_zalloc(filp_cachep, GFP_KERNEL);if (unlikely(!f))return ERR_PTR(-ENOMEM);#nr_files加1percpu_counter_inc(&nr_files);f->f_cred = get_cred(cred);#安全checkerror = security_file_alloc(f);if (unlikely(error)) {file_free(f);return ERR_PTR(error);}#文件的引用计数设置为1atomic_long_set(&f->f_count, 1);#锁的初始化rwlock_init(&f->f_owner.lock);spin_lock_init(&f->f_lock);mutex_init(&f->f_pos_lock);#初始化file结构体的f_ep_links和f_tfile_llink 这两个链表eventpoll_init_file(f);/* f->f_version: 0 */return f;over:/* Ran out of filps - report that */#如果当前已经打开的文件数超过在申请前面file之前的最大值old_max,则将get_nr_files的值赋值给old_maxif (get_nr_files() > old_max) {pr_info("VFS: file-max limit %lu reached\n", get_max_files());old_max = get_nr_files();}return ERR_PTR(-ENFILE);
}

内核文件系统API之get_empty_filp相关推荐

  1. 主线剧情07.3-Linux驱动编程-内核态API总结备查

    驱动程序 中的 设备相关 和 常用内核态 API 总结备查 多处网搜和引用,做了良好的整理,侵删. 本文对应的驱动源代码在 github/gitee 仓库里:并且 在 Github 上的原版文章日后可 ...

  2. 《Linux From Scratch》第三部分:构建LFS系统 第六章:安装基本的系统软件- 6.2. 准备虚拟内核文件系统...

    内核会挂载几个文件系统用于自己和用户空间程序交换信息.这些文件系统是虚拟的,并不占用实际磁盘空间,它们的内容会放在内存里. 开始先创建将用来挂载文件系统的目录: mkdir -pv $LFS/{dev ...

  3. (2021) 24 [持久化] 文件系统API

    (2021) 24 [持久化] 文件系统API 南京大学操作系统课蒋炎岩老师网络课程笔记. 视频:https://www.bilibili.com/video/BV1HN41197Ko?p=24 讲义 ...

  4. Linux文件系统:编写一个内核文件系统

    Linux文件系统在著名的VFS模型下工作,因此符合POSIX.编写Linux文件系统有两种方法 保险丝文件系统 内核文件系统 保险丝本身是一个内核文件系统.它将从VFS接收到的文件系统调用转发到用户 ...

  5. armboot和内核文件系统烧写总结

    armboot的烧写和内核文件系统的烧写是最基本的,也是最原始的操作.但是对于以后整块板的分析是很有好处的,为下一步外围模块的添加做好了准备工作.<?xml:namespace prefix = ...

  6. Linux内核scatterlist API介绍 DMA SG搬移

    Linux内核scatterlist API介绍 1. 前言 我们在那些需要和用户空间交互大量数据的子系统(例如MMC[1].Video.Audio等)中,经常看到scatterlist的影子.对我们 ...

  7. DM365 linux内核文件系统的烧写步骤及其uboot参数配置

    DM365 linux内核&文件系统的烧写步骤及其uboot参数配置     目录 源文档下载:http://download.csdn.net/detail/zhangjikuan/6443 ...

  8. Linux内核文件系统10

    2021SC@SDUSC inode.c(1) 今天来分析inode.c文件.有了前面对ext4_jbd2.h.acl.h等头文件的分析做基础,今天的分析将相对简单. 在看代码之前,首先要说一下ino ...

  9. 【技术分享篇】Linux内核——手把手带你实现一个Linux内核文件系统丨Linux内核源码分析

    手把手带你实现一个Linux内核文件系统 1. 内核文件系统架构分析 2. 行行珠玑,代码实现 [技术分享篇]Linux内核--手把手带你实现一个Linux内核文件系统丨Linux内核源码分析 更多L ...

最新文章

  1. atitit.软件开发方法总结O6
  2. Html5本地存储和本地数据库
  3. myeclipse2014如何创建user library
  4. 动态规划|最大k乘积问题(C语言)
  5. 作用域、执行环境、闭包(四)
  6. linux 内核系统优化,Linux系统内核优化(一)
  7. linux七周四次课(3月22日)
  8. Android数据存储总结
  9. ZYNQ飞控系统设计-PX的MAalefile解读
  10. 为什么需要Code Review?
  11. java 检测点击事件控件_iCheck控件ifClicked和ifChanged事件的讨论
  12. 二分查找的平均查找长度
  13. DL1 - Neural Networks and Deep Learning
  14. 图形学基础之透视校正插值
  15. 数据库系统概论整理(Part Ⅰ)
  16. Android 打点方式总结
  17. 一文看懂RPA的技术原理、产品形态、设计与构建
  18. 【周赛】第一周周赛——欢迎16级的新同学题解(题目出自codeforces 318A,546A,431C,665E,HDU 4104)
  19. Unity Mesh网格合并
  20. 正点原子STM32精英版LCD实验白屏

热门文章

  1. 弹性盒子进阶2-对齐方式
  2. 详细的完全抹盘重装macOS系统(M1芯片、Intel 处理器Mac)
  3. PHP服务端开发APP接口
  4. 一些随笔,随笔写的笔记
  5. 小伙斥巨资购买学生平板,网友:360元的二手山寨平板都比他强
  6. (android R) VNDK library: XXX’s ABI has EXTENDING CHANGES
  7. Vue学习之旅-01
  8. Linux用户与权限管理
  9. C语言文件操作函数fwrite导致写入文件的内容乱码的问题解决方案
  10. 移动安全总结 2019