diff options
| -rwxr-xr-x | tests/bugs/bug-872923.t | 57 | ||||
| -rw-r--r-- | xlators/nfs/server/src/nfs-common.c | 2 | 
2 files changed, 59 insertions, 0 deletions
diff --git a/tests/bugs/bug-872923.t b/tests/bugs/bug-872923.t new file mode 100755 index 000000000..6757846dc --- /dev/null +++ b/tests/bugs/bug-872923.t @@ -0,0 +1,57 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc + +cleanup; + +TEST glusterd +TEST pidof glusterd +TEST $CLI volume info +TEST $CLI volume create $V0 replica 2 $H0:$B0/brick0 $H0:$B0/brick1 +TEST $CLI volume start $V0 +sleep 5 + +mount -t nfs -o vers=3,nolock `hostname`:/$V0 $N0 + +cd $N0 +mkdir test_hardlink_self_heal; +cd test_hardlink_self_heal; + +for i in `seq 1 5`; +do +    mkdir dir.$i; +    for j in `seq 1 10`; +    do +        dd if=/dev/zero of=dir.$i/file.$j bs=1k count=$j > /dev/null 2>&1; +    done; +done; + +cd .. +kill  `cat /var/lib/glusterd/vols/$V0/run/$H0-d-backends-brick0.pid` +sleep 2 + + +cd test_hardlink_self_heal; + +RET=0 +for i in `seq 1 5`; +do +    for j in `seq 1 10`; +    do +        ln dir.$i/file.$j dir.$i/link_file.$j > /dev/null 2>&1; +        RET=$? +        if [ $RET -ne 0 ]; then +           break; +        fi +    done ; +    if [ $RET -ne 0 ]; then +        break; +    fi +done; + +cd +umount $N0 + +EXPECT "0" echo $RET; + +cleanup; diff --git a/xlators/nfs/server/src/nfs-common.c b/xlators/nfs/server/src/nfs-common.c index 67509b546..0fe6b34d7 100644 --- a/xlators/nfs/server/src/nfs-common.c +++ b/xlators/nfs/server/src/nfs-common.c @@ -221,6 +221,8 @@ nfs_inode_loc_fill (inode_t *inode, loc_t *loc, int how)                  snprintf (tmp_path, sizeof (tmp_path), "<gfid:%s>",                            uuid_utoa (loc->gfid));                  resolvedpath = gf_strdup (tmp_path); +        } else { +                parent = inode_parent (inode, loc->pargfid, NULL);          }          ret = nfs_loc_fill (loc, inode, parent, resolvedpath);  | 
