commit 576ed4ae8cfebdbcc77a191c43271b02abeb7176 from: Sergey Bronnikov date: Sat Feb 27 16:10:37 2021 UTC Replace stat() with lstat() in FUSE wrapper for getattr(2) The reason is because after symlink request, FUSE automatically calls getattr() [1] and under current implementation using stat(), it stats the target of the link but not the link file itself. 1. https://github.com/libfuse/libfuse/wiki/Invariants Closes: #11 Closes: #37 commit - a819f13429a798a22dd464ed80904ed4b2c6befb commit + 576ed4ae8cfebdbcc77a191c43271b02abeb7176 blob - 358858390d94dd9aadfa4702ada5b813ad201860 blob + 73510b6f38b8aff400dfc36ae81d7bfaaae8f094 --- tests/test_unreliablefs.py +++ tests/test_unreliablefs.py @@ -96,7 +96,6 @@ def test_rmdir(setup_unreliablefs): assert name not in os.listdir(mnt_dir) assert name not in os.listdir(src_dir) -@pytest.mark.xfail(reason="gh-37") def test_symlink(setup_unreliablefs): mnt_dir, src_dir = setup_unreliablefs linkname = name_generator() blob - 4b13abfd2b3b0e6df3ec480743993fbf4d0acd18 blob + 29a5f19e7387f5bd67f87e79ce0785004f9755f5 --- unreliablefs_ops.c +++ unreliablefs_ops.c @@ -41,7 +41,7 @@ int unreliable_getattr(const char *path, struct stat * } memset(buf, 0, sizeof(struct stat)); - if (stat(path, buf) == -1) { + if (lstat(path, buf) == -1) { return -errno; } else { return 0;