diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c
index 4e923ece1e09c3a44fac8342f35dadbbe71564be..4a350ec2dbb3f5a379e8e8eda9dd81314e896ef5 100644
--- a/fs/orangefs/inode.c
+++ b/fs/orangefs/inode.c
@@ -268,17 +268,15 @@ int orangefs_getattr(struct vfsmount *mnt,
 		     "orangefs_getattr: called on %s\n",
 		     dentry->d_name.name);
 
-	/*
-	 * Similar to the above comment, a getattr also expects that all
-	 * fields/attributes of the inode would be refreshed. So again, we
-	 * dont have too much of a choice but refresh all the attributes.
-	 */
 	ret = orangefs_inode_getattr(inode, ORANGEFS_ATTR_SYS_ALL_NOHINT, 0);
 	if (ret == 0) {
 		generic_fillattr(inode, kstat);
+
 		/* override block size reported to stat */
 		orangefs_inode = ORANGEFS_I(inode);
 		kstat->blksize = orangefs_inode->blksize;
+
+		inode->i_link = ORANGEFS_I(dentry->d_inode)->link_target;
 	} else {
 		/* assume an I/O error and flag inode as bad */
 		gossip_debug(GOSSIP_INODE_DEBUG,
diff --git a/fs/orangefs/symlink.c b/fs/orangefs/symlink.c
index 2b8541a7fc43d0bfdb9241594422046d699f11fc..6418dd6386801a366b7df9012b11b61edf40d9c3 100644
--- a/fs/orangefs/symlink.c
+++ b/fs/orangefs/symlink.c
@@ -8,22 +8,9 @@
 #include "orangefs-kernel.h"
 #include "orangefs-bufmap.h"
 
-static const char *orangefs_follow_link(struct dentry *dentry, void **cookie)
-{
-	char *target =  ORANGEFS_I(dentry->d_inode)->link_target;
-
-	gossip_debug(GOSSIP_INODE_DEBUG,
-		     "%s: called on %s (target is %p)\n",
-		     __func__, (char *)dentry->d_name.name, target);
-
-	*cookie = target;
-
-	return target;
-}
-
 struct inode_operations orangefs_symlink_inode_operations = {
 	.readlink = generic_readlink,
-	.follow_link = orangefs_follow_link,
+	.get_link = simple_get_link,
 	.setattr = orangefs_setattr,
 	.getattr = orangefs_getattr,
 	.listxattr = orangefs_listxattr,