mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +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
	 Tim Chase
						Tim Chase