Whamcloud - gitweb
LU-12355 ldiskfs: Added ext4_iget_flags to ext4_iget 23/35023/5
authorShaun Tancheff <stancheff@cray.com>
Thu, 13 Jun 2019 14:14:41 +0000 (09:14 -0500)
committerOleg Drokin <green@whamcloud.com>
Thu, 20 Jun 2019 03:50:36 +0000 (03:50 +0000)
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 <stancheff@cray.com>
Reviewed-on: https://review.whamcloud.com/35023
Tested-by: Jenkins
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: James Simmons <uja.ornl@yahoo.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
config/lustre-build-ldiskfs.m4
lustre/osd-ldiskfs/osd_handler.c
lustre/osd-ldiskfs/osd_internal.h

index 32420b1..49d40c1 100644 (file)
@@ -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 <linux/fs.h>
+       #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])
index f4127a7..3d6af92 100644 (file)
@@ -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))
index 53d0cad..24d9e91 100644 (file)
@@ -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 */