Linux中文件系统truncate.c源码分析
发布时间 - 2023-05-21 00:00:00 点击率:次Linux-0.11 文件系统truncate.c详解
free_ind
static void free_ind(int dev,int block)
该函数的作用是释放所有的一次间接块。
该函数首先读取一次间接块到bh中, 该bh块中存储了512个盘块号。
struct buffer_head * bh;
unsigned short * p;
int i;
if (!block)
return;
if ((bh=bread(dev,block))) {接下来就对这512个盘块号进行遍历,如果盘块号不为0, 就调用free_block(bitmap.c中)释放该盘块。遍历完毕之后,将一次间接块的bh块引用计数减1。最后将这个一次间接块也进行释放。
for (i=0;i<512;i++,p++)
if (*p)
free_block(dev,*p);
brelse(bh);
free_block(dev,block);free_dind
static void free_dind(int dev,int block)
该函数的作用就是释放所有的二次间接块。
该函数首先对盘块号的有效性进行校验。
struct buffer_head * bh; unsigned short * p; int i; if (!block) return;
接着读取二次间接块到bh中, 该bh块中存储了512个一次间接块的盘块号。
接下来就对这512个一次间接块的盘块号进行遍历,如果盘块号不为0, 就调用free_ind释放该一次间接块所有的block。遍历完毕之后,将二次间接块的bh块引用计数减1。最后将这个二次间接块也进行释放。
if ((bh=bread(dev,block))) {
p = (unsigned short *) bh->b_data;
for (i=0;i<512;i++,p++)
if (*p)
free_ind(dev,*p);
brelse(bh);
}
free_block(dev,block);truncate
void truncate(struct m_inode * inode)
该函数的作用是释放该inode所占据的磁盘空间。当文件链接数为0时,iput函数(inode.c)会调用该函数。
代码最开始检查如果不是常规文件或者是目录文件,就跳过。
int i;
if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode)))
return;释放直接引用块。
for (i=0;i<7;i++)
if (inode->i_zone[i]) {
free_block(inode->i_dev,inode->i_zone[i]);
inode->i_zone[i]=0;
}释放一次间接块和二次间接块。
free_ind(inode->i_dev,inode->i_zone[7]); free_dind(inode->i_dev,inode->i_zone[8]);
将一次间接块和二次间接块的地址置为0。将inode的size置为0, 将该inode设置为含有脏数据, 最后将inode的修改时候和创建时间都修改为当前时间。
inode->i_zone[7] = inode->i_zone[8] = 0; inode->i_size = 0; inode->i_dirt = 1; inode->i_mtime = inode->i_ctime = CURRENT_TIME;
# linux
# 遍历
# 后将
# 不为
# 就对
# 或者是
# 如果不是
# 设置为
# 将该
# 文件系统
# 跳过
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在万网主机上快速搭建网站?
SQL查询语句优化的实用方法总结
百度浏览器如何管理插件 百度浏览器插件管理方法
如何在Windows 2008云服务器安全搭建网站?
如何快速重置建站主机并恢复默认配置?
如何快速查询网站的真实建站时间?
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
如何用AI帮你把自己的生活经历写成一个有趣的故事?
Python文件异常处理策略_健壮性说明【指导】
利用 Google AI 进行 YouTube 视频 SEO 描述优化
潮流网站制作头像软件下载,适合母子的网名有哪些?
动图在线制作网站有哪些,滑动动图图集怎么做?
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
JavaScript Ajax实现异步通信
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
魔方云NAT建站如何实现端口转发?
七夕网站制作视频,七夕大促活动怎么报名?
Laravel定时任务怎么设置_Laravel Crontab调度器配置
Laravel怎么实现模型属性的自动加密
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
Laravel如何记录自定义日志?(Log频道配置)
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
如何快速完成中国万网建站详细流程?
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
JavaScript如何实现路由_前端路由原理是什么
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
如何用狗爹虚拟主机快速搭建网站?
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
大同网页,大同瑞慈医院官网?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
智能起名网站制作软件有哪些,制作logo的软件?
Bootstrap CSS布局之列表
太平洋网站制作公司,网络用语太平洋是什么意思?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
,网页ppt怎么弄成自己的ppt?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
Laravel如何使用Livewire构建动态组件?(入门代码)
Laravel怎么在Controller之外的地方验证数据
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
BootStrap整体框架之基础布局组件
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
Python并发异常传播_错误处理解析【教程】
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
如何自定义建站之星模板颜色并下载新样式?
如何实现javascript表单验证_正则表达式有哪些实用技巧
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
深入理解Android中的xmlns:tools属性


gned short * p;
int i;
if (!block)
return;