On 11/07/2014 05:15 AM, David Rientjes wrote: > On Thu, 6 Nov 2014, Vivek Goyal wrote: > >> On Thu, Nov 06, 2014 at 01:57:36PM -0800, David Rientjes wrote: >> >> [..] >>> You see that doing >>> >>> if (panic_on_warn) { >>> panic_on_warn = 0; >>> panic(...); >>> } >>> >>> is racy, I hope. If two threads WARN() at the same time, then there's >>> nothing preventing a double panic() because WARN() itself is not >>> serialized against anything. So both the current comment and your >>> suggested revision comment are bogus. >> >> panic() is serialized on panic_lock. So I guess it is fine to hit WARN() >> on multiple cpus. Do you see an issue there? >> > > No issue at all, what's completely mysterious is the panic_on_warn = 0 and > the completely bogus comment that says "prevent further WARN()s from > panicking the system" when that's racy. There's no need to clear > panic_on_warn at all. There very much is. Consider a thread that hits a WARN() and then panics. Then somewhere in the panic code the thread hits another WARN() ... and then panics again. Previously this would have caused the system to "finish" panick'ing. Now it makes the system hang. P. >