Use the ->iterate_shared() method for readdir in llite, which has
been available since kernel commit v4.6-rc3-29-g6192269.
Remove duplicate autoconf check for the "iterate_shared" method.
Fixes:
e41bdca7559 ("LU-11071 build: Add server build support for Ubuntu 18.04")
Test-Parameters: clientdistro=sles12sp3
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: I4dcec7c8ce1a5dbcc1e0ebc74ac47d1b7a4cab07
Reviewed-on: https://review.whamcloud.com/34556
Reviewed-by: Shaun Tancheff <stancheff@cray.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
#
# LC_FOP_ITERATE_SHARED
#
-# Kernel version 4.7 adds iterate_shared method to file_operations
+# Kernel v4.6-rc3-29-g6192269 adds iterate_shared method to file_operations
#
AC_DEFUN([LC_FOP_ITERATE_SHARED], [
LB_CHECK_COMPILE([if 'file_operations' has 'iterate_shared'],
]) # LC_FOP_ITERATE_SHARED
#
-# LC_FOPS_ITERATE_SHARED
-#
-# 4.7 commit ae05327a00fd47c34dfe25294b359a3f3fef96e8
-# ext4: switch to ->iterate_shared()
-# this replaces ext4_dir_operations iterate with iterate_shared.
-# dir_relaxed_shared() was also added in this commit, so we can
-# use that function to verify that the ext4_dir_operations is using
-# iterate_shared.
-#
-AC_DEFUN([LC_FOPS_ITERATE_SHARED], [
-LB_CHECK_COMPILE([if ext4_dir_operations uses iterate_shared],
-iterate_shared, [
- #include <linux/fs.h>
-],[
- ((struct file_operations *)0)->iterate_shared(NULL, NULL);
- dir_relax_shared(NULL);
-],[
- AC_DEFINE(HAVE_ITERATE_SHARED, 1,
- ['iterate_shared' is available])
-])
-]) # LC_FOPS_ITERATE_SHARED
-
-#
# LC_HAVE_POSIX_ACL_VALID_USER_NS
#
# 4.8 posix_acl_valid takes struct user_namespace
LC_D_IN_LOOKUP
LC_DIRECTIO_2ARGS
LC_GENERIC_WRITE_SYNC_2ARGS
- LC_FOPS_ITERATE_SHARED
+ LC_FOP_ITERATE_SHARED
# 4.8
LC_HAVE_POSIX_ACL_VALID_USER_NS
}
#endif
+#ifndef HAVE_FOP_ITERATE_SHARED
+#define iterate_shared iterate
+#endif
+
#ifdef HAVE_DIRTY_INODE_HAS_FLAG
# define ll_dirty_inode(inode, flag) (inode)->i_sb->s_op->dirty_inode((inode), flag)
#else
.release = ll_dir_release,
.read = generic_read_dir,
#ifdef HAVE_DIR_CONTEXT
- .iterate = ll_iterate,
+ .iterate_shared = ll_iterate,
#else
.readdir = ll_readdir,
#endif
oclb.oclb_items = 0;
#ifdef HAVE_DIR_CONTEXT
oclb.ctx.pos = filp->f_pos;
-#ifdef HAVE_ITERATE_SHARED
rc = fops->iterate_shared(filp, &oclb.ctx);
-#else
- rc = fops->iterate(filp, &oclb.ctx);
-#endif
filp->f_pos = oclb.ctx.pos;
#else
rc = fops->readdir(filp, &oclb, osd_stripe_dir_filldir);
#ifdef HAVE_DIR_CONTEXT
buf.ctx.pos = filp->f_pos;
-#ifdef HAVE_ITERATE_SHARED
rc = inode->i_fop->iterate_shared(filp, &buf.ctx);
-#else
- rc = inode->i_fop->iterate(filp, &buf.ctx);
-#endif
filp->f_pos = buf.ctx.pos;
#else
rc = inode->i_fop->readdir(filp, &buf, osd_ldiskfs_filldir);
buf.oifb_items = 0;
#ifdef HAVE_DIR_CONTEXT
buf.ctx.pos = filp->f_pos;
-#ifdef HAVE_ITERATE_SHARED
rc = fops->iterate_shared(filp, &buf.ctx);
-#else
- rc = fops->iterate(filp, &buf.ctx);
-#endif
filp->f_pos = buf.ctx.pos;
#else
rc = fops->readdir(filp, &buf, filldir);