[Gluster-users] unexpected ENOENT on symlinks

Ravishankar N ravishankar at redhat.com
Fri Jul 18 07:14:45 UTC 2014


On 07/17/2014 07:44 PM, Willem Jan Palenstijn wrote:
> Hi,
>
> I'm running into unexpected behaviour with symlinks on a glusterfs volume
> (3.5.1 on Arch Linux), where sometimes accessing a symlink on the volume
> results in ENOENT (No such file or directory).
>
> The following consistently reproduces it for me from a shell. At the end of
> this post I've also included a short snippet of C that shows this inconsistency
> between repeated readlink() syscalls.
>
>
> $ 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
>
>
> Is this indeed unexpected, and if so, what would be a good next step to
> investigate this?
>
> The setup is glusterfs 3.5.1 on Arch Linux, with a stripe glusterfs volume
> consisting of two bricks.

Hi Willem,
http://review.gluster.org/#/c/8153/ fixes the issue 
<https://bugzilla.redhat.com/show_bug.cgi?id=1111454>. It should be 
available in the 3.5.2 release.
Thanks,
Ravi

>
> Thanks,
> Willem Jan
>
>
>
> ----
>
> $ gcc -o t test_glusterfs_symlink.c && ./t
> First readlink: -1 (errno 2)
> Second readlink: 1
>
> $ cat test_glusterfs_symlink.c
> #include <unistd.h>
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <stdio.h>
> #include <dirent.h>
> #include <errno.h>
>
> 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;
> }
>
>
> _______________________________________________
> Gluster-users mailing list
> Gluster-users at gluster.org
> http://supercolony.gluster.org/mailman/listinfo/gluster-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://supercolony.gluster.org/pipermail/gluster-users/attachments/20140718/b0bdcc17/attachment.html>


More information about the Gluster-users mailing list