Поддержка O_DIRECT в файловой системе Linux jffs2 - PullRequest
1 голос
/ 17 мая 2011

Я пытаюсь использовать O_DIRECT, чтобы открыть файл, и мы используем jffs2

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

Но я получаю только ошибку "неверный аргумент".Я также пробовал решения в этой ссылке SO , но безрезультатно.Конечно, я также добавил "-D_GNU_SOURCE" при создании исходного кода.

Я читал, что O_DIRECT не поддерживается в tmpfs, но не может найти поддержку или не поддержку jffs2.Если кто-то может дать мне доказательство или не-доказательство для поддержки jffs2 и / или чего-то другого, чего мне не хватает, чтобы заставить работать O_DIRECT.

примечание: все это произошло потому, что Linux, похоже, кеширует данные памяти самостоятельноя использую fread () / read ().И использовать system("echo 3 > /proc/sys/vm/drop_caches"); было бы слишком поздно, потому что я не хочу, чтобы ФС выделяла кеш-память в первую очередь.

Спасибо, Naze

1 Ответ

2 голосов
/ 17 мая 2011

jffs2 не поддерживает O_DIRECT.

Вы можете видеть в __dentry_open(), что для поддержки O_DIRECT файловая система должна предоставить direct_IO и / или get_xip_mem членов структуры address_space_operations. Вы также можете увидеть, что jffs2 не предоставляет этих членов .

Непонятно, почему вы так стремитесь избежать кеша страниц. Страницы в кеше страниц фактически «свободны» - они будут возвращены, когда для других целей потребуется больше памяти.

...