mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-27 03:19:35 +03:00
Add mutex_enter_nested() which maps to mutex_lock_nested()
Also add support for the "name" parameter in mutex_init(). The name allows for better diagnostics, namely in /proc/lock_stats when lock debugging is enabled. Nested mutexes are necessary to support CONFIG_PROVE_LOCKING. ZoL can use mutex_enter_nested()'s "class" argument to to convey the locking hierarchy. Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Tim Chase <tim@chase2k.com> Closes #439
This commit is contained in:
parent
6ab08667a4
commit
79a0056e13
@ -67,7 +67,7 @@ typedef struct {
|
|||||||
(type == MUTEX_ADAPTIVE) || \
|
(type == MUTEX_ADAPTIVE) || \
|
||||||
(type == MUTEX_FSTRANS)); \
|
(type == MUTEX_FSTRANS)); \
|
||||||
\
|
\
|
||||||
__mutex_init(MUTEX(mp), #mp, &__key); \
|
__mutex_init(MUTEX(mp), (name) ? (#name) : (#mp), &__key); \
|
||||||
spin_lock_init(&(mp)->m_lock); \
|
spin_lock_init(&(mp)->m_lock); \
|
||||||
(mp)->m_type = type; \
|
(mp)->m_type = type; \
|
||||||
(mp)->m_owner = NULL; \
|
(mp)->m_owner = NULL; \
|
||||||
@ -95,7 +95,19 @@ typedef struct {
|
|||||||
_rc_; \
|
_rc_; \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define mutex_enter(mp) \
|
#ifdef CONFIG_DEBUG_LOCK_ALLOC
|
||||||
|
#define mutex_enter_nested(mp, subclass) \
|
||||||
|
{ \
|
||||||
|
ASSERT3P(mutex_owner(mp), !=, current); \
|
||||||
|
mutex_lock_nested(MUTEX(mp), (subclass)); \
|
||||||
|
(mp)->m_owner = current; \
|
||||||
|
if ((mp)->m_type == MUTEX_FSTRANS) { \
|
||||||
|
(mp)->m_saved_flags = current->flags; \
|
||||||
|
current->flags |= PF_FSTRANS; \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
#else /* CONFIG_DEBUG_LOCK_ALLOC */
|
||||||
|
#define mutex_enter_nested(mp, subclass) \
|
||||||
{ \
|
{ \
|
||||||
ASSERT3P(mutex_owner(mp), !=, current); \
|
ASSERT3P(mutex_owner(mp), !=, current); \
|
||||||
mutex_lock(MUTEX(mp)); \
|
mutex_lock(MUTEX(mp)); \
|
||||||
@ -105,6 +117,9 @@ typedef struct {
|
|||||||
current->flags |= PF_FSTRANS; \
|
current->flags |= PF_FSTRANS; \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_DEBUG_LOCK_ALLOC */
|
||||||
|
|
||||||
|
#define mutex_enter(mp) mutex_enter_nested((mp), 0)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The reason for the spinlock:
|
* The reason for the spinlock:
|
||||||
|
Loading…
Reference in New Issue
Block a user