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 00000000000..6757846dcda --- /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 67509b54647..0fe6b34d7d5 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); |