当前位置: 技术问答>linux和unix
关于写文件自动sync的问题
来源: 互联网 发布时间:2015-10-06
本文导语: 我现在要完善一个在2.4.21内核上开发的一个SD卡的驱动。卡上的文件系统是FAT32。我知道在mount-flags中有一个标志叫“MS_SYNCHRONOUS”(在中定义)。注释说如果这个标志被置起,写会被立即同步(Writes are synced at once...
我现在要完善一个在2.4.21内核上开发的一个SD卡的驱动。卡上的文件系统是FAT32。我知道在mount-flags中有一个标志叫“MS_SYNCHRONOUS”(在中定义)。注释说如果这个标志被置起,写会被立即同步(Writes are synced at once)。
于是,我在mount时的参数中加上了“MS_SYNCHRONOUS”标志。但是效果并不如我的预期:
用“cp”命令往卡上写一个很小的文件(10 bytes),文件内容会被立即写到卡上(这是“MS_SYNCHRONOUS”标志的作用),但是,还有几个block(1个 block 512字节)不会自动立即写到卡上,除非手工打“sync”命令。经查,不能自动被sync的似乎是FAT表和directory entry 等等。
怎么才能使所有的信息都能自动sync到卡上呢?期待各位的高见。
于是,我在mount时的参数中加上了“MS_SYNCHRONOUS”标志。但是效果并不如我的预期:
用“cp”命令往卡上写一个很小的文件(10 bytes),文件内容会被立即写到卡上(这是“MS_SYNCHRONOUS”标志的作用),但是,还有几个block(1个 block 512字节)不会自动立即写到卡上,除非手工打“sync”命令。经查,不能自动被sync的似乎是FAT表和directory entry 等等。
怎么才能使所有的信息都能自动sync到卡上呢?期待各位的高见。
|
我也遇到同样的问题,由于VFS比较复杂,还没有仔细分析,我的临时办法是修改fs/buffer.c文件中函数balance_dirty_state,令它始终return 1就可以了,如果对于实时性要求不高的,可以把语句dirty *= 100;中的100适当增大。这样做将对所有文件系统一视同仁。