]> granicus.if.org Git - zfs/blob - config/kernel-rwsem.m4
ZFS mounted NFSv3 shares fail lock reclaims
[zfs] / config / kernel-rwsem.m4
1 dnl #
2 dnl # 3.1 API Change
3 dnl #
4 dnl # The rw_semaphore.wait_lock member was changed from spinlock_t to
5 dnl # raw_spinlock_t at commit ddb6c9b58a19edcfac93ac670b066c836ff729f1.
6 dnl #
7 AC_DEFUN([ZFS_AC_KERNEL_RWSEM_SPINLOCK_IS_RAW], [
8         AC_MSG_CHECKING([whether struct rw_semaphore member wait_lock is raw])
9         tmp_flags="$EXTRA_KCFLAGS"
10         EXTRA_KCFLAGS="-Werror"
11         ZFS_LINUX_TRY_COMPILE([
12                 #include <linux/rwsem.h>
13         ],[
14                 struct rw_semaphore dummy_semaphore __attribute__ ((unused));
15                 raw_spinlock_t dummy_lock __attribute__ ((unused)) =
16                     __RAW_SPIN_LOCK_INITIALIZER(dummy_lock);
17                 dummy_semaphore.wait_lock = dummy_lock;
18         ],[
19                 AC_MSG_RESULT(yes)
20                 AC_DEFINE(RWSEM_SPINLOCK_IS_RAW, 1,
21                 [struct rw_semaphore member wait_lock is raw_spinlock_t])
22         ],[
23                 AC_MSG_RESULT(no)
24         ])
25         EXTRA_KCFLAGS="$tmp_flags"
26 ])
27
28 dnl #
29 dnl # 3.16 API Change
30 dnl #
31 dnl # rwsem-spinlock "->activity" changed to "->count"
32 dnl #
33 AC_DEFUN([ZFS_AC_KERNEL_RWSEM_ACTIVITY], [
34         AC_MSG_CHECKING([whether struct rw_semaphore has member activity])
35         tmp_flags="$EXTRA_KCFLAGS"
36         EXTRA_KCFLAGS="-Werror"
37         ZFS_LINUX_TRY_COMPILE([
38                 #include <linux/rwsem.h>
39         ],[
40                 struct rw_semaphore dummy_semaphore __attribute__ ((unused));
41                 dummy_semaphore.activity = 0;
42         ],[
43                 AC_MSG_RESULT(yes)
44                 AC_DEFINE(HAVE_RWSEM_ACTIVITY, 1,
45                 [struct rw_semaphore has member activity])
46         ],[
47                 AC_MSG_RESULT(no)
48         ])
49         EXTRA_KCFLAGS="$tmp_flags"
50 ])
51
52 dnl #
53 dnl # 4.8 API Change
54 dnl #
55 dnl # rwsem "->count" changed to atomic_long_t type
56 dnl #
57 AC_DEFUN([ZFS_AC_KERNEL_RWSEM_ATOMIC_LONG_COUNT], [
58         AC_MSG_CHECKING(
59         [whether struct rw_semaphore has atomic_long_t member count])
60         tmp_flags="$EXTRA_KCFLAGS"
61         EXTRA_KCFLAGS="-Werror"
62         ZFS_LINUX_TRY_COMPILE([
63                 #include <linux/rwsem.h>
64         ],[
65                 DECLARE_RWSEM(dummy_semaphore);
66                 (void) atomic_long_read(&dummy_semaphore.count);
67         ],[
68                 AC_MSG_RESULT(yes)
69                 AC_DEFINE(HAVE_RWSEM_ATOMIC_LONG_COUNT, 1,
70                 [struct rw_semaphore has atomic_long_t member count])
71         ],[
72                 AC_MSG_RESULT(no)
73         ])
74         EXTRA_KCFLAGS="$tmp_flags"
75 ])