From 3f4b4fb333c6d27313970c23ceabdd9d9bb81a98 Mon Sep 17 00:00:00 2001 From: James Simmons 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 Reviewed-on: https://review.whamcloud.com/27280 Tested-by: Jenkins Reviewed-by: Dmitry Eremin Tested-by: Maloo Reviewed-by: Bob Glossman Reviewed-by: Jinshan Xiong Reviewed-by: Andreas Dilger --- 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 46d2ca8..77d6a98 100644 --- a/lustre/autoconf/lustre-core.m4 +++ b/lustre/autoconf/lustre-core.m4 @@ -2467,6 +2467,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 +],[ + 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 # # Lustre linux kernel checks @@ -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 b0993a1..7095955 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, -- 1.8.3.1