diff options
author | Oleg Drokin <[email protected]> | 2017-08-02 14:45:16 -0400 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2017-08-02 11:45:16 -0700 |
commit | d89616fda88bc030aaff758d37ede7d35e58841a (patch) | |
tree | 6947a3a0b235e62cad3187573f6205e7593e36fe /config | |
parent | eed143dfa6af0e004d0239bd3297b30e45b8c4d3 (diff) |
Remove misguided HAVE_MUTEX_OWNER check
It is just plain unsafe to peek inside in-kernel
mutex structure and make assumptions about what kernel
does with those internal fields like owner.
Kernel is all too happy to stop doing the expected things
like tracing lock owner once you load a tainted module
like spl/zfs that is not GPL.
As such you will get instant assertion failures like this:
VERIFY3(((*(volatile typeof((&((&zo->zo_lock)->m_mutex))->owner) *)&
((&((&zo->zo_lock)->m_mutex))->owner))) ==
((void *)0)) failed (ffff88030be28500 == (null))
PANIC at zfs_onexit.c:104:zfs_onexit_destroy()
Showing stack for process 3626
CPU: 0 PID: 3626 Comm: mkfs.lustre Tainted: P OE ------------ 3.10.0-debug #1
Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011
Call Trace:
dump_stack+0x19/0x1b
spl_dumpstack+0x44/0x50 [spl]
spl_panic+0xbf/0xf0 [spl]
zfs_onexit_destroy+0x17c/0x280 [zfs]
zfsdev_release+0x48/0xd0 [zfs]
Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: Chunwei Chen <[email protected]>
Signed-off-by: Oleg Drokin <[email protected]>
Closes #632
Closes #633
Diffstat (limited to 'config')
-rw-r--r-- | config/spl-build.m4 | 30 |
1 files changed, 0 insertions, 30 deletions
diff --git a/config/spl-build.m4 b/config/spl-build.m4 index 630d67c2d..b2a50bf16 100644 --- a/config/spl-build.m4 +++ b/config/spl-build.m4 @@ -49,7 +49,6 @@ AC_DEFUN([SPL_AC_CONFIG_KERNEL], [ SPL_AC_USLEEP_RANGE SPL_AC_KMEM_CACHE_ALLOCFLAGS SPL_AC_WAIT_ON_BIT - SPL_AC_MUTEX_OWNER SPL_AC_INODE_LOCK SPL_AC_GROUP_INFO_GID SPL_AC_KMEM_CACHE_CREATE_USERCOPY @@ -1563,35 +1562,6 @@ AC_DEFUN([SPL_AC_WAIT_ON_BIT], [ ]) dnl # -dnl # Check whether mutex has owner with task_struct type. -dnl # -dnl # Note that before Linux 3.0, mutex owner is of type thread_info. -dnl # -dnl # Note that in Linux 3.18, the condition for owner is changed from -dnl # defined(CONFIG_DEBUG_MUTEXES) || defined(CONFIG_SMP) to -dnl # defined(CONFIG_DEBUG_MUTEXES) || defined(CONFIG_MUTEX_SPIN_ON_OWNER) -dnl # -AC_DEFUN([SPL_AC_MUTEX_OWNER], [ - AC_MSG_CHECKING([whether mutex has owner]) - tmp_flags="$EXTRA_KCFLAGS" - EXTRA_KCFLAGS="-Werror" - SPL_LINUX_TRY_COMPILE([ - #include <linux/mutex.h> - #include <linux/spinlock.h> - ],[ - DEFINE_MUTEX(m); - struct task_struct *t __attribute__ ((unused)); - t = m.owner; - ],[ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_MUTEX_OWNER, 1, [yes]) - ],[ - AC_MSG_RESULT(no) - ]) - EXTRA_KCFLAGS="$tmp_flags" -]) - -dnl # dnl # 4.7 API change dnl # i_mutex is changed to i_rwsem. Instead of directly using dnl # i_mutex/i_rwsem, we should use inode_lock() and inode_lock_shared() |