diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4 index a7a95a772c..6dfab203ed 100644 --- a/lustre/autoconf/lustre-core.m4 +++ b/lustre/autoconf/lustre-core.m4 @@ -2728,6 +2728,23 @@ super_setup_bdi_name, [ ]) ]) # LC_SUPER_SETUP_BDI_NAME +# +# Kernel version 4.12 +# atomic64_t i_version +# +AC_DEFUN([LC_ATOMIC_IVERSION], [ +LB_CHECK_COMPILE([if inode.i_version is atomic64_t], +atomic_iversion, [ + #include +],[ + struct inode inode; + u64 version = inode_query_iversion(&inode); +],[ + AC_DEFINE(HAVE_ATOMIC_IVERSION, 1, + [i_version is atomic64_t]) +]) +]) # LC_ATOMIC_IVERSION + # # LC_PROG_LINUX # @@ -2953,6 +2970,7 @@ AC_DEFUN([LC_PROG_LINUX], [ # 4.12 LC_CURRENT_TIME LC_SUPER_SETUP_BDI_NAME + LC_ATOMIC_IVERSION # AS_IF([test "x$enable_server" != xno], [ diff --git a/lustre/include/lustre_compat.h b/lustre/include/lustre_compat.h index 37cca5a097..3d44e1197b 100644 --- a/lustre/include/lustre_compat.h +++ b/lustre/include/lustre_compat.h @@ -40,6 +40,15 @@ #include #include #include +#ifdef HAVE_ATOMIC_IVERSION +#include +#else +static inline u64 +inode_query_iversion(struct inode *inode) +{ + return inode->i_version; +} +#endif #include #include diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c index 5851cd899a..6e910df188 100644 --- a/lustre/llite/dir.c +++ b/lustre/llite/dir.c @@ -393,7 +393,7 @@ static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir) filp->f_pos = pos; #endif ll_finish_md_op_data(op_data); - filp->f_version = inode->i_version; + filp->f_version = inode_query_iversion(inode); out: if (!rc)