Whamcloud - gitweb
LU-11044 osd-ldiskfs: ext4_dir_operations uses iterate_shared 86/32486/2
authorChris Horn <hornc@cray.com>
Tue, 22 May 2018 14:39:14 +0000 (09:39 -0500)
committerOleg Drokin <green@whamcloud.com>
Wed, 18 Jul 2018 06:00:04 +0000 (06:00 +0000)
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>
lustre/autoconf/lustre-core.m4
lustre/osd-ldiskfs/osd_handler.c
lustre/osd-ldiskfs/osd_scrub.c

index 399ce0a..2dd5327 100644 (file)
@@ -2537,6 +2537,29 @@ generic_write_sync_2args, [
 ]) # 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
@@ -3078,6 +3101,7 @@ AC_DEFUN([LC_PROG_LINUX], [
        # 4.7
        LC_DIRECTIO_2ARGS
        LC_GENERIC_WRITE_SYNC_2ARGS
+       LC_FOPS_ITERATE_SHARED
 
        # 4.8
        LC_HAVE_POSIX_ACL_VALID_USER_NS
index 8aaf426..f964d92 100644 (file)
@@ -994,7 +994,11 @@ again:
                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);
@@ -6365,7 +6369,11 @@ static int osd_ldiskfs_it_fill(const struct lu_env *env,
 
 #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);
index 0e83f0c..22a7277 100644 (file)
@@ -2284,7 +2284,11 @@ osd_ios_general_scan(struct osd_thread_info *info, struct osd_device *dev,
                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);