statx returns an inconsistent result at first call on some files
Context
It may be related to the change of FUSE in Linux 6.6 https://www.phoronix.com/news/Linux-6.6-FUSE .
I have not figured out whether it is an issue of buildbox-fuse, libfuse3 or the kernel.
- Expected behaviour
statx
returns consistent results at every call on the same file.
- Current behaviour
statx
returns an inconsistent result at first call on some files.
- Steps to reproduce
- Boot into a 6.6+ kernel. I tested Fedora 6.6.13-100.fc38.x86_64 and 6.8.5-301.fc40.x86_64.
- git clone https://gitlab.com/freedesktop-sdk/freedesktop-sdk.git
- cd freedesktop-sdk
- git checkout f2fcf51c93db5a3ff72343bd461b081d19f5a3a3
podman run --rm -i -t --privileged --device /dev/fuse --volume ~/.cache/buildstream:/root/.cache/buildstream --volume ~/.config:/root/.config --volume $PWD:/src --workdir /src registry.gitlab.com/freedesktop-sdk/infrastructure/freedesktop-sdk-docker-images/bst2:a4dacc31afdf3c0c7348ff94e1d5e4493efd8a5e /bin/bash -i
- bst shell -b components/appstream-minimal.bst
- Paste a test program into
test-statx.cpp
#include <iostream>
#include <linux/stat.h>
#include <fcntl.h>
#include <sys/stat.h>
using namespace std;
int main(int argc, char *argv[]) {
if (argc <= 1) {
return 1;
}
struct statx statxbuf{};
int rc = statx(AT_FDCWD, argv[1], AT_STATX_SYNC_AS_STAT, STATX_ALL, &statxbuf);
cout << "rc: " << rc << " given mask: " << STATX_ALL << " mask: " << statxbuf.stx_mask << endl;
rc = statx(AT_FDCWD, argv[1], AT_STATX_SYNC_AS_STAT, STATX_ALL, &statxbuf);
cout << "rc: " << rc << " given mask: " << STATX_ALL << " mask: " << statxbuf.stx_mask << endl;
return 1;
}
- g++ -o test-statx ./test-statx.cpp
- ./test-statx-x86_64 data/org.freedesktop.appstream.cli.metainfo.xml
Actual result:
rc: 0 given mask: 4095 mask: 2047
rc: 0 given mask: 4095 mask: 6143
Expected result as on kernel < 6.6:
rc: 0 given mask: 4095 mask: 6143
rc: 0 given mask: 4095 mask: 6143
- Relevant Log / Screenshot
Task Description
Acceptance Criteria
statx
returns consistent results at every call on the same file with Linux kernel 6.6+.
Consider whether the following are required, and complete if so:
-
Unit tests -
Metrics -
Documentation update(s)
Edited by Robin Lee