+# LB_EXT4_BREAD_4ARGS
+#
+# 3.18 ext4_bread has 4 arguments
+#
+AC_DEFUN([LB_EXT4_BREAD_4ARGS], [
+LB_CHECK_COMPILE([if ext4_bread takes 4 arguments],
+ext4_bread, [
+ #include <linux/fs.h>
+ #include "$EXT4_SRC_DIR/ext4.h"
+],[
+ ext4_bread(NULL, NULL, 0, 0);
+],[
+ AC_DEFINE(HAVE_EXT4_BREAD_4ARGS, 1, [ext4_bread takes 4 arguments])
+])
+]) # LB_EXT4_BREAD_4ARGS
+
+#
+# LB_EXT4_HAVE_INFO_DQUOT
+#
+# in linux 4.4 i_dqout is in ext4_inode_info, not in struct inode
+#
+AC_DEFUN([LB_EXT4_HAVE_INFO_DQUOT], [
+LB_CHECK_COMPILE([if i_dquot is in ext4_inode_info],
+ext4_info_dquot, [
+ #include <linux/fs.h>
+ #include <linux/quota.h>
+ #include "$EXT4_SRC_DIR/ext4.h"
+],[
+ struct ext4_inode_info in;
+ struct dquot *dq;
+
+ dq = in.i_dquot[0];
+],[
+ AC_DEFINE(HAVE_EXT4_INFO_DQUOT, 1, [i_dquot is in ext4_inode_info])
+])
+]) # LB_EXT4_HAVE_INFO_DQUOT
+
+#
+# LB_EXT4_HAVE_I_CRYPT_INFO
+#
+# in linux 4.8 i_crypt_info moved from ext4_inode_info to struct inode
+#
+# Determine if we need to enable CONFIG_LDISKFS_FS_ENCRYPTION.
+# If we have i_crypt_info in ext4_inode_info, the config option
+# should be enabled to make the ldiskfs module compilation happy.
+# Otherwise i_crypy_info is in struct inode, we need to check kernel
+# config option to determine that.
+#
+AC_DEFUN([LB_EXT4_HAVE_I_CRYPT_INFO], [
+LB_CHECK_COMPILE([if i_crypt_info is in ext4_inode_info],
+ext4_i_crypt_info, [
+ #define CONFIG_EXT4_FS_ENCRYPTION 1
+ #include <linux/fs.h>
+ #include "$EXT4_SRC_DIR/ext4.h"
+],[
+ struct ext4_inode_info in;
+
+ in.i_crypt_info = NULL;
+],[
+ AC_DEFINE(
+ CONFIG_LDISKFS_FS_ENCRYPTION, 1,
+ [enable encryption for ldiskfs]
+ )
+],[
+ LB_CHECK_CONFIG([EXT4_FS_ENCRYPTION],[
+ AC_DEFINE(
+ CONFIG_LDISKFS_FS_ENCRYPTION, 1,
+ [enable encryption for ldiskfs]
+ )
+ ])
+])
+]) # 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
+
+#