我们做嵌入式产品的,对掉电保护都很重视,在nand flash上使用jffs2文件系统,经常在写入关键数据后要调用fsync()来保证把数据写入flash,但我看了下代码觉得对于jffs2来讲sys_fsync()效率太低了,应该修改一下,不知道大家有什么意见?
asmlinkage long sys_fsync(unsigned int fd)
{
。。。
/* We need to protect against concurrent writers.. */
down(&inode->i_sem);
ret = filemap_fdatasync(inode->i_mapping);
//在上面这个函数里面,已经把该文件在内存里面的脏页面都刷新到flash上去了,而且是以4KB为单位刷新所有的脏页面,写flash操作很大。
//这个操作对于jffs2文件系统来说是多余的,因为jffs2是日志式文件系统,并没有原地改写flash内容
err = file->f_op->fsync(file, dentry, 0);
//然后,这里又把jffs2的缓冲buffer写入flash。
if (err && !ret)
ret = err;
err = filemap_fdatawait(inode->i_mapping);
if (err && !ret)
ret = err;
up(&inode->i_sem);
。。。
}