首页 文章

对jffs2 Linux文件系统的O_DIRECT支持

提问于
浏览
1

我试图使用O_DIRECT打开一个文件,我们正在使用jffs2

fd = open(filename, O_RDONLY|O_DIRECT|O_SYNC);

但我只得到"invalid argument"错误 . 我也尝试过解决方案in this SO link但无济于事 . 当然,我也在构建源代码时加入"-D_GNU_SOURCE" .

我已经读过tmpfs不支持O_DIRECT,但找不到支持或不支持jffs2 . 如果有人可以给我证明或不证明jffs2支持和/或任何其他我缺少的东西使O_DIRECT工作 .

注意:这一切都发生了,因为当我使用fread()/ read()时,Linux似乎自己缓存内存数据 . 使用 system("echo 3 > /proc/sys/vm/drop_caches"); 会为时已晚,因为我不希望FS首先分配缓存 .

谢谢,纳泽

1 回答

  • 2

    jffs2不支持 O_DIRECT .

    can see in __dentry_open()为了支持 O_DIRECT ,文件系统必须提供 address_space_operations 结构的 direct_IO 和/或 get_xip_mem 成员 . 你也可以看到jffs2 does not supply these members .

    目前尚不清楚为什么你如此热衷于避免页面缓存 . 页面缓存中的页面实际上是“免费的” - 当其他用途需要更多内存时,它们将被回收 .

相关问题