Whamcloud - gitweb
LU-9183 llite: handle flags as argument for inode_operations->rename 27/25827/11
authorDmitry Eremin <dmitry.eremin@intel.com>
Fri, 3 Mar 2017 18:27:36 +0000 (21:27 +0300)
committerOleg Drokin <oleg.drokin@intel.com>
Fri, 5 May 2017 00:43:37 +0000 (00:43 +0000)
In Linux kernel v3.14 the inode_operations->rename() needs flags in
arguments.

Change-Id: I5028357d1d459b83ff0b1df0abeaadf78c5d05da
Signed-off-by: Dmitry Eremin <dmitry.eremin@intel.com>
Reviewed-on: https://review.whamcloud.com/25827
Reviewed-by: James Simmons <uja.ornl@yahoo.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/autoconf/lustre-core.m4
lustre/llite/namei.c

index a4b33f2..16bf84b 100644 (file)
@@ -1785,6 +1785,27 @@ truncate_ipages_final, [
 ]) # LC_HAVE_TRUNCATE_IPAGES_FINAL
 
 #
+# LC_IOPS_RENAME_WITH_FLAGS
+#
+# 3.14 has inode_operations->rename with 5 args
+# commit 520c8b16505236fc82daa352e6c5e73cd9870cff
+#
+AC_DEFUN([LC_IOPS_RENAME_WITH_FLAGS], [
+LB_CHECK_COMPILE([if 'inode_operations->rename' taken flags as argument],
+iops_rename_with_flags, [
+       #include <linux/fs.h>
+],[
+       struct inode *i1 = NULL, *i2 = NULL;
+       struct dentry *d1 = NULL, *d2 = NULL;
+       int rc;
+       rc = ((struct inode_operations *)0)->rename(i1, d1, i2, d2, 0);
+], [
+       AC_DEFINE(HAVE_IOPS_RENAME_WITH_FLAGS, 1,
+               [inode_operations->rename need flags as argument])
+])
+]) # LC_IOPS_RENAME_WITH_FLAGS
+
+#
 # LC_VFS_RENAME_6ARGS
 #
 # 3.15 has vfs_rename with 6 args
@@ -2500,6 +2521,7 @@ AC_DEFUN([LC_PROG_LINUX], [
        # 3.14
        LC_HAVE_BVEC_ITER
        LC_HAVE_TRUNCATE_IPAGES_FINAL
+       LC_IOPS_RENAME_WITH_FLAGS
 
        # 3.15
        LC_VFS_RENAME_6ARGS
index 3b8a889..cba0ef4 100644 (file)
@@ -1375,15 +1375,25 @@ static int ll_unlink(struct inode *dir, struct dentry *dchild)
 }
 
 static int ll_rename(struct inode *src, struct dentry *src_dchild,
-                    struct inode *tgt, struct dentry *tgt_dchild)
+                    struct inode *tgt, struct dentry *tgt_dchild
+#ifdef HAVE_IOPS_RENAME_WITH_FLAGS
+                    , unsigned int flags
+#endif
+                    )
 {
        struct qstr *src_name = &src_dchild->d_name;
        struct qstr *tgt_name = &tgt_dchild->d_name;
-        struct ptlrpc_request *request = NULL;
-        struct ll_sb_info *sbi = ll_i2sbi(src);
-        struct md_op_data *op_data;
-        int err;
-        ENTRY;
+       struct ptlrpc_request *request = NULL;
+       struct ll_sb_info *sbi = ll_i2sbi(src);
+       struct md_op_data *op_data;
+       int err;
+       ENTRY;
+
+#ifdef HAVE_IOPS_RENAME_WITH_FLAGS
+       if (flags)
+               return -EINVAL;
+#endif
+
        CDEBUG(D_VFSTRACE, "VFS Op:oldname=%.*s, src_dir="DFID
               "(%p), newname=%.*s, tgt_dir="DFID"(%p)\n",
               src_name->len, src_name->name,