On Wed, Jul 27, 2022 at 9:17 AM Alexey Khoroshilov <khoroshilov@xxxxxxxxx> wrote: > > We see a number of cases where WARNING is used to inform userspace that > it is doing something wrong, e.g. > https://elixir.bootlin.com/linux/v5.19-rc8/source/net/can/j1939/socket.c#L181 > https://elixir.bootlin.com/linux/v5.19-rc8/source/drivers/video/fbdev/core/fbmem.c#L1023 That first case is entirely bogus. WARN_ON() should only be used for "This cannot happen, but if it does, I want to know how we got here". But the second case is fine: Using "pr_warn()" is fine. A kernel warning (without a backtrace) is a normal thing for something that is deprecated or questionable, and you want to tell the user that "this app is doing something wrong". So if that j1939 thing is something that can be triggered by a user, then the backtrace should be reported to the driver maintainer, and then either (a) the WARN_ON_ONCE() should just be removed ("ok, this can happen, we understand why it can happen, and it's fine") (b) the problem the WARN_ON_ONCE() reports about should be made impossible some way (c) it might be downgraded to a pr_warn() if people really want to tell user space that "guys, you're doing something wrong" and it's considered a useful warning. Honestly, for something like that j1939 can driver, I doubt (c) is ever an option. The "return -EBUSY" is the only real information that a user needs. Linus