mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
Linux 2.6.36 compat, fs_struct->lock type change
In the linux-2.6.36 kernel the fs_struct lock was changed from a rwlock_t to a spinlock_t. If the kernel would export the set_fs_pwd() symbol by default this would not have caused us any issues, but they don't. So we're forced to add a new autoconf check which sets the HAVE_FS_STRUCT_SPINLOCK define when a spinlock_t is used. We can then correctly use either spin_lock or write_lock in our custom set_fs_pwd() implementation.
This commit is contained in:
@@ -66,6 +66,7 @@ AC_DEFUN([SPL_AC_CONFIG_KERNEL], [
|
||||
SPL_AC_2ARGS_SET_FS_PWD
|
||||
SPL_AC_2ARGS_VFS_UNLINK
|
||||
SPL_AC_4ARGS_VFS_RENAME
|
||||
SPL_AC_FS_STRUCT_SPINLOCK
|
||||
SPL_AC_CRED_STRUCT
|
||||
SPL_AC_GROUPS_SEARCH
|
||||
SPL_AC_PUT_TASK_STRUCT
|
||||
@@ -1547,6 +1548,28 @@ AC_DEFUN([SPL_AC_4ARGS_VFS_RENAME],
|
||||
])
|
||||
])
|
||||
|
||||
dnl #
|
||||
dnl # 2.6.36 API change,
|
||||
dnl # The 'struct fs_struct->lock' was changed from a rwlock_t to
|
||||
dnl # a spinlock_t to improve the fastpath performance.
|
||||
dnl #
|
||||
AC_DEFUN([SPL_AC_FS_STRUCT_SPINLOCK], [
|
||||
AC_MSG_CHECKING([whether struct fs_struct uses spinlock_t])
|
||||
SPL_LINUX_TRY_COMPILE([
|
||||
#include <linux/sched.h>
|
||||
#include <linux/fs_struct.h>
|
||||
],[
|
||||
struct fs_struct fs;
|
||||
spin_lock_init(&fs.lock);
|
||||
],[
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(HAVE_FS_STRUCT_SPINLOCK, 1,
|
||||
[struct fs_struct uses spinlock_t])
|
||||
],[
|
||||
AC_MSG_RESULT(no)
|
||||
])
|
||||
])
|
||||
|
||||
dnl #
|
||||
dnl # 2.6.29 API change,
|
||||
dnl # check whether 'struct cred' exists
|
||||
|
||||
Reference in New Issue
Block a user