]> git.proxmox.com Git - mirror_spl-debian.git/commitdiff
Linux 3.15: vfs_rename() added a flags argument
authorChunwei Chen <tuxoko@gmail.com>
Wed, 7 May 2014 17:54:37 +0000 (10:54 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 7 May 2014 20:38:17 +0000 (13:38 -0700)
Detect the updated vfs_rename() interface and call it with an
extra flags argument.

References:
  torvalds/linux@520c8b1

Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #355

config/spl-build.m4
module/spl/spl-vnode.c

index 84267807db1ca4df51a58fcf9217d15ef7f2740a..08b84efe9474d3440a4ac848e0c67eab7ea943f9 100644 (file)
@@ -1907,7 +1907,28 @@ AC_DEFUN([SPL_AC_4ARGS_VFS_RENAME],
                        AC_DEFINE(HAVE_5ARGS_VFS_RENAME, 1,
                                  [vfs_rename() wants 5 args])
                ],[
-                       AC_MSG_ERROR(no)
+                       AC_MSG_RESULT(no)
+                       dnl #
+                       dnl # Linux 3.15 API change
+                       dnl # Added flags
+                       dnl #
+                       AC_MSG_CHECKING([whether vfs_rename() wants 6 args])
+                       SPL_LINUX_TRY_COMPILE([
+                               #include <linux/fs.h>
+                       ],[
+                               vfs_rename((struct inode *) NULL,
+                                       (struct dentry *) NULL,
+                                       (struct inode *) NULL,
+                                       (struct dentry *) NULL,
+                                       (struct inode **) NULL,
+                                       (unsigned int) 0);
+                       ],[
+                               AC_MSG_RESULT(yes)
+                               AC_DEFINE(HAVE_6ARGS_VFS_RENAME, 1,
+                                         [vfs_rename() wants 6 args])
+                       ],[
+                               AC_MSG_ERROR(no)
+                       ])
                ])
        ])
 ])
index 549606770fa140b0bd534ed365e1a1e7cb096a43..fa3e49054fd301b312438ffee743398841cb2ed5 100644 (file)
@@ -414,13 +414,16 @@ vn_rename(const char *oldname, const char *newname, int x1)
                        SGOTO(exit4, rc);
        }
 
-#ifdef HAVE_4ARGS_VFS_RENAME
+#if defined(HAVE_4ARGS_VFS_RENAME)
        rc = vfs_rename(old_dir->d_inode, old_dentry,
            new_dir->d_inode, new_dentry);
-#else
+#elif defined(HAVE_5ARGS_VFS_RENAME)
        rc = vfs_rename(old_dir->d_inode, old_dentry,
            new_dir->d_inode, new_dentry, NULL);
-#endif /* HAVE_4ARGS_VFS_RENAME */
+#else
+       rc = vfs_rename(old_dir->d_inode, old_dentry,
+           new_dir->d_inode, new_dentry, NULL, 0);
+#endif
 exit4:
        unlock_rename(new_dir, old_dir);
 exit3:
@@ -574,13 +577,16 @@ vn_rename(const char *oldname, const char *newname, int x1)
         if (new_dentry == trap)
                 SGOTO(exit5, rc);
 
-#ifdef HAVE_4ARGS_VFS_RENAME
+#if defined(HAVE_4ARGS_VFS_RENAME)
        rc = vfs_rename(old_dir->d_inode, old_dentry,
            new_dir->d_inode, new_dentry);
-#else
+#elif defined(HAVE_5ARGS_VFS_RENAME)
        rc = vfs_rename(old_dir->d_inode, old_dentry,
            new_dir->d_inode, new_dentry, NULL);
-#endif /* HAVE_4ARGS_VFS_RENAME */
+#else
+       rc = vfs_rename(old_dir->d_inode, old_dentry,
+           new_dir->d_inode, new_dentry, NULL, 0);
+#endif
 exit5:
         dput(new_dentry);
 exit4: