绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
[文件系统] 一个简单文件系统的实现(8)
2020-05-21 16:40:01

普通文件操作(在file.c中定义),只需要实现一个gt_sync_file

const struct file_operations gt_file_operations ={
.llseek =generic_file_llseek,
.read =do_sync_read,
.write =do_sync_write,
.aio_read =generic_file_aio_read,
.aio_write =generic_file_aio_write,
.mmap =generic_file_mmap,
.open =generic_file_open,
.fsync =gt_sync_file,
};

来看看gt_sync_file(在file.c中定义)

int gt_sync_file(struct file *file,struct dentry *dentry,int datasync){
struct inode *inode =dentry->d_inode;
int err,ret;
ret=sync_mapping_buffers(inode->i_mapping);
if(!(inode->i_state&I_DIRTY))
return ret;
if(datasync && !(inode->i_state&I_DIRTY_DATASYNC))
return ret;
err=gt_sync_inode(inode);
if(ret==)
ret=err;
return ret;
}

函数调用gt_sync_inode(在inode.c中定义)

int gt_sync_inode(struct inode *inode){
int ret=;
struct buffer_head *bh;
bh=gt_update_inode(inode);//获取到磁盘索引节点所在的缓冲区
if(bh && buffer_dirty(bh)){//如果为脏,则同步
sync_dirty_buffer(bh);
if(buffer_req(bh)&&!buffer_uptodate(bh)){
printk("IO error syncing gt inode\n");
ret=-1;
}
}else if(!bh)
ret=-1;
brelse(bh);
return ret;
}


文章来源CU社区:[文件系统] 一个简单文件系统的实现

分享好友

分享这个小栈给你的朋友们,一起进步吧。

内核源码
创建时间:2020-05-18 13:36:55
内核源码精华帖内容汇总
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 飘絮絮絮丶
    专家
戳我,来吐槽~