Linux内核 -- 文件系统之超级块 super_operations 字段作用与用法

struct super_operations 字段的作用与用法

super_operations 是 Linux 内核中定义的一个结构体,用于描述与文件系统超级块 (super_block) 相关的操作。这些操作涵盖了文件系统的创建、删除、挂载、卸载等。

结构体定义

struct super_operations {struct inode *(*alloc_inode)(struct super_block *sb);void (*destroy_inode)(struct inode *);void (*dirty_inode) (struct inode *, int flags);int (*write_inode) (struct inode *, struct writeback_control *wbc);void (*drop_inode) (struct inode *);void (*evict_inode) (struct inode *);void (*put_super) (struct super_block *);int (*sync_fs)(struct super_block *sb, int wait);int (*freeze_fs) (struct super_block *);int (*unfreeze_fs) (struct super_block *);int (*statfs) (struct dentry *, struct kstatfs *);int (*remount_fs) (struct super_block *, int *, char *);void (*umount_begin) (struct super_block *);int (*show_options)(struct seq_file *, struct dentry *);
#ifdef CONFIG_QUOTAssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
#endifint (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t);
};

主要字段说明

1. alloc_inode

  • 作用:分配一个新的 inode(索引节点)结构体。
  • 用法:当文件系统需要分配一个新的 inode 时,会调用此函数,通常会分配和初始化与文件系统相关的特定 inode。

2. destroy_inode

  • 作用:销毁并释放 inode 结构体的资源。
  • 用法:当 inode 不再需要时,会调用此函数来释放资源。

3. dirty_inode

  • 作用:标记 inode 为脏数据,表示该 inode 需要写回磁盘。
  • 用法:文件系统在修改 inode 时调用,以标记其脏状态。
  • 参数inode 指向要标记为脏的 inode,flags 标记标志。

4. write_inode

  • 作用:将脏的 inode 写回到磁盘。
  • 用法:文件系统会实现此函数以执行 inode 的实际写回操作。

5. drop_inode

  • 作用:释放不再需要的 inode 引用。通常用于减少 inode 的引用计数。
  • 用法:当 inode 不再活跃时,调用此函数来处理 inode 的生命周期。

6. evict_inode

  • 作用:从内核的 inode 缓存中删除 inode 并释放其所有资源。
  • 用法:通常在 inode 被删除时调用,以确保其内存被正确释放。

7. put_super

  • 作用:当文件系统被卸载时调用,用于释放超级块的相关资源。
  • 用法:通常会在该函数中释放文件系统特定的内存或结构体。

8. sync_fs

  • 作用:同步文件系统的超级块和元数据到磁盘。
  • 用法:当需要同步文件系统状态时调用,wait 参数表示是否需要等待同步完成。

9. freeze_fs

  • 作用:冻结文件系统,暂停所有文件系统的写入操作。
  • 用法:文件系统将进入只读模式,不允许任何写操作,直到文件系统被解冻。

10. unfreeze_fs

  • 作用:解冻文件系统,恢复写操作。
  • 用法:配合 freeze_fs 使用,使文件系统回到可写状态。

11. statfs

  • 作用:获取文件系统的统计信息,如总大小、剩余空间等。
  • 用法:实现该函数可以使 statfs 系统调用返回特定文件系统的状态信息。

12. remount_fs

  • 作用:重新挂载文件系统,通常用于更改挂载选项(如从只读切换到可写)。
  • 用法:实现该函数可以使文件系统在运行时动态修改挂载标志。

13. umount_begin

  • 作用:在卸载文件系统开始时调用,通知文件系统即将卸载。
  • 用法:可以在文件系统卸载前进行一些必要的清理操作。

14. show_options

  • 作用:显示挂载时使用的选项。
  • 用法:通过 /proc/mounts 或类似接口显示挂载时使用的选项。

15. quota_readquota_write

  • 作用:支持文件系统的配额(quota)功能,读取和写入配额信息。
  • 用法:这些字段仅在启用了配额功能的文件系统中使用,用于管理磁盘使用配额。

16. bdev_try_to_free_page

  • 作用:尝试释放一个页缓存页面,通常在块设备文件系统中使用。
  • 用法:当需要释放内存页时,调用此函数尝试释放文件系统的缓存页面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/54920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用vscode的launch.json来debug调试

1、创建一个launch.json文件 选择Python Debugger,再选择Python文件,创建处理如下 默认有下面五个参数 "name": "Python Debugger: Current File","type": "debugpy","request": "launch"…

C++ struct 和 class 的区别、C++结构体和C结构体的区别等基础知识。

特性C structC classC struct默认访问控制符publicprivate全部公开支持成员函数是是否继承支持是是否模板支持是是否运算符重载是是否 在C中,struct 和 class 是两种非常相似的用户定义类型,二者有一些关键区别。C的 struct 与 C 语言中的 struct 也存在…

金九银十软件测试面试题(800道)

今年你的目标是拿下大厂offer?还是多少万年薪?其实这些都离不开日积月累的过程。 为此我特意整理出一份(超详细笔记/面试题)它几乎涵盖了所有的测试开发技术栈,非常珍贵,人手一份 肝完进大厂 妥妥的&#…

【LeetCode】动态规划—123. 买卖股票的最佳时机 III(附完整Python/C++代码)

动态规划—123. 买卖股票的最佳时机 III 题目描述前言基本思路1. 问题定义2. 理解问题和递推关系状态定义:状态转移公式:初始条件: 3. 解决方法动态规划方法伪代码: 4. 进一步优化5. 小总结 Python代码Python代码解释 C代码C代码解…

07_23 种设计模式之《桥接模式》

文章目录 一、桥接模式基础知识二、桥接模式实战应用 一、桥接模式基础知识 桥接模式定义:将抽象部分与它的实现部分分离,使它们都可以 独立地变化。桥接模式的结构图如下: Abstraction:抽象部分的接口。 RefinedAbstraction&…

Python基础之List列表用法

1、创建列表 names ["张三","李四","王五","Mary"] 2、列表分片 names[1]:获取数组的第2个元素。 names[1:3]:获取数组的第2、第3个元素。包含左侧,不包含右侧。 names[:3]等同于names[0:3]&…

List子接口

1.特点:有序,有下标,元素可以重复 2.方法:包含Collection中的所有方法,还包括自己的独有的方法(API中查找) 还有ListIterator(迭代器),功能更强大。 包含更多…

llava1.5论文阅读

Improved Baselines with Visual Instruction Tuning 通过视觉指令微调增强的基线方法 论文摘要: 我们发现,LLaVA中的全连接视觉语言连接器非常强大且数据效率高。 3.3 数据和模型的scaling 受到将线性投影转变为多层感知机(MLP&#xff0…

支付宝支付Java+uniapp支付宝小程序

JS: request.post(/vip/pay, {//这是自己写的java支付接口id: this.vipInfo.id,payWay: alipay-mini}).then((res) > {let success (res2) > {//前端的支付成功回调函数this.$refs.popup.close();// 支付成功刷新当前页面setTimeout(() > {this.doGetVipI…

机器学习/数据分析--用通俗语言讲解时间序列自回归(AR)模型,并用其预测天气,拟合度98%+

时间序列在回归预测的领域的重要性,不言而喻,在数学建模中使用及其频繁,但是你真的了解ARIMA、AR、MA么?ACF图你会看么?? 时间序列数据如何构造???,我打过不少…

读书笔记 - 虚拟化技术 - 0 QEMU/KVM概述与历史

《QEMU/KVM源码解析与应用》 - 王强 概述 虚拟化简介 虚拟化思想 David Wheeler:计算机科学中任何问题都可以通过增加一个中间层来解决。 虚拟化思想存在与计算机科学的各个领域。 主要思想:通过分层将底层的复杂,难用的资源虚拟抽象为简…

32单片机 低功耗模式

以下是一个基于STM32的低功耗模式示例代码,展示如何将STM32微控制器置于低功耗模式,并在特定条件下唤醒它。这个示例使用的是STM32 HAL库。 ### 示例代码:进入睡眠模式并使用外部中断唤醒 c #include "stm32f4xx_hal.h" // 函数声明…

笔记本电脑按住电源键强行关机,对电脑有伤害吗?

电脑卡住了,我们习惯性地按住电源键或者直接拔掉电源强制关机,但这种做法真的安全吗?会不会对电脑造成伤害呢? 其实,按住电源键关机和直接拔掉电源关机是不一样的。它们在硬件层面有着本质区别。 按住电源键关机 当…

网络常用配置和运维命令以及使用方法

一、网络运维常见配置及命令 以下是一些整理简单网络常用配置和运维命令 1、ifconfig/ipconfig:查看和配置网络接口配置。 用法:ifconfig 或 ipconfig2、route/netstat -r:查看路由表。 用法:route -n 或 netstat -r3、netsta…

Spring Cloud 3.x 集成eureka快速入门Demo

1.什么是eureka? Eureka 由 Netflix 开发,是一种基于REST(Representational State Transfer)的服务,用于定位服务(服务注册与发现),以实现中间层服务的负载均衡和故障转移&#xff…

工业和自动化领域常见的通信协议

在工业和自动化领域,有多种常见的通信协议,主要用于设备间的通信、数据传输和控制。 Modbus: 类型:串行通信协议用途:广泛用于工业自动化设备间的通信,如PLC、传感器和执行器。优点:简单、开放且…

day01-Qt5入门

day01-Qt5入门 窗体应用 1.1 窗体基类说明 创建项目在details中编辑器提供了三个基类,分别是 QMainWindows、Qwidget、QDialog 1、 QMainWindow QMainWindow 类提供一个有菜单条、锚接窗口(例如工具条)和一个状态条的主应用 程序窗口。…

【系统架构设计师】案例专题六(8大系统架构设计之1): 信息系统架构设计考点梳理

更多内容请见: 备考系统架构设计师-核心总结目录 文章目录 一、信息系统架构基本概念二、信息系统架构1、信息系统架构分类2、信息系统常用4种架构模型3、企业信息系统的总体框架三、信息系统架构设计方法1、ADM架构开发方法2、信息化总体架构方法3、TOGAF的目标、思想和组件四…

【C语言实现TCP客户端】

Question C语言实现TCP客户端 Answer 下面是一个简单的 C 语言实现的 TCP 客户端示例。这个客户端将连接到指定的服务器地址和端口&#xff0c;并发送一条消息&#xff0c;然后接收服务器返回的消息。 #include <stdio.h> #include <stdlib.h> #include <st…

Java-基础

1. 导入模块不能纯粹的复制粘贴&#xff0c;要从new里导入&#xff0c;因为前者建立不了关联 2. 数组 String[] name{"张三","李四","王五"};int[] numsnew int[]{1,2,3};//二维String[][] names{{"张三","李四"},{"…