From 3f4b4fb333c6d27313970c23ceabdd9d9bb81a98 Mon Sep 17 00:00:00 2001
From: James Simmons <uja.ornl@yahoo.com>
Date: Wed, 24 May 2017 19:12:41 -0400
Subject: [PATCH] LU-9558 llite: generic_readlink is no longer exported

Starting in linux kernel 4.10 if inode_operation's
readlink field is NULL then it is assumed to be using
generic_readlink. Since this is the case the function
generic_readlink is no longer visible to individual
file systems.

Linux-commit: dfeef68862edd7d4bafe68ef7aeb5f658ef24bb5

Change-Id: I847844cc53f7ae80d9d212590f5026a92da0107e
Signed-off-by: James Simmons <uja.ornl@yahoo.com>
Reviewed-on: https://review.whamcloud.com/27280
Tested-by: Jenkins
Reviewed-by: Dmitry Eremin <dmitry.eremin@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Bob Glossman <bob.glossman@intel.com>
Reviewed-by: Jinshan Xiong <jinshan.xiong@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
---
 lustre/autoconf/lustre-core.m4 | 22 ++++++++++++++++++++++
 lustre/llite/symlink.c         |  2 ++
 2 files changed, 24 insertions(+)

diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
index 46d2ca8748..77d6a982d3 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 b0993a1271..7095955d6d 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,
-- 
GitLab