系统调用close如何更新文件的属性和数据
时间:2010-08-04
来源:互联网
我们经常说close(fd)系统调用执行完毕后,文件的数据都会写到硬盘上。
但是通过分析2.4.0的sys_close()代码(fs/open.c),发现两个问题:
1、inode对应的ext2_inode没有同步写回磁盘;
2、文件的脏的缓冲区即inode->i_dirty_buffers中的缓冲区没有同步写回磁盘。
sys_close()的调用流程:
-->filp_close()
-->fput()
(如果--file->f_count == 0)
-->dput()
(如果--dentry->d_count==0)并且(list_empty(&dentry->d_hash为真)
-->dentry_iput()
-->iput()
(可能是,我不太确定)
-->clear_inode()
-->invalidate_inode_buffers()
下面的就不写了。其中invalidate_inode_buffers()只是将inode->i_dirty_buffers指向的链表中的每一项从该链表中删除,并没有将脏的缓冲区立即写到硬盘上。
是不是我遗漏了什么?要不然两个问题如何解释?
但是通过分析2.4.0的sys_close()代码(fs/open.c),发现两个问题:
1、inode对应的ext2_inode没有同步写回磁盘;
2、文件的脏的缓冲区即inode->i_dirty_buffers中的缓冲区没有同步写回磁盘。
sys_close()的调用流程:
-->filp_close()
-->fput()
(如果--file->f_count == 0)
-->dput()
(如果--dentry->d_count==0)并且(list_empty(&dentry->d_hash为真)
-->dentry_iput()
-->iput()
(可能是,我不太确定)
-->clear_inode()
-->invalidate_inode_buffers()
下面的就不写了。其中invalidate_inode_buffers()只是将inode->i_dirty_buffers指向的链表中的每一项从该链表中删除,并没有将脏的缓冲区立即写到硬盘上。
是不是我遗漏了什么?要不然两个问题如何解释?
作者: panweiping 发布时间: 2010-08-04
1145 int filp_close(struct file *filp, fl_owner_t id)
1146 {
1147 int retval = 0;
1148
1149 if (!file_count(filp)) {
1150 printk(KERN_ERR "VFS: Close: file count is 0\n");
1151 return 0;
1152 }
1153
1154 if (filp->f_op && filp->f_op->flush)
1155 retval = filp->f_op->flush(filp, id);
1156
1157 dnotify_flush(filp, id);
1158 locks_remove_posix(filp, id);
1159 fput(filp);
1160 return retval;
1161 }
第1155行调用flush,不就是把数据同步到硬盘吗?
1146 {
1147 int retval = 0;
1148
1149 if (!file_count(filp)) {
1150 printk(KERN_ERR "VFS: Close: file count is 0\n");
1151 return 0;
1152 }
1153
1154 if (filp->f_op && filp->f_op->flush)
1155 retval = filp->f_op->flush(filp, id);
1156
1157 dnotify_flush(filp, id);
1158 locks_remove_posix(filp, id);
1159 fput(filp);
1160 return retval;
1161 }
第1155行调用flush,不就是把数据同步到硬盘吗?
作者: bigrat023 发布时间: 2010-08-05
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28