glusterfs 3.5.1 on Arch Linux, with a stripe glusterfs volume consisting of two bricks. Shell: $ ln -s x y $ ls -al ls: cannot read symbolic link y: No such file or directory total 16 drwxr-xr-x 2 wjp wjp 4096 Jul 17 15:40 . drwx------ 7 wjp wjp 4096 Jul 17 15:40 .. lrwxrwxrwx 1 wjp wjp 1 Jul 17 15:40 y $ ls -l y lrwxrwxrwx 1 wjp wjp 1 Jul 17 15:40 y -> x C: $ gcc -o t test_glusterfs_symlink.c && ./t First readlink: -1 (errno 2) Second readlink: 1 $ cat test_glusterfs_symlink.c #include #include #include #include #include #include int main() { FILE *f; int r1, r2, r3, e2, e3; struct dirent *p; DIR *d; char buf[2]; struct stat s; r1 = symlink("x", "y"); if (r1 != 0) { printf("Failed to create symlink\n"); return -1; } d = opendir("."); p = readdir(d); r2 = readlink("y", buf, 2); e2 = errno; r3 = readlink("y", buf, 2); e3 = errno; printf("First readlink: %d", r2); if (r2 < 0) printf(" (errno %d)", e2); printf("\nSecond readlink: %d", r3); if (r3 < 0) printf(" (errno %d)", e3); printf("\n"); unlink("y"); return 0; }