nfs: resolve parent inode during inode_loc_fill

This commit resolves the parent inode in nfs_inode_loc_fill
if the inode has a resolved path.

Change-Id: If407c91c246b0b9f3349cedae0baec8bd6831d10
BUG: 872923
Signed-off-by: Rajesh Amaravathi <rajesh@redhat.com>
Reviewed-on: http://review.gluster.org/4157
Reviewed-by: Krishna Srinivas <krishna.zresearch@gmail.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
This commit is contained in:
Rajesh Amaravathi 2012-11-05 16:39:37 +05:30 committed by Vijay Bellur
parent 128514fcb7
commit d55acadd85
2 changed files with 59 additions and 0 deletions

57
tests/bugs/bug-872923.t Executable file
View File

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

View File

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