diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
index 46d2ca874846a175318308bb6f8c3670a31899c9..77d6a982d3498bef81e8e7a5ba77dfeafd3e4547 100644
--- a/lustre/autoconf/lustre-core.m4
+++ b/lustre/autoconf/lustre-core.m4
@@ -2466,6 +2466,25 @@ struct_posix_acl_xattr, [
 ])
 ]) # LC_STRUCT_POSIX_ACL_XATTR
 
+#
+# LC_IOP_GENERIC_READLINK
+#
+# Kernel version 4.10 commit dfeef68862edd7d4bafe68ef7aeb5f658ef24bb5
+# removed generic_readlink from individual file systems
+#
+AC_DEFUN([LC_IOP_GENERIC_READLINK], [
+LB_CHECK_COMPILE([if 'generic_readlink' still exist],
+inode_ops_readlink, [
+	#include <linux/fs.h>
+],[
+	struct inode_operations iop;
+	iop.readlink = generic_readlink;
+],[
+	AC_DEFINE(HAVE_IOP_GENERIC_READLINK, 1,
+		[generic_readlink has been removed])
+])
+]) # LC_IOP_GENERIC_READLINK
+
 #
 # LC_PROG_LINUX
 #
@@ -2670,6 +2689,9 @@ AC_DEFUN([LC_PROG_LINUX], [
 	# 4.9
 	LC_GROUP_INFO_GID
 
+	# 4.10
+	LC_IOP_GENERIC_READLINK
+
 	#
 	AS_IF([test "x$enable_server" != xno], [
 		LC_FUNC_DEV_SET_RDONLY
diff --git a/lustre/llite/symlink.c b/lustre/llite/symlink.c
index b0993a12718a97b61c7141c7f15d714e091adfe4..7095955d6da8fec83fb5f9a0111785289caaf2b8 100644
--- a/lustre/llite/symlink.c
+++ b/lustre/llite/symlink.c
@@ -221,7 +221,9 @@ static const char *ll_follow_link(struct dentry *dentry, void **cookie)
 #endif /* HAVE_SYMLINK_OPS_USE_NAMEIDATA */
 
 struct inode_operations ll_fast_symlink_inode_operations = {
+#ifdef HAVE_IOP_GENERIC_READLINK
 	.readlink	= generic_readlink,
+#endif
 	.setattr	= ll_setattr,
 #ifdef HAVE_IOP_GET_LINK
 	.get_link	= ll_get_link,