diff options
| -rw-r--r-- | include/linux/lockdep.h | 4 | ||||
| -rw-r--r-- | kernel/printk.c | 3 | 
2 files changed, 6 insertions, 1 deletions
| diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h index b6a56e37284c..d36619ead3ba 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h @@ -343,6 +343,8 @@ extern void lockdep_trace_alloc(gfp_t mask);  #define lockdep_assert_held(l)	WARN_ON(debug_locks && !lockdep_is_held(l)) +#define lockdep_recursing(tsk)	((tsk)->lockdep_recursion) +  #else /* !LOCKDEP */  static inline void lockdep_off(void) @@ -392,6 +394,8 @@ struct lock_class_key { };  #define lockdep_assert_held(l)			do { } while (0) +#define lockdep_recursing(tsk)			(0) +  #endif /* !LOCKDEP */  #ifdef CONFIG_LOCK_STAT diff --git a/kernel/printk.c b/kernel/printk.c index 1455a0d4eedd..6d087944e72a 100644 --- a/kernel/printk.c +++ b/kernel/printk.c @@ -688,6 +688,7 @@ static void zap_locks(void)  	oops_timestamp = jiffies; +	debug_locks_off();  	/* If a crash is occurring, make sure we can't deadlock */  	raw_spin_lock_init(&logbuf_lock);  	/* And make sure that we print immediately */ @@ -856,7 +857,7 @@ asmlinkage int vprintk(const char *fmt, va_list args)  		 * recursion and return - but flag the recursion so that  		 * it can be printed at the next appropriate moment:  		 */ -		if (!oops_in_progress) { +		if (!oops_in_progress && !lockdep_recursing(current)) {  			recursion_bug = 1;  			goto out_restore_irqs;  		} | 
