SPL_AC_PDE_DATA
SPL_AC_MUTEX_OWNER
SPL_AC_MUTEX_OWNER_TASK_STRUCT
- SPL_AC_SET_FS_PWD
SPL_AC_SET_FS_PWD_WITH_CONST
SPL_AC_2ARGS_VFS_UNLINK
SPL_AC_4ARGS_VFS_RENAME
])
])
-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 # 3.9 API change
dnl # set_fs_pwd takes const struct path *
} /* releasef() */
EXPORT_SYMBOL(releasef);
-#ifndef HAVE_SET_FS_PWD
-void
-# ifdef HAVE_SET_FS_PWD_WITH_CONST
-set_fs_pwd(struct fs_struct *fs, const struct path *path)
-# else
-set_fs_pwd(struct fs_struct *fs, struct path *path)
-# endif
+static void
+#ifdef HAVE_SET_FS_PWD_WITH_CONST
+vn_set_fs_pwd(struct fs_struct *fs, const struct path *path)
+#else
+vn_set_fs_pwd(struct fs_struct *fs, struct path *path)
+#endif /* HAVE_SET_FS_PWD_WITH_CONST */
{
struct path old_pwd;
-# ifdef HAVE_FS_STRUCT_SPINLOCK
+#ifdef HAVE_FS_STRUCT_SPINLOCK
spin_lock(&fs->lock);
old_pwd = fs->pwd;
fs->pwd = *path;
path_get(path);
spin_unlock(&fs->lock);
-# else
+#else
write_lock(&fs->lock);
old_pwd = fs->pwd;
fs->pwd = *path;
path_get(path);
write_unlock(&fs->lock);
-# endif /* HAVE_FS_STRUCT_SPINLOCK */
+#endif /* HAVE_FS_STRUCT_SPINLOCK */
if (old_pwd.dentry)
path_put(&old_pwd);
}
-#endif /* HAVE_SET_FS_PWD */
int
vn_set_pwd(const char *filename)
if (rc)
SGOTO(dput_and_out, rc);
- set_fs_pwd(current->fs, &path);
+ vn_set_fs_pwd(current->fs, &path);
dput_and_out:
path_put(&path);