On 02/17/22 14:12, Richard W.M. Jones wrote:
On Thu, Feb 17, 2022 at 01:41:04PM +0100, Laszlo Ersek wrote:
> I've got a patch for the md-create chunk issue, and passed --disable-php
> to ./configure. Now the "test-fuse" case is failing with:
>
> 01: checking initial files exist
> 02: checking initial files contain expected content
> 03: checking file modes and sizes of initial content
> 04: checking unlink
> libguestfs: error: lstatns: /new: No such file or directory
> 05: checking symbolic link
> libguestfs: error: lstatns: /symlink: No such file or directory
> 06: checking readlink
> 07: checking hard link
> libguestfs: error: lstatns: /link: No such file or directory
> nlink of 'hello.txt' was 1 (expected 2)
> test_fuse() returned -1
> /usr/sbin/fuser /tmp/testfusemUdOym
> guestunmount /tmp/testfusemUdOym
>
> Should I disable FUSE as well?
I have these two skips:
export SKIP_TEST_FUSE_UMOUNT_RACE_SH=1
export SKIP_TEST_GUESTMOUNT_FD=1
However I don't think the should affect this particular test, so there
must be some other problem.
Using this might help to diagnose it:
LIBGUESTFS_DEBUG=1 LIBGUESTFS_TRACE=1 make check -C fuse
It seems to be related to caching. I couldn't narrow it down very well
because there seem to be two levels of caching, one from "standard
FUSE", another from "lib/fuse.c" ("we also implement a readdir
cache").
Regardless, blocking the test program right after the fork(), with a
loop on a volatile int dummy, attaching separate gdb instances to both
child and parent, and unblocking both loops, I can successfully step
through the test case. The difference is apparently how much time passes
between the various link, stat, etc calls.
I've tried adding "GUESTFS_MOUNT_LOCAL_CACHETIMEOUT, 0" to
guestfs_mount_local(), but it made no difference.
We already have a caching-related "#if 0" in this test case; I think
it's more of the same.
Thanks
Laszlo