Whamcloud - gitweb
LU-4726 ptlrpc: vfs_rename api changed 37/9537/4
authorBob Glossman <bob.glossman@intel.com>
Thu, 6 Mar 2014 18:31:05 +0000 (10:31 -0800)
committerOleg Drokin <oleg.drokin@intel.com>
Mon, 10 Mar 2014 22:41:13 +0000 (22:41 +0000)
In newer kernels the vfs_rename api changed to take
more arguments. This patch creates a wrapper to let us adapt
to the different versions of vfs_rename in old and new kernels.

Signed-off-by: Bob Glossman <bob.glossman@intel.com>
Change-Id: Ia5dafe64570fc404cd8a037fd442ca12e687ffc1
Reviewed-on: http://review.whamcloud.com/9537
Tested-by: Jenkins
Reviewed-by: James Simmons <uja.ornl@gmail.com>
Reviewed-by: Dmitry Eremin <dmitry.eremin@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/autoconf/lustre-core.m4
lustre/include/linux/lustre_compat25.h
lustre/ptlrpc/sec_ctx.c

index 804b6e0..a42b479 100644 (file)
@@ -1454,6 +1454,22 @@ LB_LINUX_TRY_COMPILE([
 ])
 ])
 
 ])
 ])
 
+# 3.13 has vfs_renane with 5 args
+AC_DEFUN([LC_VFS_RENAME_5ARGS],
+[AC_MSG_CHECKING([if kernel has vfs_rename with 5 args])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/fs.h>
+],[
+       vfs_rename(NULL, NULL, NULL, NULL, NULL);
+], [
+       AC_MSG_RESULT([yes])
+       AC_DEFINE(HAVE_VFS_RENAME_5ARGS, 1,
+               [kernel has vfs_rename with 5 args])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
 #
 # LC_PROG_LINUX
 #
 #
 # LC_PROG_LINUX
 #
@@ -1566,6 +1582,9 @@ AC_DEFUN([LC_PROG_LINUX],
         LC_OLDSIZE_TRUNCATE_PAGECACHE
         LC_KIOCB_KI_LEFT
 
         LC_OLDSIZE_TRUNCATE_PAGECACHE
         LC_KIOCB_KI_LEFT
 
+        # 3.13
+        LC_VFS_RENAME_5ARGS
+
         #
         if test x$enable_server != xno ; then
                LC_FUNC_DEV_SET_RDONLY
         #
         if test x$enable_server != xno ; then
                LC_FUNC_DEV_SET_RDONLY
index 24412f2..a485b07 100644 (file)
@@ -336,4 +336,10 @@ static inline struct dentry *d_make_root(struct inode *root)
 #define ll_truncate_pagecache(inode, size) truncate_pagecache(inode, size)
 #endif
 
 #define ll_truncate_pagecache(inode, size) truncate_pagecache(inode, size)
 #endif
 
+#ifdef HAVE_VFS_RENAME_5ARGS
+#define ll_vfs_rename(a, b, c, d) vfs_rename(a, b, c, d, NULL)
+#else
+#define ll_vfs_rename(a, b, c, d) vfs_rename(a, b, c, d)
+#endif
+
 #endif /* _COMPAT25_H */
 #endif /* _COMPAT25_H */
index 29ffc95..34d1afc 100644 (file)
@@ -116,7 +116,7 @@ int lustre_rename(struct dentry *dir, struct vfsmount *mnt,
        if (IS_ERR(dchild_new))
                GOTO(put_old, err = PTR_ERR(dchild_new));
 
        if (IS_ERR(dchild_new))
                GOTO(put_old, err = PTR_ERR(dchild_new));
 
-       err = vfs_rename(dir->d_inode, dchild_old, dir->d_inode, dchild_new);
+       err = ll_vfs_rename(dir->d_inode, dchild_old, dir->d_inode, dchild_new);
 
        dput(dchild_new);
 put_old:
 
        dput(dchild_new);
 put_old: