mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	list debugging: use WARN() instead of BUG()
Arjan noted that the list_head debugging is BUG'ing when it detects corruption. By causing the box to panic immediately, we're possibly losing some bug reports. Changing this to a WARN() should mean we at the least start seeing reports collected at kerneloops.org Signed-off-by: Dave Jones <davej@redhat.com> Cc: Matthew Wilcox <matthew@wil.cx> Cc: Arjan van de Ven <arjan@infradead.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									d955c78ac4
								
							
						
					
					
						commit
						924d9addb9
					
				
					 1 changed files with 14 additions and 22 deletions
				
			
		| 
						 | 
					@ -20,18 +20,14 @@ void __list_add(struct list_head *new,
 | 
				
			||||||
			      struct list_head *prev,
 | 
								      struct list_head *prev,
 | 
				
			||||||
			      struct list_head *next)
 | 
								      struct list_head *next)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (unlikely(next->prev != prev)) {
 | 
						WARN(next->prev != prev,
 | 
				
			||||||
		printk(KERN_ERR "list_add corruption. next->prev should be "
 | 
							"list_add corruption. next->prev should be "
 | 
				
			||||||
			"prev (%p), but was %p. (next=%p).\n",
 | 
							"prev (%p), but was %p. (next=%p).\n",
 | 
				
			||||||
			prev, next->prev, next);
 | 
							prev, next->prev, next);
 | 
				
			||||||
		BUG();
 | 
						WARN(prev->next != next,
 | 
				
			||||||
	}
 | 
							"list_add corruption. prev->next should be "
 | 
				
			||||||
	if (unlikely(prev->next != next)) {
 | 
							"next (%p), but was %p. (prev=%p).\n",
 | 
				
			||||||
		printk(KERN_ERR "list_add corruption. prev->next should be "
 | 
							next, prev->next, prev);
 | 
				
			||||||
			"next (%p), but was %p. (prev=%p).\n",
 | 
					 | 
				
			||||||
			next, prev->next, prev);
 | 
					 | 
				
			||||||
		BUG();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	next->prev = new;
 | 
						next->prev = new;
 | 
				
			||||||
	new->next = next;
 | 
						new->next = next;
 | 
				
			||||||
	new->prev = prev;
 | 
						new->prev = prev;
 | 
				
			||||||
| 
						 | 
					@ -47,16 +43,12 @@ EXPORT_SYMBOL(__list_add);
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void list_del(struct list_head *entry)
 | 
					void list_del(struct list_head *entry)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (unlikely(entry->prev->next != entry)) {
 | 
						WARN(entry->prev->next != entry,
 | 
				
			||||||
		printk(KERN_ERR "list_del corruption. prev->next should be %p, "
 | 
							"list_del corruption. prev->next should be %p, "
 | 
				
			||||||
				"but was %p\n", entry, entry->prev->next);
 | 
							"but was %p\n", entry, entry->prev->next);
 | 
				
			||||||
		BUG();
 | 
						WARN(entry->next->prev != entry,
 | 
				
			||||||
	}
 | 
							"list_del corruption. next->prev should be %p, "
 | 
				
			||||||
	if (unlikely(entry->next->prev != entry)) {
 | 
							"but was %p\n", entry, entry->next->prev);
 | 
				
			||||||
		printk(KERN_ERR "list_del corruption. next->prev should be %p, "
 | 
					 | 
				
			||||||
				"but was %p\n", entry, entry->next->prev);
 | 
					 | 
				
			||||||
		BUG();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	__list_del(entry->prev, entry->next);
 | 
						__list_del(entry->prev, entry->next);
 | 
				
			||||||
	entry->next = LIST_POISON1;
 | 
						entry->next = LIST_POISON1;
 | 
				
			||||||
	entry->prev = LIST_POISON2;
 | 
						entry->prev = LIST_POISON2;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue