From: Shaun Tancheff Date: Thu, 22 Jul 2021 07:31:30 +0000 (-0500) Subject: LU-14787 libcfs: Proved an abstraction for AS_EXITING X-Git-Tag: 2.14.54~8 X-Git-Url: https://git.whamcloud.com/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F70%2F44070%2F6;p=fs%2Flustre-release.git LU-14787 libcfs: Proved an abstraction for AS_EXITING Linux kernel v3.14-7405-g91b0abe36a7b added AS_EXITING flag AS_EXITING flag is set while address_space mapping is exiting. Provide an abstraction mapping_clear_exiting() to clear the AS_EXITING flag. This balances the kernel mapping_set_existing() and is used for older kernels when enum mapping_flags does not include AS_EXITING. HPE-bug-id: LUS-9977 Signed-off-by: Shaun Tancheff Change-Id: Ib3101b7e3eb8a7fcfd0012ac27367f1e65537f5d Reviewed-on: https://review.whamcloud.com/44070 Reviewed-by: Andreas Dilger Reviewed-by: Bobi Jam Tested-by: jenkins Reviewed-by: James Simmons Tested-by: Maloo --- diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4 index d58062e..6407f53 100644 --- a/libcfs/autoconf/lustre-libcfs.m4 +++ b/libcfs/autoconf/lustre-libcfs.m4 @@ -197,6 +197,29 @@ shrinker_count_objects, [ ]) # LIBCFS_SHRINKER_COUNT # +# LIBCFS_HAVE_MAPPING_AS_EXITING_FLAG +# +# v3.14-7405-g91b0abe36a7b added AS_EXITING flag with +# mapping_exiting() and mapping_set_exiting() +# +AC_DEFUN([LIBCFS_HAVE_MAPPING_AS_EXITING_FLAG], [ +m4_pattern_allow([AS_EXITING]) +tmp_flags="$EXTRA_KCFLAGS" +EXTRA_KCFLAGS="-Werror" +LB_CHECK_COMPILE([if enum mapping_flags has AS_EXITING flag], +mapping_exiting_exists, [ + #include +],[ + enum mapping_flags flag = AS_EXITING; + (void)flag; +],[ + AC_DEFINE(HAVE_MAPPING_AS_EXITING_FLAG, 1, + [enum mapping_flags has AS_EXITING flag]) +]) +EXTRA_KCFLAGS="$tmp_flags" +]) # LIBCFS_HAVE_MAPPING_AS_EXITING_FLAG + +# # LIBCFS_IOV_ITER_HAS_TYPE # # kernel 3.15-rc4 commit 71d8e532b1549a478e6a6a8a44f309d050294d00 @@ -1660,6 +1683,7 @@ LIBCFS_KTIME_BEFORE LIBCFS_KTIME_COMPARE LIBCFS_SHRINKER_COUNT # 3.15 +LIBCFS_HAVE_MAPPING_AS_EXITING_FLAG LIBCFS_IOV_ITER_HAS_TYPE # 3.16 LIBCFS_HAVE_NS_TO_TIMESPEC64 diff --git a/libcfs/include/libcfs/linux/linux-fs.h b/libcfs/include/libcfs/linux/linux-fs.h index e830368..6ef6b07 100644 --- a/libcfs/include/libcfs/linux/linux-fs.h +++ b/libcfs/include/libcfs/linux/linux-fs.h @@ -40,6 +40,7 @@ #include #include #include +#include #ifndef HAVE_FILE_DENTRY static inline struct dentry *file_dentry(const struct file *file) @@ -76,4 +77,11 @@ static inline struct dentry *file_dentry(const struct file *file) #define proc_get_unmapped_area get_unmapped_area #endif +static inline void mapping_clear_exiting(struct address_space *mapping) +{ +#ifdef HAVE_MAPPING_AS_EXITING_FLAG + clear_bit(AS_EXITING, &mapping->flags); +#endif +} + #endif diff --git a/lustre/llite/vvp_object.c b/lustre/llite/vvp_object.c index 8fac513..2413da9 100644 --- a/lustre/llite/vvp_object.c +++ b/lustre/llite/vvp_object.c @@ -167,7 +167,7 @@ static int vvp_prune(const struct lu_env *env, struct cl_object *obj) } ll_truncate_inode_pages_final(inode); - clear_bit(AS_EXITING, &inode->i_mapping->flags); + mapping_clear_exiting(inode->i_mapping); RETURN(0); }