[Gluster-users] unexpected ENOENT on symlinks

Jeurissen Ben ben.jeurissen at uantwerpen.be
Mon Jul 28 12:40:01 UTC 2014

That worked! Thanks!

Ben Jeurissen, Ph.D.
Post-doctoral researcher
Vision Lab, Dept. of Physics
University of Antwerp
Universiteitsplein 1, N.1.18
B-2610 Wilrijk, Belgium
Phone: +32 3 265 24 77
Email: ben.jeurissen at uantwerpen.be
Url: http://visielab.ua.ac.be/people/ben-jeurissen
From: Ravishankar N [ravishankar at redhat.com]
Sent: 18 July 2014 09:14
To: Willem Jan Palenstijn; gluster-users at gluster.org
Cc: Jeurissen Ben
Subject: Re: [Gluster-users] unexpected ENOENT on symlinks

On 07/17/2014 07:44 PM, Willem Jan Palenstijn wrote:


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.

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);


        return 0;

Gluster-users mailing list
Gluster-users at gluster.org<mailto:Gluster-users at gluster.org>

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

More information about the Gluster-users mailing list