Commit af9379c7121d5543722c00bbd1adf7dcaa0b6448
Committed by
Linus Torvalds
1 parent
5f820f648c
Exists in
master
and in
4 other branches
documentation: when to BUG(), and when to not BUG()
Provide some basic advice about when to use BUG()/BUG_ON(): never, unless there's really no better option. This matches my understanding of the standard policy ... which seems not to be written down so far, outside of LKML messages that I haven't bookmarked. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Cc: Hans Verkuil <hverkuil@xs4all.nl> Cc: Ingo Molnar <mingo@elte.hu> Cc: Arjan van de Ven <arjan@infradead.org> Cc: Randy Dunlap <randy.dunlap@oracle.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 1 changed file with 17 additions and 0 deletions Side-by-side Diff
include/asm-generic/bug.h
... | ... | @@ -28,6 +28,17 @@ |
28 | 28 | #define BUGFLAG_WARNING (1<<0) |
29 | 29 | #endif /* CONFIG_GENERIC_BUG */ |
30 | 30 | |
31 | +/* | |
32 | + * Don't use BUG() or BUG_ON() unless there's really no way out; one | |
33 | + * example might be detecting data structure corruption in the middle | |
34 | + * of an operation that can't be backed out of. If the (sub)system | |
35 | + * can somehow continue operating, perhaps with reduced functionality, | |
36 | + * it's probably not BUG-worthy. | |
37 | + * | |
38 | + * If you're tempted to BUG(), think again: is completely giving up | |
39 | + * really the *only* solution? There are usually better options, where | |
40 | + * users don't need to reboot ASAP and can mostly shut down cleanly. | |
41 | + */ | |
31 | 42 | #ifndef HAVE_ARCH_BUG |
32 | 43 | #define BUG() do { \ |
33 | 44 | printk("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__); \ |
... | ... | @@ -39,6 +50,12 @@ |
39 | 50 | #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while(0) |
40 | 51 | #endif |
41 | 52 | |
53 | +/* | |
54 | + * WARN(), WARN_ON(), WARN_ON_ONCE, and so on can be used to report | |
55 | + * significant issues that need prompt attention if they should ever | |
56 | + * appear at runtime. Use the versions with printk format strings | |
57 | + * to provide better diagnostics. | |
58 | + */ | |
42 | 59 | #ifndef __WARN |
43 | 60 | #ifndef __ASSEMBLY__ |
44 | 61 | extern void warn_slowpath(const char *file, const int line, |