Hello,
I see that you have added multi-queue support for virtio-fs, thanks for this
work.
From your patch's commit log, your host is x86-64, dpu is arm64, but there're
differences about O_DIRECT and O_DIRECTORY between these two architectures.
Test program:
#define _GNU_SOURCE
#include <stdio.h>
#include <fcntl.h>
int main(void)
{
printf("O_DIRECT:%o\n", O_DIRECT);
printf("O_DIRECTORY:%o\n", O_DIRECTORY);
return 0;
}
In x86-64, this test program outputs:
O_DIRECT:40000
O_DIRECTORY:200000
But in arm64, it outpus:
O_DIRECT:200000
O_DIRECTORY:40000
In kernel fuse module, fuse_create_in->flags will used to hold open(2)'s flags,
then
a O_DIRECT flag from host(x86) would be treated as O_DIRECTORY in dpu(arm64),
which
seems a serious bug.
From your fio job, you use libaio engine, so it's assumed that direct-io is
enabled, so I wonder why you don't get errors. Could you please try below
command in your virtio-fs mount point:
dd if=/dev/zero of=tst_file bs=4096 count=1 oflag=direct
to see whether it occurs any error.
Regards,
Xiaoguang Wang