From 8ab3aa50a14f09f0f048d69b0dc087b1280befd0 Mon Sep 17 00:00:00 2001 From: Shaun Tancheff Date: Thu, 13 Jun 2019 09:14:41 -0500 Subject: [PATCH] LU-12355 ldiskfs: Added ext4_iget_flags to ext4_iget Kernel 4.19 introduced ext4_iget_flags and changed ext4_iget to require a flags argument. Use EXT4_IGET_HANDLE for stale inode checking by ext4/ldiskfs Linux-commit: 8a363970d1dc38c4ec4ad575c862f776f468d057 Test-Parameters: trivial Change-Id: Ic6cbe3eabcdbb1a506813d145fb2980dbed95e66 Signed-off-by: Shaun Tancheff Reviewed-on: https://review.whamcloud.com/35023 Tested-by: Jenkins Reviewed-by: Andreas Dilger Tested-by: Maloo Reviewed-by: James Simmons Reviewed-by: Oleg Drokin --- config/lustre-build-ldiskfs.m4 | 24 ++++++++++++++++++++++++ lustre/osd-ldiskfs/osd_handler.c | 4 ++-- lustre/osd-ldiskfs/osd_internal.h | 7 +++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/config/lustre-build-ldiskfs.m4 b/config/lustre-build-ldiskfs.m4 index 32420b1..49d40c1 100644 --- a/config/lustre-build-ldiskfs.m4 +++ b/config/lustre-build-ldiskfs.m4 @@ -241,6 +241,29 @@ ext4_i_crypt_info, [ ]) # LB_EXT4_HAVE_I_CRYPT_INFO # +# LB_LDISKFS_IGET_HAS_FLAGS_ARG +# +# kernel 4.19 commit 8a363970d1dc38c4ec4ad575c862f776f468d057 +# ext4_iget changed to a macro with 3 args was function with 2 args +# +AC_DEFUN([LB_LDISKFS_IGET_HAS_FLAGS_ARG], [ +tmp_flags="$EXTRA_KCFLAGS" +EXTRA_KCFLAGS="-Werror" +LB_CHECK_COMPILE([if ldiskfs_iget takes a flags argument], +ext4_iget_3args, [ + #include + #include "$EXT4_SRC_DIR/ext4.h" +],[ + int f = EXT4_IGET_SPECIAL; + (void)f; +],[ + AC_DEFINE(HAVE_LDISKFS_IGET_WITH_FLAGS, 1, + [if ldiskfs_iget takes a flags argument]) +]) +EXTRA_KCFLAGS="$tmp_flags" +]) # LB_LDISKFS_IGET_HAS_FLAGS_ARG + +# # LDISKFS_AC_PATCH_PROGRAM # # Determine which program should be used to apply the patches to @@ -323,6 +346,7 @@ AS_IF([test x$enable_ldiskfs != xno],[ LB_EXT4_BREAD_4ARGS LB_EXT4_HAVE_INFO_DQUOT LB_EXT4_HAVE_I_CRYPT_INFO + LB_LDISKFS_IGET_HAS_FLAGS_ARG AC_DEFINE(CONFIG_LDISKFS_FS_POSIX_ACL, 1, [posix acls for ldiskfs]) AC_DEFINE(CONFIG_LDISKFS_FS_SECURITY, 1, [fs security for ldiskfs]) AC_DEFINE(CONFIG_LDISKFS_FS_XATTR, 1, [extened attributes for ldiskfs]) diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c index f4127a7..3d6af92 100644 --- a/lustre/osd-ldiskfs/osd_handler.c +++ b/lustre/osd-ldiskfs/osd_handler.c @@ -423,7 +423,7 @@ struct inode *osd_iget(struct osd_thread_info *info, struct osd_device *dev, */ /* LASSERT(current->journal_info == NULL); */ - inode = ldiskfs_iget(osd_sb(dev), id->oii_ino); + inode = osd_ldiskfs_iget(osd_sb(dev), id->oii_ino); if (IS_ERR(inode)) { CDEBUG(D_INODE, "no inode: ino = %u, rc = %ld\n", id->oii_ino, PTR_ERR(inode)); @@ -559,7 +559,7 @@ static struct inode *osd_iget_check(struct osd_thread_info *info, */ again: - inode = ldiskfs_iget(osd_sb(dev), id->oii_ino); + inode = osd_ldiskfs_iget(osd_sb(dev), id->oii_ino); if (IS_ERR(inode)) { rc = PTR_ERR(inode); if (!trusted && (rc == -ENOENT || rc == -ESTALE)) diff --git a/lustre/osd-ldiskfs/osd_internal.h b/lustre/osd-ldiskfs/osd_internal.h index 53d0cad..24d9e91 100644 --- a/lustre/osd-ldiskfs/osd_internal.h +++ b/lustre/osd-ldiskfs/osd_internal.h @@ -877,6 +877,13 @@ static inline void i_projid_write(struct inode *inode, __u32 projid) } #endif +#ifdef HAVE_LDISKFS_IGET_WITH_FLAGS +# define osd_ldiskfs_iget(sb, ino) \ + ldiskfs_iget((sb), (ino), LDISKFS_IGET_HANDLE) +#else +# define osd_ldiskfs_iget(sb, ino) ldiskfs_iget((sb), (ino)) +#endif + #ifdef HAVE_LDISKFS_INFO_JINODE # define osd_attach_jinode(inode) ldiskfs_inode_attach_jinode(inode) #else /* HAVE_LDISKFS_INFO_JINODE */ -- 1.8.3.1