Im trying to use O_DIRECT to open a file and we’re using jffs2
fd = open(filename, O_RDONLY|O_DIRECT|O_SYNC);
But i only get an "invalid argument" error.
I have also tried the solutions
in this SO link but to no avail.
Ofcourse i have also put in "-D_GNU_SOURCE" in building the source.
I’ve read that O_DIRECT is not supported on tmpfs, but couldn’t find support or un-support for jffs2.
If someone could give me proof or un-proof for jffs2 support and/or any other thing i’m missing to make O_DIRECT work.
note:
This all happened because Linux seem to cache memory data on its own when i use fread()/read().
And using system("echo 3 > /proc/sys/vm/drop_caches"); would be too late because I don’t want the FS allocating cache memory in the first place.
Thanks,
Naze
jffs2 does not support
O_DIRECT.You can see in
__dentry_open()that in order to supportO_DIRECT, a filesystem must supply thedirect_IOand/orget_xip_memmembers of theaddress_space_operationsstruct. You can likewise see that jffs2 does not supply these members.It is not clear why you are so keen to avoid the page cache. Pages in the page cache are effectively “free” – they will be reclaimed when more memory is required for other uses.