diff options
-rw-r--r-- | config/spl-build.m4 | 23 | ||||
-rw-r--r-- | module/spl/spl-vnode.c | 18 |
2 files changed, 34 insertions, 7 deletions
diff --git a/config/spl-build.m4 b/config/spl-build.m4 index 84267807d..08b84efe9 100644 --- a/config/spl-build.m4 +++ b/config/spl-build.m4 @@ -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) + ]) ]) ]) ]) diff --git a/module/spl/spl-vnode.c b/module/spl/spl-vnode.c index 549606770..fa3e49054 100644 --- a/module/spl/spl-vnode.c +++ b/module/spl/spl-vnode.c @@ -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: |