Linux 4.7 commit
ae05327a00fd47c34dfe25294b359a3f3fef96e8 replaces
ext4_dir_operations iterate with iterate_shared. dir_relaxed_shared()
was also added in that commit, so we can use that function to verify
that the ext4_dir_operations is using iterate_shared.
Cray-bug-id: LUS-6008
Signed-off-by: Chris Horn <hornc@cray.com>
Change-Id: I67ff714296cab96408cb74fba62855c0e12cdf43
Reviewed-on: https://review.whamcloud.com/32486
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: James Simmons <uja.ornl@yahoo.com>
Reviewed-by: Yang Sheng <ys@whamcloud.com>
Reviewed-by: Li Dongyang <dongyangli@ddn.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
]) # LC_GENERIC_WRITE_SYNC_2ARGS
#
+# 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
# 4.7
LC_DIRECTIO_2ARGS
LC_GENERIC_WRITE_SYNC_2ARGS
+ LC_FOPS_ITERATE_SHARED
# 4.8
LC_HAVE_POSIX_ACL_VALID_USER_NS
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);