Remove set_fs_pwd() configure check

This function has never been exported by any mainline and was only
briefly available under RHEL5.  Therefore this check is being removed
and the code update to always use the wrapper function.

The next step will be to eliminate all this code.  If ZFS were updated
not to assume that it's pwd was / there would be no need for this.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
This commit is contained in:
Brian Behlendorf 2014-10-02 12:47:09 -04:00
parent 3c49a16989
commit 137af025f6
2 changed files with 10 additions and 31 deletions

View File

@ -28,7 +28,6 @@ AC_DEFUN([SPL_AC_CONFIG_KERNEL], [
SPL_AC_PDE_DATA SPL_AC_PDE_DATA
SPL_AC_MUTEX_OWNER SPL_AC_MUTEX_OWNER
SPL_AC_MUTEX_OWNER_TASK_STRUCT SPL_AC_MUTEX_OWNER_TASK_STRUCT
SPL_AC_SET_FS_PWD
SPL_AC_SET_FS_PWD_WITH_CONST SPL_AC_SET_FS_PWD_WITH_CONST
SPL_AC_2ARGS_VFS_UNLINK SPL_AC_2ARGS_VFS_UNLINK
SPL_AC_4ARGS_VFS_RENAME SPL_AC_4ARGS_VFS_RENAME
@ -972,24 +971,6 @@ AC_DEFUN([SPL_AC_PDE_DATA], [
]) ])
]) ])
dnl #
dnl # Symbol available in RHEL kernels not in stock kernels.
dnl #
AC_DEFUN([SPL_AC_SET_FS_PWD],
[AC_MSG_CHECKING([whether set_fs_pwd() is available])
SPL_LINUX_TRY_COMPILE_SYMBOL([
#include <linux/spinlock.h>
#include <linux/fs_struct.h>
], [
(void) set_fs_pwd;
], [set_fs_pwd], [], [
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_SET_FS_PWD, 1, [set_fs_pwd() is available])
], [
AC_MSG_RESULT(no)
])
])
dnl # dnl #
dnl # 3.9 API change dnl # 3.9 API change
dnl # set_fs_pwd takes const struct path * dnl # set_fs_pwd takes const struct path *

View File

@ -766,34 +766,32 @@ vn_releasef(int fd)
} /* releasef() */ } /* releasef() */
EXPORT_SYMBOL(releasef); EXPORT_SYMBOL(releasef);
#ifndef HAVE_SET_FS_PWD static void
void #ifdef HAVE_SET_FS_PWD_WITH_CONST
# ifdef HAVE_SET_FS_PWD_WITH_CONST vn_set_fs_pwd(struct fs_struct *fs, const struct path *path)
set_fs_pwd(struct fs_struct *fs, const struct path *path) #else
# else vn_set_fs_pwd(struct fs_struct *fs, struct path *path)
set_fs_pwd(struct fs_struct *fs, struct path *path) #endif /* HAVE_SET_FS_PWD_WITH_CONST */
# endif
{ {
struct path old_pwd; struct path old_pwd;
# ifdef HAVE_FS_STRUCT_SPINLOCK #ifdef HAVE_FS_STRUCT_SPINLOCK
spin_lock(&fs->lock); spin_lock(&fs->lock);
old_pwd = fs->pwd; old_pwd = fs->pwd;
fs->pwd = *path; fs->pwd = *path;
path_get(path); path_get(path);
spin_unlock(&fs->lock); spin_unlock(&fs->lock);
# else #else
write_lock(&fs->lock); write_lock(&fs->lock);
old_pwd = fs->pwd; old_pwd = fs->pwd;
fs->pwd = *path; fs->pwd = *path;
path_get(path); path_get(path);
write_unlock(&fs->lock); write_unlock(&fs->lock);
# endif /* HAVE_FS_STRUCT_SPINLOCK */ #endif /* HAVE_FS_STRUCT_SPINLOCK */
if (old_pwd.dentry) if (old_pwd.dentry)
path_put(&old_pwd); path_put(&old_pwd);
} }
#endif /* HAVE_SET_FS_PWD */
int int
vn_set_pwd(const char *filename) vn_set_pwd(const char *filename)
@ -819,7 +817,7 @@ vn_set_pwd(const char *filename)
if (rc) if (rc)
SGOTO(dput_and_out, rc); SGOTO(dput_and_out, rc);
set_fs_pwd(current->fs, &path); vn_set_fs_pwd(current->fs, &path);
dput_and_out: dput_and_out:
path_put(&path); path_put(&path);